2.35.8 (2026-10-02)
Features
- cache: add stale-while-revalidate reads and use them for manifests (416fcce)
- dashboard: add a version card to the overview (a16a2f1)
- jellyfin-web: change subtitle size and height from the player (ffdc0d3)
- jellyfin-web: drop hold to play from rows (d800040)
- jellyfin-web: guess intro and credits segments from chapter lengths (1580465)
- jellyfin-web: play next up and resume items from their page (72f8032)
- jellyfin-web: pulse the episode a page opened on instead of ringing it (b4fbd7c)
- jellyfin-web: request images at their drawn width times the pixel ratio (7f3d396)
- jellyfin-web: resize card artwork to its device size in a worker (2b49efe)
- jellyfin-web: restore keyboard focus on pages returned to (3ce4dee)
- jellyfin-web: rewrite shortcuts as remappable actions and add spatial navigation (ff0dd1a)
- jellyfin: redirect artwork to the smallest rendition covering the requested width (a0d2f9d)
Bug Fixes
- formatter: stop cached templates keeping their formatter alive (360deb8)
- jellyfin-web: leave genre-required libraries off home (0ac4310)
- jellyfin-web: show one continue watching card per show (09b1676)
- jellyfin: attach user data to series built from watch rows (dd9a87c), closes #1419
- jellyfin: look up episodes by video id across every season first (aa64fb4)
- jellyfin: reload cached configs once their TTL has passed (82f0bd3)
- watch-state: place anime episodes by TVDB when their IMDb hints name another show (f815290)
- wrapper: bound foreground manifest fetches by the manifest timeout (f82773b)
Performance Improvements
- anime-database: log only candidate rids in the selector (8f7fd8a)
- api: stop counting users on every health and status check (54ce0ca)
- cache: estimate the SQL cache size between counts (e98bbe3)
- db: drop unused indexes and narrow the import sweep index (61d73a8)
- db: stamp users.accessed_at at most once an hour (89beb47)
- debrid: skip torrents and NZBs with more than 10,000 selectable files (ec99d30)
- debrid: treat audio files as non-video and look extensions up in a set (e27061d)
- debrid: treat ebook and comic files as non-video (6547f3e)
- jellyfin: build only the episodes Next Up picks (62b5670)
- jellyfin: memoise image tags by URL (24b395a)
- jellyfin: read Upcoming and calendar shows through a pool (ae8b370)
- jellyfin: refresh id map seen_at at most once a day (52d43ec)
- jellyfin: share the cached config instead of cloning it (6a1140f)
- sel: extract expression names once per item when matching overrides (25f2fc0)
- watch-state: cache match keys for batch lookups (87b4847)
- watch-state: return the upserted row instead of reading it back (6db546d)
- watch-state: sweep stale imports by listed keys instead of re-stamping them (4e1cbbf)