v0.3.30
Security
Closes the last deferred item from the v0.3.28/0.3.29 hardening pass.
Added
- Per-node worker tokens. Remote workers now carry a per-node auth secret on top of the shared
X-Api-Key. On first heartbeat the server generates a token withsecrets.token_hex(24), persists it in theworker_nodestable, and returns it in the response body. The worker writes it to/app/data/worker_token(mode 0600) and sends it on every subsequent call asX-Node-Token. The server compares withhmac.compare_digestand returns 401 on mismatch. Even if the shared API key leaks, an attacker who registers a fresh node can't impersonate an existing one. - Admin rotation (Nodes → [node] → Settings → Rotate token): invalidates the stored token immediately. The worker drops its cached copy on the next 401 and re-bootstraps on its next heartbeat — no worker restart needed.
docs/remote-workers.mddocuments the bootstrap + rotation flow;docs/security.mdmoves per-node tokens out of "deferred" into shipped defences.
Fixed
GET /api/nodesno longer returns thetokencolumn to the frontend. The read surface now exposes ahas_tokenboolean +token_issued_atISO timestamp instead — the token itself never leaves the server.
Changed
- Encoder-aware rename. Files encoded with NVENC now rename to
*.h265.*instead of*.x265.*—x265is a specific libx265 binary,h265(a.k.a. HEVC) is the codec. libx265 jobs keep thex265tag. The scan dedup logic considers both siblings so existingx265-named NVENC outputs are still recognised on rescan.rename_x264_to_x265is kept as a back-compat alias. - Settings → Video → Conversion Guide now has full libx265 preset + CRF tables and a recommended-combinations table alongside the existing NVENC ones, so CPU-only users see matching guidance. Expanded the tips section with NVENC-vs-libx265 quality equivalence, preset scaling, and CRF semantics.
- Settings → Metadata APIs shows a green "TMDB is already connected" banner when the bundled key is active, so users on fresh installs see that posters / native-language detection work out of the box and the TMDB input is strictly optional polish.
Docker images
Pinned to this release:
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.30 # portable (amd64 + arm64, CPU)
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.30-nvenc # x86_64 + NVIDIA GPU (NVENC)
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.30-edge # as above but ffmpeg master
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.30-edge-nvencFloating tags (:latest, :edge, :nvenc, :edge-nvenc) track the most recent release of each lineage.