Skip to content

Releases: CollinHeist/TitleCardMaker

v1.13.3

18 Feb 18:24
6d19bc4
Compare
Choose a tag to compare

Major Changes

  • Optionally filter Sonarr sync by series type - e.g. anime, daily, or standard via series_type sync argument (#305)
  • Significantly improve start-up speed by modifying API calls to Sonarr

Major Fixes

  • Handle Preference files with neither emby or plex sections
  • No longer ignore blacklist threshold for source image selection
  • Much stricter matching of episodes to TMDb movies
    • Some false-positive matches could occur if the episode were unaired and of a relatively "common" title
    • Matches now require TMDb ID match or a perfect title match and the airdates match (±1 day)

Minor Changes

  • Allow for .webp image extensions (#84)
  • Support format strings in index and absolute episode ranges (were only supported in season titles), i.e.:
    episode_ranges:
      s1e1-s1e4: Episode {episode_number}
  • Allow filtering of sync with required tags via (previously Sonarr-exclusive) required_tags argument (#308)
    • This utilizes the Sharing Labels field set within Plex:
      image
    • This utilizes the Tag field within Emby
  • Added --revert-series argment to fixer.py to "remove" a series' title cards from Plex (#303)
    • Specified like fixer.py --revert-series "TV Shows" "Breaking Bad" 2008 - i.e. {library} {show name} {year}
  • Added --media-server argument to fixer.py to select between Emby/Plex media servers for fixer operations

Minor Fixes

N/A

v1.13.2

12 Feb 22:16
ce48f2f
Compare
Choose a tag to compare

Major Changes

  • Add support for Emby media servers (#297)
    • Emby functions almost exactly like Plex, and both can be utilized at once (with some minor changes)
      • If both Plex and Emby are specified, then each library in a series YAML file's libraries section must specify a media_server attribute of either emby or plex so that TCM can determine which server the library applies to
    • Title cards can be automatically uploaded to Emby, and images can be sourced from Emby as well (via image_source_priority)
    • Series YAML files can be synced from Emby (just like Plex)
    • Emby can be used as an episode data source (via episode_data_source)
    • Episode watch statuses can be determined from Emby (applying any watched_style or unwatched_style)
    • Enabled by specifying the emby section within your preferences file, like so:
      emby:
        url: http://192.168.0.1:32400/
        api_key: abcdef123
        username: MyUsername
        verify_ssl: true
        watched_style: unique
        unwatched_style: grayscale
        filesize_limit: 4 MB
        sync: # sync options..
    • The full set of options is detailed here
  • Automatically pass <<clean_title>> variable into all templates
    • This is the path-safe title of the series, for example a <<title>> of 86: Eighty Six has a <<clean_title>> of 86 - Eighty Six (as colons are not permitted characters)
  • Change the default episode text color in TintedGlassTitleCard to SlateGray1
  • Change TMDb blacklist interval to 12 hours, from 24 hours

Major Fixes

  • Better handling of bad tags in Sonarr sync
    • Exclusion or required tags that don't exist on Sonarr are now logged to the user
    • If only a required tag is specified, and that tag doesn't exist in Sonarr, then reject all series instead of rejecting none
  • Handle corrupt TCM databases without random exits
    • Corrupted databases are deleted and remade without requiring user intervention
  • Keep persistent database of series database ID's for better series matching on TMDb/Plex/Emby/Sonarr across runs

Minor Changes

  • Let image_source_priority be overwritten per-series
  • Log all unknown arguments (likely extras) provided to mini_maker.py (should help identify inappropriate argument specification)
  • Report missing Specials content in missing file
  • Match series and episodes using TVRage ID (can be provided by Sonarr and used by TMDb or Emby)
  • Log each time a series YAML file is read (to potentially alleviate confusion when cards are not being applied)
  • When sourcing episode data from TMDb, no longer ignore episodes until 2 hours after they've aired (can be sourced immediately)

Minor Fixes

  • Only look for clean paths in FadeTitleCard, LogoTitlecard, and PosterTitleCard (i.e. remove illegal characters)
  • Only log successful image downloads when downloading images with fixer.py
  • Improve episode matching via database ID's
  • Reject negative TMDb retry counts - not really a "fix", these were being treated as 0

v1.13.1

27 Jan 16:35
f10fee2
Compare
Choose a tag to compare

Major Changes

  • Create new TintedGlassTitleCard inspired by Reddit user /u/RaceDebriefF1's title cards for Lucky! (2022) (#298)
    • Example of this card:
    • Episode text color and position can be modified via series extra episode_text_color and episode_text_position - Position can be left, center (default), or right and will align the episode text "field" with that side of the title text field. Examples of left and right are below (center shown above).
    • Bounds of the title text tinted box can be adjusted via series extra box_adjustments which is the same formatting as LandscapeTitleCard - e.g. {top} {right} {bottom} {left} pixel adjustments
    • This card can be used via card_type of tinted glass and sherlock (per RaceDebriefF1's request)
  • Create FadeTitleCard inspired by Yozora's initial concept - this card is intended to be used for 4x3 aspect-ratio source images
    • Example of this card compared to the cropping on the top and bottom of the image that's evident in other card types:
    • Optional logo file can be added via series extras logo (same logic as LogoTitleCard)
    • Separator character can be modified via separator extra; episode text color via episode_text_color extra
    • This card can be used via card_type of fade or 4x3

Major Fixes

  • Correctly log failures to update cards when using Tautulli integration
  • Improve logging
  • Respect log level when color logging is disabled (was always DEBUG)
  • Handle exceptions during CardType object init - particularly those raised by manual (invalid) override data entry within a datafile
    • Uncaught exceptions raised during BaseCardType __init__() or create() are caught and a traceback is logged at
      debug level
  • Handle non-integer season/episode/absolute numbers in datafiles without exiting

Minor Changes

  • Pass series_name and series_year data into episode text format strings
    • For example, specifying episode_text_format: "{series_name} - S{season_number:02}E{episode_number:02}" will produce episode text like Breaking Bad - S01E01 for cards that support it
  • Improve logging
    • Change timed rotating log file handler to 8x 6-hr log files to 7x 24-hr log files that rollover at midnight
    • Change log file format to mm-dd-yy from yy-mm-dd
    • Add custom exception handler for log.exception that prints formatted traceback at debug level alongside message at error
    • Log exception raised by YAML type conversion(s)

Minor Fixes

  • Pass explicit name YAML specification into template variable (was just using implicit name)

v1.13.0

15 Jan 22:37
90c09be
Compare
Choose a tag to compare

Major Changes

  • Permit custom stroke colors via stroke_color series extra in StandardTitleCard, AnimeTitleCard, LogoTitleCard, and OlivierTitleCard - for example:
    Pokemon card example
  • Provide episode airdate as built-in episode data (can be used within a season title or episode text format, or by custom card type creators) (#293)
    • Data is provided under the key airdate and supports any datetime formatting (detailed here), for example:
      Jeopardy! (1984):
        episode_text_format: "{airdate:%B %d %Y}"
    • Will produce title cards with episode text reading "September 08 2013" (for example)
  • Update all Python dependencies to their latest version(s)
  • Modify title text to remove custom season title prefix text
    • For example, S04 of Gotham is titled A Dark Knight, yet all of the episodes in S04 are prefixed A Dark Knight: ... - TCM will now remove A Dark Knight: from the title if the matching season title is provided
  • Create CutoutTitleCard based on /u/phendrena's Willow title cards
    • Example of this card:
      CutoutTitleCard
    • Add under card_type identifiers of cutout and phendrena
    • Adjust overlay color via overlay_color and blur edges of cutout text via blur_edges via series extra
  • Match episodes as TMDb movies based on title match alone (used to require IMDb ID)
    • This should allow TCM to find source images for movies much more acurrately

Major Fixes

  • Don't error on previously loaded remote assets (hotfix in v1.12.2)
  • Correctly download series backdrop for art style (was downloading episode backdrop)
  • Correctly download non-English series backdrops (bug, fixed in tmdbapis v1.1.0) (#295)
  • Actually use stroke_width in AnimeTitleCard (was being ignored)

Minor Changes

  • Provide cardinal/ordinal options for multi-episode cards
    • For example, if a multi-part episode is specified with an episode text format like Episode {episode_number_cardinal} then the modified episode text will look like Episodes One-Two (would error)
    • This also works for translations
  • Omit black stroke behind title text in StandardTitleCard and AnimeTitleCard if stroke width is specified as 0%
  • Don't wait 2 hours after episode airs to grab episode data from Sonarr (no longer necessary with title matching)
  • Parse omit_gradient extra in AnimeTitleCard, and LogoTitleCard
  • Slightly increase font and stroke size by ~13% in OlivierTitleCard to increase legibility
  • Warn if imagemagick preferences are provided on Docker
  • Warn if relative series YAML paths are provided on Docker
  • Change FrameTitleCard max line count to 31 characters (from 32)
  • Log series backdrop downloading from TMDb
  • Log names of defined templates/fonts/libraries if an undefined one is specified in series YAML
  • Priority split title text around the | character
  • Modify title text using roman numerals as episode text (e.g. Part II: The Curse will be properly matched if episode_text_format: Part {episode_number})

Minor Fixes

  • Handle Sonarr episode data with unpopulated TVDb episode ID's (#294)
    • If a series has episodes with TVDb ID's of 0 then those episode's TVDb ID's will be erased and then logged so the user can refresh and fix the problem
  • Pass --omit-gradient mini maker argument to title card creation
  • Better handling and logging of Plex API DB timeouts
  • Escape % characters in ImageMagick commands (could cause error in unquoted commands)
  • Skip non-English logos from TMDb

v1.12.2

28 Dec 17:10
Compare
Choose a tag to compare

Major Changes

N/A

Major Fixes

  • Fix for the preferences file not being initialized properly for Docker users
  • Fix for loading RemoteFile objects for remote card types failing if they've already been loaded during runtime

Minor Changes

N/A

Minor Fixes

N/A

v1.12.1

22 Dec 17:06
f40b4c1
Compare
Choose a tag to compare

Major Changes

  • Allow for a card directory override in all sync specification(s) via card_directory- this will change any library paths and media directories to be rooted in the given directory (instead of the synced library folder) - for example: (#278)
    plex:
      # options
      sync:
      - file: ./plex_sync.yml
        card_directory: ./cards/
  • Optionally translate the cardinal/ordinal season/episode text in season title or episode_text_format specification (#289)
    • These translations apply for season, episode, and absolute numbers and their cardinal/ordinal versions
    • Currently there are 39 recognized languages/regions (full list is here and will be on Wiki)
      • Not all languages support cardinal and ordinal translation
    • Any number of languages can be specified under the global language_codes setting in options - for example:
      options:
        # other options
        language_codes:
        - es
        - fr
    • The above will permit French and Spanish translations of season/episode text in any series. Meaning:
         series:
           Mr. Robot (2015):
             episode_text_format: "El {episode_number_ordinal_es} Episodio"
             seasons:
               1: "Saison {season_number_cardinal_fr}"
         ```
    • Will produce episode and season text like El primero Episodio, and Saison deuxième respectively

Major Fixes

  • Improve all edge-case path handling
    • Cases such as writing cards to an SMB-mounted drive should be handled
    • Specifying illegal file/folder names (e.g. C:\Documents:) will not cause erroneous errors
  • Require remote card types to successfully load all remote assets before making cards (would silently error)

Minor Changes

  • Match episodes that are categorized as movies on TMDb (#288)
  • Detect generic episode text format strings for RomanNumeralTitleCard as {episode_number} or {abs_number}
  • Always use the default font for index text in FrameTitleCard (was using any custom font)
  • Log success/failure of title card creation with mini_maker.py
  • Delete any existing file during card creation with mini_maker.py
  • Don't log any title mismatches if a series' refresh_titles setting is disabled
  • Don't convert profile attributes for any manually named archives

Minor Fixes

  • Handle OS-invalid font filenames in season_poster font file specification
  • Accept non-hexadecimal colors in season_poster font color specification
  • Reject "blank" title cards pulled from episodes within Plex that have no thumbnails

v1.12.0

26 Nov 07:19
9532bad
Compare
Choose a tag to compare

Major Changes

  • Create new FrameTitleCard (#282)
    • Add under card_type identifier frame and photo
    • Placement of the season and episode text can be adjusted via series extras episode_text_position of left, surround, or right - examples of each are below:
  • Permit formatting in season title specification - for example:
    Breaking Bad (2008):
      seasons:
        1: "Season {season_number}"
        2: "Season {season_number}"
  • Add options for ordinal and cardinal (spelled numbers) versions of season and episode numbers in season titles and episode text (#283)
    • For example:
      Breaking Bad (2008):
        episode_text_format: "Episode {episode_number_ordinal}"
        seasons:
          1: "{season_number_cardinal} Season"
          2: "{season_number_cardinal} Season"
          # etc.
    • Will produce episode text like Episode One, Episode Two, etc.; and season titles like First Season, Second Season
  • Allow for multiple connections to Sonarr by specifying servers as a list in the preferences file - for example: (#280)
    sonarr:
    - url: http://192.168.0.1:8989
      api_key: abcdef
      # Anything else
    - url: http://192.168.0.1:8990
      api_key: fedcba
      # Anything else
    • If a single series is on a server, TCM will search all servers until the show is found - this can be overwritten/skipped by specifying sonarr_server_id
  • Optionally add season text at random (deterministic) locations around the roman numerals in RomanNumeralTitleCard (#285)
    • The placement algorithm will detect overlapping titles and season text and re-place until no overlap is detected

Major Fixes

N/A

Minor Changes

  • Match episode text prefix text in title modification if format is {number}. - e.g. Chapter 10. The End
  • Modify series extras in archive sub-variations (#281)
    • For example, if some custom episode_text_color is specified in the OlivierTitleCard, then a Generic Font version will reset this color to the generic one
  • Parse delete_missing font replacements option to enable/disable automatically delete characters missing from a font (#284)
    font:
      file: ./fonts/custom_font.ttf
      replacements:
        delete_missing: true # Defaults to true
  • Parse sync exclusions without case sensitivity - e.g. breaking bad (2008) will also exclude Breaking Bad (2008) (#286)
  • Parse font vertical_shift in LandscapeTitleCard - this will now shift the entire title and bounding box (was previously ignored)
  • Add polymath card_type identifier for StandardTitleCard

Minor Fixes

  • Reset colorspace after grayscale modifier application for colored text
  • Upsert into TMDb database instead of insert
  • Handle local .py files in fixer.py --card-type
  • Don't create poster title card if source image does not exist
  • Correctly identify custom font in RomanNumeralTitleCard
  • Shift roman numerals up by 30px - for some reason roman numerals aren't centered (despite being centered in ImageMagick..)
  • Handle episode numbers above 3999 in RomanNumeralTitleCard (these cannot be represented in roman numerals, so are logged and capped at 3999)

v1.11.3

31 Oct 19:10
bd156df
Compare
Choose a tag to compare

Major Changes

  • Allow for custom source file specifications via seasons or episode_ranges attributes to take format strings
    • Can use {season_number}, {episode_number}, or {abs_number} keys - for example:
    episode_ranges:
      s1e1-s1e25:
        source: s1e{episode_number}-custom.jpg
    • Will utilize s1e1-custom.jpg, s1e2-custom.jpg, etc., source files
  • Overhaul styles (both unwatched_style and watched_style) to be much more versatile
    • Allow blur, art, and grayscale style modifiers to combine with other styles
    • All allowed styles are art, art blur, art blur grayscale, art grayscale, blur, blur grayscale, blur unique, blur grayscale unique, grayscale, grayscale unique, and unique (and any re-ordering of these)
  • Allow for default values in templates via defaults - for example:
    templates:
      gundam:
        card_type: gundam
        extras:
          logo: ./source/<<alt_title>> (<<year>>)/logo.png
        defaults:
          alt_title: <<title>>
    • This would would allow alt_title to be manually overwritten, but if not provided it will default to the series title
  • Don't compare show records between versions of TitleCardMaker
    • If the version of TCM that your record database was created with does not match the version of TCM you are currently running, then the record database is deleted to be remade
    • This prevents TCM from falsely remaking a lot of cards if a version change results in a non-YAML change

Major Fixes

  • Automatically forget records before attempting to import cards with fixer.py (#274)

Minor Changes

  • Add new grayscale style option (#276)
    • Add --grayscale argument to mini_maker.py
  • Optionally darken LandscapeTitleCard via darken extra
    • Defaults to false (disabled), but can be specified as all to darken the entire image, or box to darken only the bounding box
  • Parse box_adjustments extra in LandscapeTitleCard to adjust the x/y coordinates of the bounding box, for example:
    Mr. Robot (2015):
      card_type: landscape
      extras:
        add_bounding_box: true
        box_adjustments: -10 20 -15 40  # top, right, bottom, left bounds
  • Optionally add logos to movie posters (#271)
    • Create --movie-logo argument which takes a path to a logo file
  • Auto-assign the template name under <<template_name>> instead of <<name>> to prevent confusion with the series name which is <<title>>
  • Make OlivierTitleCard about 40% faster by not writing intermediate images
  • Make LogoTitleCard about 5x faster by adding text as composite layers, not standalone images
  • Create explicit archive_variations even if series archiving is disabled
  • Reformat all progress bars

Minor Fixes

  • Handle (invalid) non-string episode range keys/labels in episode_ranges
  • Disable caching in Tautulli web interface
  • Correctly filter episodes without cards in summary creation if specials are ignored in summary creation
  • Correct preference file inititialization for docker users using the fixer/mini maker
  • Handle explicit kanji_vertical_shift with mini_maker.py
  • Set explicit sRGB colorspace in style/resize to handle black and white source images

v1.11.2

09 Oct 23:43
865aad1
Compare
Choose a tag to compare

Major Changes

  • Ignore temporary (TBA / Episode {x}) titles when sourcing episode data from Plex
  • Remake cards when a new title is detected (by default) (#272)
    • Manual titles (specified in the datafile) can be utilized if refresh_titles: false is added to a series (which disables title matching)
  • Allow for >1 character replacements in custom fonts
  • Add functionality to "correct" images with non-16:9 aspect ratios to mini_maker.py (#206)
    • Add --ratio/--aspect-ratio, --ratio-batch/--aspect-ratio-batch, and --ratio-style/--aspect-ratio-style arguments
    • Implement two "styles" of ratio correction - copy and stretch, for example:

Major Fixes

  • Fix handling relative paths on Windows
  • Faster Tautulli quick-updating
  • Handle bounding box color with spaces in LandscapeTitleCard
  • Properly identify and apply templates with keys in sub-lists (keys were being ignored) - for example:
    test:
      card_type: landscape
      archive_variations:
      - archive_name: <<arch_name>>
        card_type: standard
  • Correct source image resizing in PosterTitleCard

Minor Changes

  • Don't integrate with Tautulli during --sync run mode
  • Create movie posters with index using --movie-index/--movie-number arguments - for example (#270):
  • Add description of mini_maker.py features to main README
  • Add -tl for shorthand of --tautulli-list and -tf for shorthand of --tautulli-frequency

Minor Fixes

  • Immediately check Plex for images if TMDb is disabled for a series and image source priorty of TMDb is higher than Plex
  • Don't replace colons in paths on Windows systems
  • Minor multiline-spacing and kerning adjustments on movie posters (better match for musikmann's typical style)
  • Allow for movie posters with no titles
  • Fix manual source image downloading with fixer.py
  • Correctly specify wildcard profile in base image resizing

v1.11.1

27 Sep 03:53
9a2c87d
Compare
Choose a tag to compare

Major Changes

  • Make sync sync mode actually useful (#262)
    • Replace sync sync mode with match (so the naming is more clear)
    • No longer overwrites all change to the file, actually keeps edits/some comments
    • Differs from append mode by allowing for entries to be removed from the file if not in the sync
  • Optimize StandardTitleCard and AnimeTitleCard to be ~5x faster
  • Modify episode_ranges to take non-absolute indices, like so (#264):
    episode_ranges:
      s1e1-s1e4: # title or sources
      s1e5-s1e10: # title or sources
      # ...
  • Add optional add_bounding_box extra to LandscapeTitleCard to add a text-colored bounding box around title text (#265)
  • Add ability to create movie posters with a top-line subtitle - for example (comparison with/without) (#266):
    • Specified via --movie-top-subtitle argument for mini_maker.py
  • Add ability to set up Tautulli integration automatically (#268)
    • Options are specified in new global preferences - for example:
      tautulli:
        url: # ...
        api_key: # ...
        update_script: /config/update_card.sh
        verify_ssl: true
        username: CollinHeist
        agent_name: Update TitleCardMaker
        script_timeout: 30

Major Fixes

  • Windows paths in sync volumes specification are now handled with their fully-resolved POSIX equivalent path
  • Handle libraries with multiple asset directories in plex sync
  • Maintain custom/manually specified sources in derived archive variations
  • Allow season hiding and custom source specification via episode_ranges
  • Fix manual show summary creation to work with new StylizedShowSummary style

Minor Changes

  • Assume episodes not present in Plex are unwatched (was watched) so that if an unwatched_style is indicated, the cards are made correctly upon first import
  • Add optional omit_gradient extra to StandardTitleCard to optionally not apply the gradient to the card
  • Optionally omit specials from summary creation by parsing ignore_specials option under archive summary global option
  • Add optional extra kanji_vertical_shift to AnimeTitleCard to offset kanji separately from title text
  • Added 10% margin on unrecognized episode text formats in OlivierTitleCard
  • Log runtime arguments with main.py is run
  • Optionally only filter downloaded series in sonarr sync via downloaded_only option (#267)
  • Allow for completely transparent title cards in all card types (if a completely transparent source image is provided)
  • Change Tautulli integration to handle entire series or seasons (not just episodes) to remake card - mostly relevant for newly added series/seasons

Minor Fixes

  • Actually skip invalid archive variations
  • No longer reset custom episode text formats in seasonless archive variations
  • Handle more bad ImageMagick installations during setup
  • Handle bad characters in manual media_directory specifications
  • Apply font vertical_shift to title text in AnimeTitleCard (was just applying to kanji)
  • Handle series without files in plex sync
  • Handle episodes without season or episode numbers in plex sync
  • Fix fixer.py TMDb blacklist arguments to work with variable database directories