The built-in WASM player (frontend/static/vendor/hevcjs/hevc-core.js)
rendered washed-out, green/red-shifted video. Two causes, both fixed:
- VideoFrame path (Chrome): the I420 VideoFrame was created without a
colorSpace, so the browser defaulted to BT.601 limited -> hue shift,
and guessed the range -> washout. Set explicit BT.709, fullRange:false.
- WebGL fallback shader: used BT.709 FULL-range coefficients on
limited-range camera output -> washout/desaturation. Switched to
BT.709 limited-range conversion ((Y-16)*255/219, chroma centered 128).
VERSION -> 0.0.116.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Live and recording both read from the go2rtc restream. If go2rtc's
runtime stream table gets emptied (camera clear via API, go2rtc restart
with a stale/empty config, or a silently-failed startup sync_all), every
restream returns 404 and both live and recording go dark until a manual
`docker restart nvr-go2rtc`.
Add a background Reconciler that every 30s diffs the desired streams
against go2rtc /api/streams and PUTs only the missing ones (existing
streams are left untouched so active producers/consumers are not
disrupted). VERSION -> 0.0.115.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
entrypoint.sh has a /bin/sh shebang; CRLF would break exec in the Linux
container. Keep shell scripts LF-only regardless of Windows autocrlf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>