Skip to content

v2.9.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 16:31
dcda50c

2.9.0 (2026-07-30)

Features

  • add gemini-3.5-flash-lite, gemini-3.5-flash and gemini-3.6-flash (99a8dd1)
  • add granular control on image caching per-provider (cee0571)
  • add per-type controls for watch tracking (5f2f559)
  • add per-type controls for watch tracking (aed365a)
  • add POSTER_PROXY_ALLOW_PRIVATE to gate private art hosts (81e93f1)
  • add trigger keyword to AI search (a64097f)
  • add trigger keyword to AI search (3231795)
  • ai-catalog: add a model selector to the AI Catalog Builder (99a8dd1)
  • aliases: resolve human-readable user aliases to UUIDs (6dbd084)
  • aliases: resolve human-readable user aliases to UUIDs (5cc40bd)
  • allow custom art placeholders to be marked optional (2ab610c)
  • catalogs: import and remap existing collection files (cef456f)
  • catalogs: serve collection and widget JSON over HTTP (cef456f)
  • catalogs: visual builder for Nuvio collections and Fusion widgets (cef456f)
  • clear cached art by media id (ed8f729)
  • configurable poster cache validity period (667ad07)
  • dashboard: clear cache entries by meta id or catalog id (e2f4f75)
  • experimental aiom image caching engine (67f33e7)
  • expose the full TMDB discover sort options (17aed03)
  • implement meta cold store (a4f0a65)
  • make the art proxy routes' client cache configurable (667ad07)
  • movielens: apply taste tags on non-prediction catalog sorts (2a12df2)
  • movielens: implement "your rated collection" and refactor (11b72b1)
  • movielens: import user-created lists as catalogs (828bd07)
  • movielens: multi-user MovieLens recommendations (fad8105)
  • movielens: support genre filtering in watchlist catalog (ace3b70)
  • poster-cache: cache rendered rating and custom-art posters (1fff141)
  • redesign oauth popups (7f44c91)
  • reuse cold store dashboard stats for a configurable window (f8c77df)
  • settings: register TMDB rendition toggles (ab2ccc9)
  • show the title when clearing cached entries by ID (a0983a4)
  • surface image warming on the dashboard (651f9c7)
  • tmdb: add central image rendition helper (dbea454)
  • tmdb: make all rendition toggles opt-in (10c73b6)
  • tmdb: size art-batch logos and backdrops via helper (19479a9)
  • tmdb: size landscape posters independently of backgrounds (f9ce52d)
  • tmdb: size meta logos and backdrops via helper (7a95b05)
  • tmdb: size provider logos and backdrops via helper (cc0848a)
  • tmdb: size search logos and backdrops via helper (bc514d4)
  • top10: broaden service coverage, handle regional variants (fbe5d75)
  • top10: broaden service coverage, handle regional variants (a1ed440)
  • tracking: point users at the login when they enable watch tracking (c38d88b)

Bug Fixes

  • ai-catalog: resolve the model against the provider actually used (99a8dd1)
  • aliases: back off the alias map refresh after a failed load (4a34119)
  • aliases: hide alias controls when the feature is disabled (4a34119)
  • aliases: keep a missing user_aliases table from breaking the user list (4a34119)
  • aliases: preserve query string encoding when rewriting userUUID (4a34119)
  • aliases: read CONFIG_LOAD_RATE_LIMIT_PER_MIN from the settings registry (4a34119)
  • aliases: require ADMIN_KEY for alias changes (4a34119)
  • aliases: resolve aliases on /api/config/clear-cache (4a34119)
  • allow rootless users with built-in poster cache enabled (34be89d)
  • allow rootless users with built-in poster cache enabled (c2f84a2)
  • cache empty movielens list pages (359a732)
  • catalogs: make collection persistence and catalog warnings honest (cef456f)
  • dashboard: keep the logs service filter visible (cca2179)
  • drop the cold store epoch index that turned lookups into scans (ee42df5)
  • honor per-class image cache toggles for custom art (81864a7)
  • hydrate release dates on TVDB movie search results so the digital release filter can act on them (fa533b2)
  • include Simkl activity fingerprint in warmed catalog keys (e94e3f2)
  • keep the warmer's freshness test in step with the store (b9742d4)
  • keep the warmer's freshness test in step with the store (ec05f8d)
  • key MovieLens explore catalogs by resolved group tags (ee2931c)
  • let Refresh accept an art-proxy image URL (26a9be1)
  • log cache hits that are answered with a 304 (71e84b9)
  • logo: cache metahub image-existence checks for the full TTL (e679561)
  • logo: verify metahub logo fallbacks exist before serving them (44f90de)
  • mal & trakt oauth on multi-replica setups (afa5205)
  • meta: keep IMDB episode ids when a season is missing from Cinemeta (89be187)
  • paginate Trakt watched fetches and prioritize recently aired shows in unwatched catalog (415725f)
  • proxy episode thumbnails so clients can load them (bd96abf)
  • proxy episode thumbnails through the art proxy (2cc7dba)
  • replace retired gemini-2.5-flash-lite default (99a8dd1), closes #604
  • report the database dialect before initialize() has run (87296b7)
  • request Trakt watched shows with extended=progress so hide-watched works again (963dd96)
  • resolve frontend typecheck errors (6d6643e)
  • scope MovieLens catalog cache to the connected account (c69d4e1)
  • search: let OpenRouter AI search run without credits (b294d84)
  • search: request posters at w600_and_h900_bestv2 like every other path (bc24573)
  • sign the warmer's proxy-art URLs so private art hosts resolve (60122ec)
  • skip rendered art the warmer has already cached (e42ecf5)
  • stale catalog name in movielens edit modal (a719e59)
  • stale catalog name in movielens edit modal (5018028)
  • stop forcing a vote count floor on discover catalogs (61334bc)
  • stop inferring a rating poster provider from saved API keys (a7a2359)
  • stop logging missing poster art as an error (694a1c1)
  • stop signing image proxy URLs with the MovieLens credential key (607f820)
  • surface MovieLens list fetch failures instead of truncating (f752d60)
  • tmdb: never request a rendition larger than the asset (032cb08)
  • trakt: serve the integration logo from our own assets (b507ac1)
  • warm on cache epoch change rather than addon version (5785c15)
  • warm the default poster when a rating poster cannot be built (4b2c096)

Performance Improvements

  • cache & memoize image cache dns lookups (d373cfc)
  • dedup md5 hashes (bfe73fb)
  • use lz4 instead of lz-string in config cache (44d92cd)
  • version keys by epoch instead of addonversion (e5ad95c)
  • warm images through one bounded adaptive queue (59f84c8)