CI Report:
https://ci-tests.linuxserver.io/linuxserver/kometa/v2.4.6-ls109/index.html
LinuxServer Changes:
Full Changelog: v2.4.5-ls108...v2.4.6-ls109
Remote Changes:
Added
- Add
folder_locationandfolder_location.notPlex 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 optionalKOMETA_PROFILE=pyinstrumentenvironment 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_searchand 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
IndexErrorwhen the fallback page does not contain__NEXT_DATA__chart data. #3446 - Batch collection and playlist
item_label,item_label.remove,item_label.sync, andnon_item_remove_labelupdates through Plex multi-edit requests, grouped by library and media type and split byplex_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
AttributeErrorfrom the removedbatch_edit_tagsAPI. - Dispatch the configured
deletewebhook after every successful Kometa-managed collection or playlist deletion instead of only fordelete_not_scheduledanddelete_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 Foundwarnings by image type in the end-of-run summary. modules/plex.py: standardize Plex API retry handling so known 400/404/401 responses and KometaFailedexceptions remain terminal, while exhausted transient retries re-raise their underlying exception instead of becoming opaqueRetryError; collection move failures also include the item title and original Plex response, andquery_collection/get_actor_idconvert 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. Previouslystart()ran inside aProcessPoolExecutorwhose result was never retrieved, so asys.exit(1)from a failed validation was swallowed and the parent always exited0, breaking CI usage. - Fix the startup requirements version check so each package is compared against its own pinned requirement. Previously
v1/v2leaked between loop iterations and the package name lookup was case-sensitive, causing bogus messages such asGitPython 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, whichos.path.dirnamereduced to an empty string, loggingPlex Error: No location foundfor every movie and silently disablingadd_existing,upgrade_existing,monitor_existing,item_radarr_tag, anditem_sonarr_tag. - Fix
streamingDefaults to more consistently use regional variants of Amazon, and stop trying to useOriginalslists that do not exist
Changed
- Replace the vague
Input Failederror 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.