Bug Fixes
- db: timeout get_by_filter after 30s instead of hanging on lock contention (9d5339b)
- playback: audio codec profile failures no longer force video re-encode (76567e2)
- playback: evaluate codec profiles for every direct play candidate (#406) (979a166)
- scope smart collection genres to matching items (#404) (8ebc1c3)
- sdks: honor Retry-After on 429 instead of retrying on a blind backoff curve (#415) (0f4b028)
- sdks: log retry attempts at debug instead of warn (af4948f)
- transcode: SW decode fallback when VPP tonemap can't survive subtitle burn-in (#408) (6bc53fe)
Features
- dashboard: add favicon (#394) (b631c83)
- items: fall back to filename-guessed media info on item details (#409) (88fd1ad)
- playlists: add ownership, public visibility, and admin collection management (#401) (d672efd)
- probe: tag probe_data with its origin (ffprobe/remuxdb/filename-guess) (#410) (149917c)
- shows: implement /shows/upcoming (#398) (3c680ad)