Skip to content

v2.4.6

Latest

Choose a tag to compare

@meisnate12 meisnate12 released this 30 Jul 23:44

Added

  • Add folder_location and folder_location.not Plex search attributes for movie, show, and track-level music smart collections and Plex searches, using the root folders configured on the Plex library.
  • Add --timings/--timing (KOMETA_TIMINGS/KOMETA_TIMING) runtime support for diagnosing slow runs. When enabled, network calls, cache lookups, and major per-collection/per-library phases are timed; a summary prints to the log at the end of the run and a full per-source/per-library breakdown is exported as JSON/CSV to the logs directory. Disabled by default, with negligible overhead when off. Also adds an optional KOMETA_PROFILE=pyinstrument environment variable for deeper single-run profiling, writing an HTML report to the logs directory.
  • Add TVDB ID support to YamTrack builder, enabling import of TVDB show IDs from YamTrack lists and tracked pages alongside existing TMDb support.

Fixed

  • Send IMDb's web client identifier with GraphQL requests so imdb_search and IMDb-backed defaults are not rejected with HTTP 403; report HTTP and non-JSON GraphQL responses as contextual IMDb errors instead of uncaught JSON decoding tracebacks. #3444
  • Report IMDb chart GraphQL and HTML fallback failures as contextual IMDb errors instead of raising IndexError when the fallback page does not contain __NEXT_DATA__ chart data. #3446
  • Batch collection and playlist item_label, item_label.remove, item_label.sync, and non_item_remove_label updates through Plex multi-edit requests, grouped by library and media type and split by plex_bulk_edit_batch_size, instead of sending one label request per item.
  • Fail Letterboxd collection validation when a configured list or watchlist cannot be loaded, preventing sync mode from emptying an existing collection after a blocked or unavailable source request.
  • Treat TMDb connection failures, timeouts, HTTP 408/429/5xx, and backend-unavailable responses as transient service failures: retry discovery, pagination, item requests, and lazy object hydration consistently; emit concise retry warnings instead of tracebacks; and surface exhausted retries as a service-unavailable error.
  • Add the affected URL and HTTP status to exhausted empty TVDb response warnings; limit empty documents to three attempts with short exponential delays while retaining six attempts and the existing delay for other transient failures; and open a run-scoped circuit after two distinct URLs exhaust retries so a systemic TVDb outage does not generate thousands of requests and hours of retry delays.
  • Stop ntfy from sending an access-test notification whenever Kometa initializes the ntfy client.
  • Restore per-item label removal when deleting smart-label collections, preventing an AttributeError from the removed batch_edit_tags API.
  • Dispatch the configured delete webhook after every successful Kometa-managed collection or playlist deletion instead of only for delete_not_scheduled and delete_playlist; suppress the event for playlist sync's internal delete-and-recopy step. #3420
  • Add a per-library mass image-operation summary grouped by operation, source, image type, media level, and result while retaining per-item success messages, and collapse repeated No Reset Image Found warnings by image type in the end-of-run summary.
  • modules/plex.py: standardize Plex API retry handling so known 400/404/401 responses and Kometa Failed exceptions remain terminal, while exhausted transient retries re-raise their underlying exception instead of becoming opaque RetryError; collection move failures also include the item title and original Plex response, and query_collection/get_actor_id convert terminal Plex responses into contextual Kometa errors.
  • Added Drop-in replacement for the jikan api as it is being deprecated
  • Propagate the exit code from the worker process so --validate (and other runs) return a non-zero status on failure. Previously start() ran inside a ProcessPoolExecutor whose result was never retrieved, so a sys.exit(1) from a failed validation was swallowed and the parent always exited 0, breaking CI usage.
  • Fix the startup requirements version check so each package is compared against its own pinned requirement. Previously v1/v2 leaked between loop iterations and the package name lookup was case-sensitive, causing bogus messages such as GitPython version: 3.1.55 does not match expected: 1.4.14, where the expected value came from an unrelated package.
  • Resolve movie folder paths using the path style reported by the media server rather than the platform Kometa runs on. A Linux or Docker install pointed at a Plex server on Windows received paths such as P:\Movies\Title\file.mkv, which os.path.dirname reduced to an empty string, logging Plex Error: No location found for every movie and silently disabling add_existing, upgrade_existing, monitor_existing, item_radarr_tag, and item_sonarr_tag.
  • Fix streaming Defaults to more consistently use regional variants of Amazon, and stop trying to use Originals lists that do not exist

Changed

  • Replace the vague Input Failed error emitted when Trakt requires authorization in a non-interactive environment with an actionable Trakt-specific message, and include the failed token-refresh HTTP response in debug logs.