Releases: CollinHeist/TitleCardMaker
Releases · CollinHeist/TitleCardMaker
v1.13.3
Major Changes
- Optionally filter Sonarr sync by series type - e.g.
anime
,daily
, orstandard
viaseries_type
sync argument (#305) - Significantly improve start-up speed by modifying API calls to Sonarr
Major Fixes
- Handle Preference files with neither
emby
orplex
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) - Added
--revert-series
argment tofixer.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}
- Specified like
- Added
--media-server
argument tofixer.py
to select between Emby/Plex media servers for fixer operations
Minor Fixes
N/A
v1.13.2
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 amedia_server
attribute of eitheremby
orplex
so that TCM can determine which server the library applies to
- If both Plex and Emby are specified, then each library in a series YAML file's
- 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
orunwatched_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
- Emby functions almost exactly like Plex, and both can be utilized at once (with some minor changes)
- Automatically pass
<<clean_title>>
variable into all templates- This is the path-safe title of the series, for example a
<<title>>
of86: Eighty Six
has a<<clean_title>>
of86 - Eighty Six
(as colons are not permitted characters)
- This is the path-safe title of the series, for example a
- Change the default episode text color in
TintedGlassTitleCard
toSlateGray1
- 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 tomini_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
, andPosterTitleCard
(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
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
andepisode_text_position
- Position can beleft
,center
(default), orright
and will align the episode text "field" with that side of the title text field. Examples ofleft
andright
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 asLandscapeTitleCard
- e.g.{top} {right} {bottom} {left}
pixel adjustments - This card can be used via
card_type
oftinted glass
andsherlock
(per RaceDebriefF1's request)
- Example of this card:
- 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 asLogoTitleCard
) - Separator character can be modified via
separator
extra; episode text color viaepisode_text_color
extra - This card can be used via
card_type
offade
or4x3
- Example of this card compared to the cropping on the top and bottom of the image that's evident in other card types:
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__()
orcreate()
are caught and a traceback is logged at
debug level
- Uncaught exceptions raised during
- Handle non-integer season/episode/absolute numbers in datafiles without exiting
Minor Changes
- Pass
series_name
andseries_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 likeBreaking Bad - S01E01
for cards that support it
- For example, specifying
- 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
fromyy-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
Major Changes
- Permit custom stroke colors via
stroke_color
seriesextra
inStandardTitleCard
,AnimeTitleCard
,LogoTitleCard
, andOlivierTitleCard
- for 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)
- Data is provided under the key
- 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 prefixedA Dark Knight: ...
- TCM will now removeA Dark Knight:
from the title if the matching season title is provided
- For example, S04 of Gotham is titled
- Create
CutoutTitleCard
based on /u/phendrena's Willow title cards - 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
inAnimeTitleCard
(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 likeEpisodes One-Two
(would error) - This also works for translations
- For example, if a multi-part episode is specified with an episode text format like
- Omit black stroke behind title text in
StandardTitleCard
andAnimeTitleCard
if stroke width is specified as0%
- Don't wait 2 hours after episode airs to grab episode data from Sonarr (no longer necessary with title matching)
- Parse
omit_gradient
extra inAnimeTitleCard
, andLogoTitleCard
- 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
FrameTitleCar
d 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 ifepisode_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
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
Major Changes
- Allow for a card directory override in all
sync
specification(s) viacard_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 inoptions
- 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
, andSaison 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
Major Changes
- Create new
FrameTitleCard
(#282) - 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 likeFirst Season
,Second Season
- For example:
- 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
- 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
- Optionally add season text at random (deterministic) locations around the roman numerals in
RomanNumeralTitleCard
(#285)
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 theOlivierTitleCard
, then a Generic Font version will reset this color to the generic one
- For example, if some custom
- 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 excludeBreaking Bad (2008)
(#286) - Parse font
vertical_shift
inLandscapeTitleCard
- this will now shift the entire title and bounding box (was previously ignored) - Add
polymath
card_type
identifier forStandardTitleCard
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
Major Changes
- Allow for custom source file specifications via
seasons
orepisode_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
- Can use
- Overhaul styles (both
unwatched_style
andwatched_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
, andunique
(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
- This would would allow
- 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 tomini_maker.py
- Add
- Optionally darken
LandscapeTitleCard
viadarken
extra- Defaults to false (disabled), but can be specified as
all
to darken the entire image, orbox
to darken only the bounding box
- Defaults to false (disabled), but can be specified as
- Parse
box_adjustments
extra inLandscapeTitleCard
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
- Create
- 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
withmini_maker.py
- Set explicit sRGB colorspace in style/resize to handle black and white source images
v1.11.2
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)
- Manual titles (specified in the datafile) can be utilized if
- Allow for >1 character replacements in custom fonts
- Add functionality to "correct" images with non-16:9 aspect ratios to
mini_maker.py
(#206)
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
Major Changes
- Make
sync
sync mode actually useful (#262)- Replace
sync
sync mode withmatch
(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
- Replace
- Optimize
StandardTitleCard
andAnimeTitleCard
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 toLandscapeTitleCard
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 formini_maker.py
- Specified via
- 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
- Options are specified in new global preferences - for example:
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 toStandardTitleCard
to optionally not apply the gradient to the card - Optionally omit specials from summary creation by parsing
ignore_specials
option underarchive
summary
global option - Add optional extra
kanji_vertical_shift
toAnimeTitleCard
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 inAnimeTitleCard
(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