You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Standardize collection-level Radarr and Sonarr definition setting names: radarr_root_folder_path, radarr_minimum_availability, radarr_quality_profile, radarr_tags, sonarr_root_folder_path, sonarr_quality_profile, sonarr_language_profile, sonarr_series_type, sonarr_season_folder, and sonarr_tags are now the preferred keys; the previous names remain supported as aliases.
Upgrade SIMKL authentication to AUTH V2 with access-token validation, refresh-on-failure, and an optional force_refresh setting.
Default settings.threading.workers to 4 (was effectively single-threaded) and settings.threading.prefetch_collection_children to true, deferring a collection's sync_collection "what to remove" lookup and PMS's comma-separated /library/metadata/{ids} batch-read to the shared thread pool instead of blocking the main collection loop; the cache is now RLock-guarded (_LockedConnection) so concurrent worker threads can share one SQLite connection safely.
Consolidate end-of-run log-summary routing and repeated high-volume item warnings, including metadata entries skipped because their titles were not found.
Added
Add a settings.threading config block (workers, tmdb_pages, parallel_sources, prefetch_collection_children) backed by a shared ThreadPoolExecutor, used to defer non-Plex gather_ids work and Plex item-reload batching off the main collection loop.
Add a --delete-collections-labels CLI flag (no short form - would collide with -d/--divider) that deletes all collections, same as -dc, and for any deleted collection whose title matches an existing Plex label of the same name (the Smart Label default), batch-removes that one label from just the items that have it - instead of -dl's full library-wide, one-item-at-a-time label wipe.
Add WeTrakr as a tracker connector (wetrakr config block, OAuth2 device-flow authorization via the Kometa Utilities website) with wetrakr_list, wetrakr_list_details, wetrakr_user_lists, wetrakr_tracking, wetrakr_favorites, and wetrakr_ratings builders, plus sync_to_wetrakr_list/sync_missing_to_wetrakr_list to sync a collection back to a WeTrakr list and wetrakr_user as a mass rating source; a list's description used as a collection summary (wetrakr_description, wetrakr_list/wetrakr_list_details) now carries a credit line linking back to WeTrakr, per their attribution terms. wetrakr_user_lists also accepts a bare username or profile URL now, resolved to a numeric user id via WeTrakr's search API.
Fixed
Avoid unnecessary Plex account and user lookups for owner-only playlists when user syncing and exclusions are disabled; playlist reporting still requires plex.tv access. #3687
Log the Apprise delivery-failure warning again with Apprise 2, whose notify() returns an AppriseResult object instead of False, so failed and partially failed notifications were silently ignored.
Accept YAML lists for schedules and scheduled visibility attributes across the config, collection, overlay, and playlist schemas, matching documented runtime OR semantics.
Accept scalar values for the legacy mass_content_rating_update and mass_original_title_update operations in the config schema, matching runtime normalization and the other legacy mass metadata operations.
Evaluate non_existing schedules against collection or playlist existence, preserving OR behavior in schedule lists while allowing all[...] to require absence alongside other conditions. #3675
Allow floppy_list and floppy_list_details builders in episode-level collections, including exact episodes from public Floppy RSS feeds.
Group STARZ, Starz Encore, and STARZ Encore network values into the canonical Starz Network Default collection.
Honor per-collection limit_<<key>> template variables across Defaults files, including Letterboxd charts, Based On collections, and Streaming collections.
Fix the resolution Defaults overlay file applying the -Dovetail variant to every DV HDR10+ item at 4K and 1080P, even without an edition, by matching the Dovetail weights to their plain counterparts. #3654
Normalize Letterboxd ratings returned by MDBList batch lookups to their native 0–5 scale, preventing doubled ratings in overlays and metadata updates. #3533
Keep localized collections from scheduled-out collection files classified as configured during delete_collections operations.
Address the Docker image's managed virtual-environment interpreter directly at startup instead of depending on PATH-based interpreter selection. #3656
Replace a bare truthy check on a collection builder's Plex object with an explicit is not None check, avoiding a silent full Plex items() fetch through Collection/Playlist.__len__ on any falsy-looking-but-real collection.
Guard against NonechildCount on blank/separator collections when computing the collection's starting item count.
Only fetch a parent item's titleSort when building a display title if sorted output was actually requested, instead of unconditionally.
Report Jikan/MyAnimeList search and lookup errors (including Jikan returning an error body for an unreachable MyAnimeList backend) as service errors with recovery guidance instead of a traceback, and fix an mal_search error that misidentified itself as an AniList error.
Read FlickList ratings once per run instead of once per library item, so mass_user_rating_update: flicklist_user and flicklist_ratings no longer exhaust FlickList's 1,000 requests/hour limit on larger libraries.
Validate that OMDb, IMDb service, and MDBList rating/search responses are the expected object shape before indexing into them, reporting a clean error instead of an unhandled traceback when one of those APIs answers with an unexpected body (e.g. an error payload shaped as a list); remove dead rating/image lookup code left over from the Trakt removal that referenced the no-longer-existing config.Trakt.
Stop the retired-Trakt config cleanup from discarding unrelated attributes that merely mention "trakt" in a string value (e.g. an mdblist_list URL whose slug references Trakt-sourced data, or summary prose) or an entire collection whose name contains "trakt", by matching only the actual Trakt builder/attribute key names instead of a substring check against every key and string value.
Report a mass_*_rating_update/mass_*_episode_rating_update value of the retired trakt, trakt_user, or mdb_trakt options with the Trakt-removal message instead of a confusing "must be a number between 0 and 10" error from the generic numeric-rating parser.
Stop a smart_label collection whose label isn't currently applied to any items in Plex from overwriting the existing collection's smart filter: the unresolved label filter URL is None, and update_smart_collection() translated that into the bogus .../allNone URI, logging Metadata: Smart Collection updated to None and wiping the collection's real filter. An unresolved filter URL is now skipped, leaving the collection intact so the existing Label: ... was not added to any items in the Library error can report the problem.