Releases: CollinHeist/TitleCardMaker
Releases · CollinHeist/TitleCardMaker
v1.16.0
Major Changes
- Add support for overlay masks to the following card types: Anime, Banner, Calligraphy, Comic Book, Cutout, Divider, Frame, Inset, Landscape, Marvel, Olivier, Overline, Shape, Standard, Star Wars, Tinted Glass, and White Border
- Parse the global
plex
optiontimeout
to adjust after how many seconds an individual API request times out - defaults to 30 seconds - Add "maxima" information to all episodes - see the new TCM Docs for details on each available variable
- Create Formula 1 card type (created as a sponsor reward for user isaacolsen94), documented here
- Create new Notification card type, documented here
- Create new Graph card type, documented here
- Create new Music card type, documented here
- Create new Striped card type, documented here
- Add the
circle
,square
,up triangle
, anddown triangle
shapes to the Shape card - Allow specification of an
TCM_IM_PATH
environment variable to utilize a custommagick.exe
executable in all ImageMagick command calls - Rename PMM to Kometa
- Old
integrate_with_pmm
will still work, but new YAML option isintegrate_with_kometa
- Old
- Generalize mask image searching
- TCM will look for
{filename}-mask.*
, thenmask.*
files (supports all file extensions, and series-wide masks)
- TCM will look for
Major Fixes
- Correctly implement regional translations for languages which are not the first language code - e.g.
ar-SA
- Use an improved text dimension analysis algorithm in (most) card types - this algorithm handles non-standard interline spacing values much better
Minor Changes
- Prefer per-season logos (
logo_season{season_number}.png
) in automated season poster creation - Allow for multi-line season text on posters made via the mini maker
- Optionally ignore "preferred" titles - specifying
ignore_preferred_titles: false
for a Series will indicate that TCM should should only the original title - Do not require source images for the Textless card
- Utilize an LRU cache when querying matching titles
- Log command results as strings, not bytes
- Create base
ImageMagickInterface
function to round an image's corners - Move text dimension analysis function to the base
ImageMagickInterface
class
Minor Fixes
- Improve handling of episode titles which already have quotes (
"
) in them - Print command history when a suitable install of ImageMagick cannot be detected
- Correctly determine custom fonts in archive evaluations of the Comic Book card
Title Card Changes
- Anime
- Add the
episode_stroke_color
extra - Add the
kanji_color
,kanji_font_size
,kanji_stroke_color
, andkanji_stroke_width
extras
- Add the
- Banner
- Correctly apply custom interline spacing
- Use forced-even title splitting
- Revise default text padding to 35 pixels (from 20)
- Adjust index text positioning down by 4 pixels
- Do not apply custom vertical shifts to index text
- Calligraphy
- Reduce the max logo height to 725 pixels (from 750)
- Comic Book
- Correctly apply index banner shift extra
- Correct the banner placement for custom text offsets
- Correctly offset index banner by text height (was erroneously using width)
- Inset
- Do not pass custom interline spacing to the index text
- Landscape
- Add the
box_width
extra
- Add the
- Logo
- Rewrite all ImageMagick commands to no longer user intermediate images - should be ~2-3x faster
- Position logo under text (was above)
- Marvel
- Correctly resize the underlying source image if the border is completely omitted
- Olivier
- Add the
omit_gradient
extra
- Add the
- Overline
- Change the default line thickness to 9 pixels (from 7)
- Add the
episode_text_font_size
extra
- Roman Numeral
- Allow transparent
.webp
images
- Allow transparent
- Shape
- Add all other supported shapes (see above)
- Position shape below text (was above)
- Standard
- Correctly add only the season text when episode text is hidden
- Add the
episode_text_vertical_shift
extra - Correctly apply custom interword spacing
- Tinted Frame
- Change the default frame width to 5 pixels (from 3)
- Begin splitting titles into multiple lines after 42 characters (from 35)
- Tinted Glass
- Move all text down by 50 pixels
- Add the
vertical_adjustment
extra - Add the
rounding_radius
extra
v1.15.0
Major Changes
- Create Shape card type. The diamond shape is fully customizable in color, shape, size, and position
- Create Inset card type
- Crate Banner card type
- Also determine whether an archive variation has a customized Font based on the provided extras
- Add option to position logos in the center of season posters; separate placement of text and logos
- Remove
--top-placement
mini maker argument - Add
--logo-placement
and--text-placement
mini maker arguments - Parse
logo_placement
andtext_placement
YAML arguments in season poster specifications (old arguments will still work)
- Remove
Major Fixes
- Also query for Series under full name within Plex (if no database IDs are available)
- Properly detect already full names in Sonarr ID matching
- Fix logo file specification in mini maker
Minor Changes
- Add
text_gravity
extra to Divider card type - Add
border_color
extra to White Border card type - Add
overlay_transparency
extra to Cutout card type - Cache Docker layers in build workflows
- Download art backdrops for card types which do not use a source if art style is indicated
- Utilize even title splitting in the Tinted Frame card (was top) - this should have a only have a marginal effect on very long titles
- Shift top element index text up 3px in Tinted Frame card
- Utilize font vertical shift in Star Wars card
- Merge
KHthe8th/TintedFramePlusTitleCard
(user-created card type)
- Add
logo_vertical_shift
extra to Tinted Frame card - Adjust interline spacing for title text if
line_position
isbottom
in the Overline card - Add
episode_text_font_size
extra to Standard and White Border cards - Add
shadow_color
extra to Calligraphy, Landscape, and Tinted Frame cards - Reduce default interline spacing in Calligraphy card
- Utilize forced title splitting in Calligraphy card
- Change shadow opacity of Calligraphy, Landscape, and Tinted Frame drop shadows to 85% (from 80%)
Minor Fixes
- Also write EXIF tag data to season posters if PMM integration is enabled
- Fix some preview images within the README
- Fix
pyyaml
package version to 6.0.1 to avoid cython build error in version 6.0.0 of the package - Also escape ending
\
characters in ImageMagick commands - Handle bad command splits in ImageMagick commands
- Reset all other custom extras in default Font archive sub-variations
- Correctly reset
stroke_color
in default Font archives for the Logo title card - Correctly determine the bounding box coordinates for Landscape cards with custom Font interword spacings
- Change Standard max title line count to 4 (from 3)
v1.14.5
Major Changes
- Create Calligraphy card (specified via
card_type: calligraphy
identifier)
- Change default Docker ImageMagick policy to allow up to 12 threads
- Write EXIF data (
titlecard
at EXIF tag0x4242
) to uploaded assets when PMM integration is enabled- Improves integration with PMM to allow PMM to detect when an asset has been modified by TCM
- Closes #402
- Begin publishing Docker container on
:latest
tag (in addition to:master
and:develop
- Allow arbitrary formatting of the title text via the
title_text_format
extra for example:title_text_format: "{title} - Aired {airdate:%b %d %Y}"
will produce episode titles likePilot - Aired Sep 07 2016
- Applicable to all title cards; has the same variables as episode text
Major Fixes
- Limit single path component string lengths to 254 characters
Minor Changes
- Add
--logo
mini maker argument to specify a Logo path for card creation - Add
--movie-drop-shadow
mini maker argument to add drop shadows to movie posters - for example:
- Closes #406
- Allow specification of evenly split titles in custom Card Types
- Update package dependencies (all minor, backwards-compatible revisions)
- Add support for title-case version of cardinal and ordinal numbers in text format strings
- For example,
Season {season_number_cardinal_title}
will add season text likeSeason One
- Any supported cardinal or ordinal variable (e.g. absolute/episode/season number - including translations) can be title-cased by adding
_title
as the variable postfix
- For example,
- Add
episode_text_font_size
extra to Olivier card
Minor Fixes
- Handle more instances of "generic" server errors from TMDb when gathering source images
- Handle bad Jellyfin episode data when querying Jellyfin for watched statuses
- Update interline spacing on Genre Cards (for multi-line genre text)
v1.14.4
Major Changes
- Create Overline card type
- Create Marvel card type styled after RedHeadJedi's MCU poster set
Major Fixes
N/A
Minor Changes
- Automatically search for (and apply) mask images in the Tinted Frame card
- TCM will search for files named like
{filename}-mask.png
- e.g.s1e1-mask.png
in the source folder - If provided, this mask image is overlayed after the text, frame, and logo are applied
- This can be used to give the appearance of part of the image extending beyond the boundaries of the frame - for example:
- Which was created using this hand-created mask image
- For demonstrative purposes I created an entire set for Mr. Robot with these masks - see here
- TCM will search for files named like
- Add support for
episode_text_vertical_shift
in Olivier card to manually shift just the episode text - Add support for
glass_color
extra in the Tinted Glass card - Add
/config
volume to Docker image; add the Python version as argument (thanks @mchangrh)
Minor Fixes
- Use better name matching in Plex when the Series has no database ID's (no longer strictly case-sensitive)
- Log error message when Jellyfin returns bad Episode data
- Properly identify
case_name
as a bad Font attribute - Do not blur edges if image blurring is enabled in Tinted Frame card - should improve card creation times when blurring
- Handle non-string series exclusion names in Sync exclusion YAML files
v1.14.3
Major Changes
- Create the Comic book title card
- Inspired by the aesthetic of Comic Books - features two adjustable "banners" at the top and bottom of the Card - for example:
- The banner positions, fill and edge colors, vertical shift, and rotation can all be adjusted via extras - for example, here is an animation of the adjustable rotation and vertical positioning:
- The rotation of banners can be "randomized" to give more aesthetic variation between cards - randomization is specified and bounded by
random[lower, upper]
using the angle of rotation, for example:extras: title_text_rotation_angle: random[-4, 4] index_text_rotation_angle: random[-2, 2]
- The above YAML would pick a random angle between -4 and 4 for the title text banner, and -2 and 2 for the index text banner
- Specified via
comic book
as thecard_type
- Closed #377
- Inspired by the aesthetic of Comic Books - features two adjustable "banners" at the top and bottom of the Card - for example:
- Add the
episode_text_font
,episode_text_font_size
,episode_text_vertical_shift
, andframe_width
extras to the Tinted Frame card - Permit custom Font files in the Roman Numeral card
- Add support for
interword_spacing
to all cards- Specified via
font
attribute, like so:font: interword_spacing: 10 # Any number here
- Remove
interword_spacing
extra from Olivier and Frame cards
- Specified via
Major Fixes
- Correct
has_series
evaluation of Jellyfin and Emby Series - Correct frame boundaries when using a scaled logo in the Tinted Frame card
- Correctly apply Font vertical offsets to Tinted Glass card (text and glass box were opposite)
- Parse custom Font kerning in Divider cards
Minor Changes
- Add
box_color
extra to Landscape card to specify a box color separately from the text color - Add
blur_profile
extra to Cutout card to specify how much blurring is used on the number edges (when enabled) - Add thank you message & auto-updated image of current and past sponsors to README
- Parse interline spacing in Roman Numeral cards
- Parse custom Font interline spacing, interword spacing, and kerning in Cutout card
- Add
divider_color
extra to Divider card
Minor Fixes
- Fix typo in WebInterface log message
- Add the White Border card to the README
- Properly detect custom Font files and interline spacings in Poster card archives
v1.14.2
Major Changes
- Allow only downloaded Episodes to be queried from Sonarr (when Sonarr is selected as the Episode data source)
- Toggled via the global
downloaded_only
sonarr
option - This is different than the
sync
option (of the same name) as that option controls which Series are added from the Sync - this controls which Episodes are added - Implements #362
- Toggled via the global
- Use a
UMASK
of002
in Docker by default - Change the default
PUID
andPGID
to100
and99
in Docker - Use Python 3.11 instead of Python 3.9 in Docker
- Use much faster external
imagesize
package instead of ImageMagick commands - will require cleanpipenv install
- Create new
WhiteBorder
title card- Created with the help of Musikmann2000, mvanbaak, and supermariobruh
- Variation of the Standard card, but with the white border to match Musikmann's poster style - for example:
- Has support for the extras
episode_text_color
,interword_spacing
,omit_gradient
,separator
, andstroke_color
. - Can be specified with the Card type
white border
ormusikmann
Major Fixes
- Disable tqdm progress bars if no TTY is present (thanks @mvanbaak for the PR)
- Use explicit 10-30 second timeouts in all GET requests to prevent the program from locking in some scenarios
Minor Changes
- Parse
episode_text_color
extra in the Standard and Star Wars title cards - Allow custom Fonts in Poster title card
- Log when Tautulli update file does not exist
-
- Use
runuser
instead ofgosu
in Docker
- Use
- Parse Font
vertical_shift
in Divider title card - Parse Font
interword_spacing
extra in Frame and Olivier title card - Keep logs for up to 14 days
- Parse
hide_episode_text
extra in Standard card - Use maxsplit=1 where applicable to improve performance
- Use
with
statement with subprocess opening statements - Reduce maximum attempts for season text placement in Roman Numeral card to 5 from 10
- Remove
--add-translation
fixer command
Minor Fixes
- Detect Series info from TRaSH-named folders when importing via fixer
- Ignore non-default stroke in Frame card type
- Retry PersistentDatabase transactions up to 5 times - this should reduce the number of erroneous corruptions/DB resets
- Log
.svg
->.png
conversion failure - Use
sys.exit
instead of built-inexit
- Correct
--delete-blacklist
fixer command
v1.14.1
Major Changes
- Release (to supporters) the TitleCardMaker Web Interface
- Begin updated (and much prettier) documentation - hosted at https://titlecardmaker.readthedocs.io/en/latest/
- Handle combined ISO-639-1 and ISO-3166-1 language codes like
es-MX
ores-ES
for greater translation fidelity - Add multiple features to Tinted Frame title card:
- Change episode text and frame color to match the font color by default
- Add
middle_element
extra - can be eitherlogo
oromit
- to add enlarged logo to the middle of the card, e.g.:
- Add
logo_size
extra to allow shrinking or enlarging the logo size by a scalar, for example:logo_size: 1.5
to scale to 150% - Add
blur_edges
extra to optionally enable/disable blurring the outer edge - Change vertical position of top logo element by +20 pixels for better centering
- Closes #341
- Change default Sonarr request timeout to 10 minutes to handle bad/slower Sonarr connections
Major Fixes
- Uppercase episode text in Star Wars title card (was being title cased)
- Handle title and index text larger than the frame width in the Tinted Frame title card (was drawing frame boundaries that extended outward, now does not draw at all
- Catch and log (at the
Manager
level) uncaught Exceptions in serial run mode - Fix syncing from Emby in match mode
Minor Changes
- Allow custom episode text color in Anime title card via
episode_text_color
extra - Allow custom season text color in Roman Numeral title card via
season_text_color
extra - Use
4:4:4
sampling factor in all card operations (can default to4:2:0
which has some JPEG compression artifacts) - Log everything (just logged messages were being ignored)
- Allow logos to be omitted from Season Posters
- Parse
omit_logo
YAML option in season poster config - Modify
--season-poster
argument inmini_maker
to--season-poster SOURCE DESTINATION
, add--season-poster-logo
argument - Closes #336
- Parse
- Add
hide_episode_text
to Fade title card - Allow logo file format strings in Tinted Frame title card
- Print Traceback for
RemoteFile
download errors - Log relevant Series and Episode when source image / logo download fails
- Closes #348
Minor Fixes
- Handle Jellyfin libraries with no collection types
- Handle episodes without season or episode numbers in Jellyfin
- Allow transparent background images in all cards that support it
- Handle extra non-Unix trailing spacing in version files
- Fix manual Title Card importing into Emby or Jellyfin with fixer
- Handle errors in interface creation when importing cards with fixer
- Handle empty string
""
database ID's inDatabaseInfoContainer
class - Error if logo file is indicated and does not exist in Tinted Frame title card
- Handle badly types
templates
specification(s) - Catch and reset DB for uncaught
ValueError
fromPersistentDatabase
function calls - Handle more types of malformed image content (specifically
<Code>AccessDenied</Code>
) - Fix local logo finding logic in Poster title card
- Correct traceback printing for missing logos in Tinted Frame card
- Properly assign Series TVRage ID's
- Fix manual importing into - closes #337
v1.14.0
Major Changes
- Create new
TintedFrameTitleCard
card type (#331)- Specified via
card_type
oftinted frame
orblurred border
- Example of this card (and showcase of customization):
- This card supports all font and season customizations, as well as the optional addition of a logo in place of the season/episode text at the top and bottom of the card (see second above image).
- Supports the following extras:
episode_text_color
,separator
,frame_color
,top_element
,bottom_element
, andlogo
- all described here.
- Specified via
- Create new
DividerTitleCard
card type (#326)- This card is similar to the Anime title card (same font), but has a completely different layout
- Specified via
card_type: divider
- Example of this card (and showcase of customization):
- Aside from normal font customizations, the text stroke color can be changed, as well as the position itself (via series extras).
- Supports the following extras:
stroke_color
,title_text_position
, andtext_position
- all described here.
- Allow background images in
LogoTitleCard
(#325)- Background images can be used in place of the solid color
- If using this, I recommend setting the watched/unwatched style to an
art
style so that TCM usesbackdrop.jpg
by default (instead of a per-episode image) - The background image can also separately blurred (instead of the logo) via
blur_only_image
extra - Example YAML and image:
Survivor (2005): card_type: logo watched_style: art unwatched_style: art blur extras: logo: ./source/Survivor (2005)/logo.png blur_only_image: true use_background_image: true
- Allow specification of non-English languages for logos from TMDb (#330)
- A language priority can be set within the TMDb global options - TCM will find the highest priority logo available - for example, to search for logos in order of English, then Spanish, then Japanese:
tmdb: # Other options logo_language_priority: en, es, ja
- A language priority can be set within the TMDb global options - TCM will find the highest priority logo available - for example, to search for logos in order of English, then Spanish, then Japanese:
- Rewrote almost all user-created card types to be much faster - most cards should see between 300-800% creation time decrease
Major Fixes
- Use much stricter series matching on Plex (require database ID or year exact match) (#327)
- We've identified a bug in the Plex search API/code which interprets titles with commas as separate queries, which can result in bad matches
- I've raised the issue with Plex, but a temporary fix has been implemented in TCM to prevent these
Minor Changes
- Rewrote
StarWarsTitleCard
to be ~2x faster, and support additional customization- Generalize episode prefix detection to work with more than Episode, Chapter, and Part
- Change default
episode_text_format
toEPISODE {episode_number_cardinal}
(no functional change) - Allow custom font color, file, size, and interline spacing
- Set series database ID's based on the series episode data source- this should reduce false matches on media servers with a lot of similar-named content.
- Add borderless option to the movie poster maker via
--borderless
(#332) - Update all Pipfile dependencies - will require
pipenv update
- Add
import
as validcard_type
identifier forTextlessTitleCard
- Deleted
CollinHeist/BetterStandardTitleCard
andCollinHeist/StandardAllBoldCard
card types (redundant) - Add support for
omit_gradient
extra inlyonza/WhiteTextBroadcast
title card - Renamed many internal card variables - users who have added custom variable overrides to their series extras or datafiles will need to make the following conversions:
title_color
->font_color
font
->font_file
hide_season
->hide_season_text
source
->source_file
output_file
->card_file
title
->title_text
(oldtitle
datafile entry is accepted)- All font variables are now prefixed with
font_
(kerning
,interline_spacing
,stroke_width
,vertical_shift
)
Minor Fixes
N/A
v1.13.5
Major Changes
- Optionally adjust output title card dimensions (#314)
- Parse via global
card_dimensions
option, for example:options: card_dimensions: 1600x900
- Technically any (positive) dimensions can be provided, but exceedingly small dimensions or those not in the 16:9
aspect ratio are warned - All card types support this except the user-card types
Beedman/GradientLogoTitleCard
andYozora/SlimTitleCard
, which I'll partially rewrite later to implement this
- Parse via global
Major Fixes
- Fix
svg
handling in Docker - Fix episode text not being properly added to
OlivierTitleCard
- Utilize custom global styles for Jellyfin (#321)
- Fix edge case where non-English logos could be grabbed from TMDb if they were the first logo uploaded and higher resolution than all English logos (#322)
Minor Changes
- Lengthen single request timeout to 240 seconds (from 30) while syncing.
- Log commands for failed
svg
topng
logo conversion - Add fixer functionality to remove records from Emby/Jellyfin
- Allow specification of series ID's with fixer when manually importing cards into Emby/Jellyfin
- Created
--id
/--series-id
argument to specify database ID's which can improve (or are required for) series matching - For example, importing to Emby:
--id emby abcdef..
--id imdb tt1234
- Created
- Change default global image source priority to
tmdb, plex, emby, jellyfin
- Rewrite
azuravian/TitleColorMatch
card type to not use intermediate images, instead using a single set of composite commands (makes card creation about 6x faster)
Minor Fixes
- Handle yearless series when syncing from Jellyfin
v1.13.4
Major Changes
- Add support for Jellyfin (#300)
- Implementation is (nearly) identical to Emby given their very similar backend
- Example preferences for Jellyfin:
jellyfin: url: http://192.168.0.1:8096/ api_key: e25b06a1aee34fc0949c35d74f379d03 username: CollinHeist verify_ssl: true watched_style: unique unwatched_style: blur filesize_limit: 4 MB sync: {} # etc.
- Allow Jellyfin to be specified as an episode data and image source
- Reduce Docker image size by ~50% (thanks to @mchangrh for authoring these changes)
- Push Docker images on GHCR in addition to Docker hub (thanks again @mchangrh)
- This is in light of the recent "sun setting" of Docker Free Teams
- Although TCM is unaffected by this (as the builds are through my personal Docker account) diversifying has no downsides
Major Fixes
- Add 15 second timeout limit to all GET requests
Minor Changes
- Use PEP-8 line lengths for docstrings
- Print command history on failed summary creation with mini maker
- Update project license to GNU GPL v3
Minor Fixes
- Handle more instances of poorly formatted YAML exclusion files
- Properly quote paths in stylized summary that would result in failure on some Windows machines