github Kometa-Team/Kometa v2.5.2

3 hours ago

Changed

  • 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 None childCount 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.

Don't miss a new Kometa release

NewReleases is sending notifications on new releases.