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
plexoptiontimeoutto 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 triangleshapes to the Shape card - Allow specification of an
TCM_IM_PATHenvironment variable to utilize a custommagick.exeexecutable in all ImageMagick command calls - Rename PMM to Kometa
- Old
integrate_with_pmmwill 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: falsefor 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
ImageMagickInterfacefunction to round an image's corners - Move text dimension analysis function to the base
ImageMagickInterfaceclass
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_colorextra - Add the
kanji_color,kanji_font_size,kanji_stroke_color, andkanji_stroke_widthextras
- 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_widthextra
- 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_gradientextra
- Add the
- Overline
- Change the default line thickness to 9 pixels (from 7)
- Add the
episode_text_font_sizeextra
- Roman Numeral
- Allow transparent
.webpimages
- 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_shiftextra - 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_adjustmentextra - Add the
rounding_radiusextra
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-placementmini maker argument - Add
--logo-placementand--text-placementmini maker arguments - Parse
logo_placementandtext_placementYAML 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_gravityextra to Divider card type - Add
border_colorextra to White Border card type - Add
overlay_transparencyextra 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_shiftextra to Tinted Frame card - Adjust interline spacing for title text if
line_positionisbottomin the Overline card - Add
episode_text_font_sizeextra to Standard and White Border cards - Add
shadow_colorextra 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
pyyamlpackage 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_colorin 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: calligraphyidentifier)

- Change default Docker ImageMagick policy to allow up to 12 threads
- Write EXIF data (
titlecardat 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
:latesttag (in addition to:masterand:develop - Allow arbitrary formatting of the title text via the
title_text_formatextra 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
--logomini maker argument to specify a Logo path for card creation - Add
--movie-drop-shadowmini 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
_titleas the variable postfix
- For example,
- Add
episode_text_font_sizeextra 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.pngin 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_shiftin Olivier card to manually shift just the episode text - Add support for
glass_colorextra in the Tinted Glass card - Add
/configvolume 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_nameas 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 bookas 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_widthextras to the Tinted Frame card - Permit custom Font files in the Roman Numeral card
- Add support for
interword_spacingto all cards- Specified via
fontattribute, like so:font: interword_spacing: 10 # Any number here
- Remove
interword_spacingextra from Olivier and Frame cards
- Specified via
Major Fixes
- Correct
has_seriesevaluation 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_colorextra to Landscape card to specify a box color separately from the text color - Add
blur_profileextra 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_colorextra 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_onlysonarroption - This is different than the
syncoption (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
UMASKof002in Docker by default - Change the default
PUIDandPGIDto100and99in Docker - Use Python 3.11 instead of Python 3.9 in Docker
- Use much faster external
imagesizepackage instead of ImageMagick commands - will require cleanpipenv install - Create new
WhiteBordertitle 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 borderormusikmann
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_colorextra in the Standard and Star Wars title cards - Allow custom Fonts in Poster title card
- Log when Tautulli update file does not exist
-
- Use
runuserinstead ofgosuin Docker
- Use
- Parse Font
vertical_shiftin Divider title card - Parse Font
interword_spacingextra in Frame and Olivier title card - Keep logs for up to 14 days
- Parse
hide_episode_textextra in Standard card - Use maxsplit=1 where applicable to improve performance
- Use
withstatement with subprocess opening statements - Reduce maximum attempts for season text placement in Roman Numeral card to 5 from 10
- Remove
--add-translationfixer 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->.pngconversion failure - Use
sys.exitinstead of built-inexit - Correct
--delete-blacklistfixer 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-MXores-ESfor 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_elementextra - can be eitherlogooromit- to add enlarged logo to the middle of the card, e.g.:

- Add
logo_sizeextra to allow shrinking or enlarging the logo size by a scalar, for example:logo_size: 1.5to scale to 150% - Add
blur_edgesextra 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
Managerlevel) 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_colorextra - Allow custom season text color in Roman Numeral title card via
season_text_colorextra - Use
4:4:4sampling factor in all card operations (can default to4:2:0which has some JPEG compression artifacts) - Log everything (just logged messages were being ignored)
- Allow logos to be omitted from Season Posters
- Parse
omit_logoYAML option in season poster config - Modify
--season-posterargument inmini_makerto--season-poster SOURCE DESTINATION, add--season-poster-logoargument - Closes #336
- Parse
- Add
hide_episode_textto Fade title card - Allow logo file format strings in Tinted Frame title card
- Print Traceback for
RemoteFiledownload 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 inDatabaseInfoContainerclass - Error if logo file is indicated and does not exist in Tinted Frame title card
- Handle badly types
templatesspecification(s) - Catch and reset DB for uncaught
ValueErrorfromPersistentDatabasefunction 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
TintedFrameTitleCardcard type (#331)- Specified via
card_typeoftinted frameorblurred 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
DividerTitleCardcard 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
artstyle so that TCM usesbackdrop.jpgby default (instead of a per-episode image) - The background image can also separately blurred (instead of the logo) via
blur_only_imageextra - 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
StarWarsTitleCardto be ~2x faster, and support additional customization- Generalize episode prefix detection to work with more than Episode, Chapter, and Part
- Change default
episode_text_formattoEPISODE {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
importas validcard_typeidentifier forTextlessTitleCard - Deleted
CollinHeist/BetterStandardTitleCardandCollinHeist/StandardAllBoldCardcard types (redundant) - Add support for
omit_gradientextra inlyonza/WhiteTextBroadcasttitle 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_colorfont->font_filehide_season->hide_season_textsource->source_fileoutput_file->card_filetitle->title_text(oldtitledatafile 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_dimensionsoption, 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/GradientLogoTitleCardandYozora/SlimTitleCard, which I'll partially rewrite later to implement this
- Parse via global
Major Fixes
- Fix
svghandling 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
svgtopnglogo 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-idargument 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/TitleColorMatchcard 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







