Skip to content

Releases: CollinHeist/TitleCardMaker

v1.16.0

03 Jun 19:36
1d682fd
Compare
Choose a tag to compare

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 option timeout 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, and down triangle shapes to the Shape card
  • Allow specification of an TCM_IM_PATH environment variable to utilize a custom magick.exe executable in all ImageMagick command calls
  • Rename PMM to Kometa
    • Old integrate_with_pmm will still work, but new YAML option is integrate_with_kometa
  • Generalize mask image searching
    • TCM will look for {filename}-mask.*, then mask.* files (supports all file extensions, and series-wide masks)

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, and kanji_stroke_width extras
  • 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
  • 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
  • Overline
    • Change the default line thickness to 9 pixels (from 7)
    • Add the episode_text_font_size extra
  • Roman Numeral
    • Allow transparent .webp images
  • 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

28 Dec 04:52
087ab19
Compare
Choose a tag to compare

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 and text_placement YAML arguments in season poster specifications (old arguments will still work)

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
    • This allows for creation of semi-transparent cutouts, whereas the card previously did not support any transparency (this was due to utilizing IM layered mask composition, which doesn't support alpha channels); for example:
  • 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 is bottom 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

26 Oct 04:10
235edcb
Compare
Choose a tag to compare

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 tag 0x4242) 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 like Pilot - 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:
  • 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 like Season 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
  • 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

18 Sep 04:12
09be5be
Compare
Choose a tag to compare

Major Changes

  • Create Overline card type
    • Specified via card_type: overline
      overline
  • Create Marvel card type styled after RedHeadJedi's MCU poster set
    • Specified via card_type: marvel
      marvel

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:
      preview
    • 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
  • 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

20 Aug 04:06
dff94d8
Compare
Choose a tag to compare

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:
      gif70
    • 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 the card_type
    • Closed #377
  • Add the episode_text_font, episode_text_font_size, episode_text_vertical_shift, and frame_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

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

28 Jul 22:28
42374dc
Compare
Choose a tag to compare

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
  • Use a UMASK of 002 in Docker by default
  • Change the default PUID and PGID to 100 and 99 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 clean pipenv 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:
      white border
    • Has support for the extras episode_text_color, interword_spacing, omit_gradient, separator, and stroke_color.
    • Can be specified with the Card type white border or musikmann

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 of gosu in Docker
  • 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-in exit
  • Correct --delete-blacklist fixer command

v1.14.1

17 Jun 21:04
51e4ef2
Compare
Choose a tag to compare

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 or es-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 either logo or omit - 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 to 4: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 in mini_maker to --season-poster SOURCE DESTINATION, add --season-poster-logo argument
    • Closes #336
  • 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

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 in DatabaseInfoContainer 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 from PersistentDatabase 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

24 Apr 04:56
b7d97fa
Compare
Choose a tag to compare

Major Changes

  • Create new TintedFrameTitleCard card type (#331)
    • Specified via card_type of tinted frame or blurred 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, and logo - all described here.
  • 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, and text_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 uses backdrop.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
  • 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 to EPISODE {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 valid card_type identifier for TextlessTitleCard
  • Deleted CollinHeist/BetterStandardTitleCardand CollinHeist/StandardAllBoldCard card types (redundant)
  • Add support for omit_gradient extra in lyonza/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 (old title 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

10 Apr 17:54
4798a2b
Compare
Choose a tag to compare

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 and Yozora/SlimTitleCard, which I'll partially rewrite later to implement this

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 to png 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
  • 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

18 Mar 21:28
0eff11b
Compare
Choose a tag to compare

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