github Kometa-Team/Kometa v2.4.7

4 hours ago

Added

  • Added a fallback Trakt Client ID for "public" mode if the current Trakt credentials are invalid
  • Add a Floppy connector with floppy_list, floppy_list_details and floppy_tracked builders, optional API-token authentication for private lists, and sync_tags support for applying Floppy list tags as Plex item labels.
  • Add Floppy as a movie, show, and episode mass-rating source for Plex audience, critic, or user rating fields.
  • Add floppy as a direct Defaults ratings-overlay source for movies, shows, and episodes.
  • Add Tracearr connector support with history-based collection and playlist builders for popular, watched, trending, rewatched, completed, binged, most transcoded, watch time, in-progress, and full history views, including user-specific and playback-quality filters, direct movie provider-ID matching, v2 capability detection with v1 fallback, and in-run history reuse.
  • Add Serializd as a connector
  • Add serializd as a genre source for shows and episodes for the mass metadata update operation, includes nanogenres.
  • Add serializd as a source for show and episode audience, critic, and user mass metadata updates, and serializd_user for episodes only.
  • Add sync_watchlist_to_serializd show-library operation to mark the Plex server owner's watched episodes as watched in Serializd.
  • Add builders: serializd_list, serializd_watchlist, serializd_trending, serializd_popular, and serializd_featured
  • Add serializd as a direct rating source for show and episode-level Ratings Defaults overlays.

Fixed

  • Sort IMDb award years and multi-edition year values before resolving starting/ending ranges, so out-of-order repository entries do not cause latest ranges to include the wrong years.
  • Refresh an item's in-run Plex state after mass_poster_update removes its Overlay label, ensuring the following overlay pass detects the reset poster and reapplies its overlays instead of incorrectly skipping it.
  • Redact registered secrets from critical-error webhook messages before sending them to Discord, Slack, Notifiarr, or other webhook destinations. #3472
  • Make nightly Docker builds wait for, and use, the matching base image after dependency changes.
  • Accept all successful Trakt API responses so sync_to_trakt_list handles the 201 Created returned when adding list items instead of marking the collection build as failed. #3453
  • Add pyinstrument to requirements.txt (it was only in dev-requirements.txt), so KOMETA_PROFILE=pyinstrument actually works in a normal/Docker install instead of silently no-opping.
  • Fix folder_location/folder_location.not smart_filter matching for show libraries, which previously failed with plex_search attribute: folder_location not supported (or, for builder_level: episode, Unknown filter field "location") because the filter was being resolved against Plex's show libtype, which doesn't expose a folder filter; it's now resolved against the episode libtype instead, matching how Plex exposes it for shows. #3483
  • Lock the poster, background, logo, and square art fields after resetting them from a source, and check the logo's actual Plex field name (clearLogo, not logo), so subsequent runs with ignore_locked: true skip re-resetting instead of looping forever. #3487

Changed

  • Document Trakt's free connected-app limitation and identify which Trakt builders and account features require OAuth/VIP access versus public API access.
  • Migrate Trakt authentication documentation and shipped configuration examples from the legacy PIN/OAuth callback flow to Device Code Flow, including headless-server guidance and the optional webhooks.trakt_pin notification.
  • Batch Plex writes that were previously one API call per item: label/genre sync, item_critic/audience/user_rating updates, and title-parentheses removal now merge into shared saveMultiEdits()/batchMultiEdits() calls (respecting plex_bulk_edit_batch_size) instead of one edit_tags()/editField()/editTitle() call per item; label/genre and rating writes for the same item are further merged into a single PUT instead of one per attribute type, grouped by library and media type so mixed-library/mixed-type playlists route through the correct Plex connection. The overlay Overlay label add is batched the same way, flushing every plex_bulk_edit_batch_size items instead of only once at the very end of the run.
  • Reduce repeated in-run Plex/API lookups via caching: modules/cache.py's ID-map queries (query_tmdb_to_tvdb_map and siblings, query_guid_map/update_guid_map) are memoized in-process; check_filter memoizes plain item-attribute reads (excluding writable fields), media-derived number filters (channels/height/width/aspect/versions/audio_language/subtitle_language/duration), and per-item seasons/episodes/albums/tracks sub-item listings, the last of which is now reused via cached_item_subitems at every remaining call site (including overlays.py's runtime/total_runtime lookups) instead of re-querying Plex each time.
  • Reduce redundant network/image work: Requests.get_image() is memoized by URL for the run; validate-only image URL checks use HEAD instead of GET; validate-only checks are skipped entirely for Kometa's own GitHub-hosted assets; and fresh local overlay images are reused instead of being re-fetched from GitHub on every call.
  • modules/request.py: read-only file/URL YAML loads (that are never saved back) now use ruamel's safe loader, skipping comment/formatting-preservation bookkeeping that was pure overhead for these loads.
  • Dedupe forced Plex reloads for tag filters checked back-to-back in check_filters; snapshot the overlay backup folder once per run instead of calling os.path.exists() per item; buffer log file writes instead of flushing after every line (WARNING and above still flush immediately, and handler removal/close force a final flush so the file is always complete); early-exit check_for_var's variable-resolution loop once a pass makes no substitutions, and skip its redundant second pass when no arithmetic <<var+N>> syntax is present.
  • Improve audio_language/subtitle_language plex_search matching (including the default languages.yml flag overlays) to recognize every locale- or region-tagged variant of a language that actually exists in the library (e.g. es-419, en-US, spa) instead of only an exact 2-letter match. A single es/it/zh filter now matches every variant Plex reports for that language, resolved with one lightweight, cached lookup of the library's language filter choices rather than a separate Plex query per variant.

Don't miss a new Kometa release

NewReleases is sending notifications on new releases.