Codec-aware transcode routing, two-stage queue, request candidate picker, admin reorg

- Requests approval now shows a Radarr/Sonarr candidate picker instead of grabbing the first search result (fixes wrong-title/wrong-year matches)
- approve_request reuses an existing Radarr/Sonarr entry instead of erroring when content is already in the library
- New codec-check queue (step 1) probes source codecs and skips transcoding entirely for already browser-native files; only non-native content reaches the transcode queue (step 2)
- Fixes ffmpeg hard-failing on non-H.264 sources via the h264_mp4toannexb bitstream filter (root cause of the fix-audio-all failures)
- Added Codec Check Worker / Transcode Worker to the services health panel with restart
- Reorganized the admin page into Pipeline/Utilities dropdowns; added the missing Sonarr Import link
- Bumped VERSION 1.0.0 -> 1.1.0
This commit is contained in:
root
2026-07-30 20:41:11 -05:00
parent 671074764e
commit b28a49e8fa
13 changed files with 784 additions and 50 deletions
+15
View File
@@ -44,3 +44,18 @@ def restart_service(key: str) -> bool:
c = client.containers.get(svc["container"])
c.restart(timeout=15)
return True
# The codec-check and transcode workers are asyncio background tasks inside the backend
# process itself, not separate containers — there's no way to bounce just one of them, so
# "restart" for either really means restarting the whole streamhoard-backend container. That
# briefly takes the API down too, not just the stalled queue; the caller (server.py) surfaces
# both worker "services" as needing this same restart target.
BACKEND_CONTAINER = "streamhoard-backend"
def restart_backend() -> bool:
client = _get_client()
c = client.containers.get(BACKEND_CONTAINER)
c.restart(timeout=15)
return True