2026.9.0 (2026-09-26)
Features
- add separate macOS binary for detecting videotoolbox hardware capabilities (8ab46f8)
- add support for transcoding to E-AC3 and Opus audio formats (#1943) (bfb5912)
- allow configuring play status updates per-server (#1899) (8d26958), closes #1893
- db: snapshot before migrating and refuse to run on a newer schema (#2053) (1936114)
- extract more metadata about music videos (#1885) (a24303c)
- promote worker pool to default (#1994) (2b68d4e), references #1991 #1991
- search: add season filter to smart collections and search DSL (#2020) (b35e947), closes #2019
- server: add optional basic auth for protected routes (#1865) (0c6c398)
- server: drain trash incrementally in the background (037854d)
- server: rebuild the guide after emptying trash rewrites lineups (ac71ab6)
- server: upgrade zod to 4.5 and enable z.compile() (#2083) (577b169), references #2057
- web: add Simplified Chinese (zh-CN) localization (#2055) (921ef7f)
- web: fit mid-roll defaults to the slot's own programs (d9514fc)
Bug Fixes
- address review findings on scheduling safety (b6fff47)
- api: reject invalid schedules and custom-show updates before writing (20314a8), references #2087
- artwork: derive artwork urls on demand and bound the backfill (#2133) (ddd5f60), references #2128 #2129 #1923 #2132 #2129 #2128
- backup: stop reporting a backup as successful when it was not written (#1998) (73d739b)
- channel: clear filler collections when all are removed (#2114) (fc8d360)
- ci: let the CalVer release compute a version in a month with no tags (#2106) (31a1b30)
- db: allow deleting a filler list referenced by play history (#2054) (cb62ac5)
- db: allow eac3 in the transcode config audio format constraint (#2137) (7a511cf), closes #2120
- db: materialize programs from one shared relation set (#2119) (63ebb09)
- db: reuse the live connection on a second DBAccess.init (bdac9db)
- delineate overflow and lateness in slot editors (#1965) (542f5f2)
- ensure session connections and heartbeats stay in sync (#1942) (72919e0)
- ensure unseen items from custom show sync are synced in search (#1895) (8bc0a76)
- ffmpeg: set filter_hw_device for vaapi to fix subtitle burn-in with opencl tonemap (5213e56)
- guide: stop redirect slots producing zero-length programs (2b4a003)
- include sessions in channels API (#1928) (7d37be2)
- media-sources: mark libraries unavailable when credentials are rejected (0c99b0b)
- media-sources: mark missing libraries unavailable instead of deleting them (8ffe02d), closes #1973
- music: link scanned albums to their persisted artist (#2118) (b7cd3f4), closes #2116
- remove merge conflict markers committed into tracked files (cc7d5d8)
- resolve external subtitles for Jellyfin and Emby sources (84b30b6)
- scheduling: default missing overflow to no overflow (cdb3ab9)
- scheduling: ignore empty filler lists instead of failing the schedule (0c4e2e4)
- scheduling: keep mid-roll break markers and fill breaks completely (e8f2ca1)
- scheduling: name the filler time constants after their real values (f503e4d)
- scheduling: rank filler programs by staleness and honor long cooldowns (dfcb0b1)
- scheduling: stop an out-of-period slot offset from killing the schedule (037319a)
- scheduling: stop slot schedulers from looping on empty or zero-length content (af6c4f4), references #2087
- server: emit a valid OpenAPI 3.0 document so the client generates (c97d767)
- server: honor --log_level/-v CLI flags in the logger (#1992) (#2067) (edd0443)
- server: meld guide flex into the preceding entry, not a lineup index (#2117) (3555449), closes #1798
- server: properly exclude season 0 of a show when that season is on the exclude list (#1915) (1abd59a), closes #1914
- server: stop passing an undefined log level to workers (#2111) (480d106)
- settings: accept xmltvCreditImagesEnabled in feature flag updates (#2108) (39bc7c2)
- web: de-duplicate the Mid filler toggle and show it in the slot table (821b50b)
- web: keep empty custom shows out of new slots and show save errors (87922c7), references #2087
- web: restore collapsed mid-roll rows in the program list (b9f7532)
- web: stop regen-routes rewriting every route path (#2122) (129d2cb)
- web: stop the slot editor producing offsets outside the schedule period (cf86788)
- xmltv: emit program elements in DTD order (35ea89f)