First public tagged release. Focus areas: multi-platform Docker images, GPU
detection that's actually honest about what the host can do, a real VMAF
threshold feature, and serious UI performance wins during encoding.
Added
- Multi-arch Docker images.
shrinkerr:latestand:edgenow build for
bothlinux/amd64andlinux/arm64— run Shrinkerr on a Mac, Raspberry Pi,
ARM cloud VM, Windows WSL2, or any x86 Linux host. Ships with ffmpeg n7.1
(stable) or master (bleeding edge). - NVENC image variants (
:nvenc,:edge-nvenc). Separate x86_64-only
lineage built on the CUDA base image for NVIDIA hosts that want hardware
HEVC encoding. Documented driver requirements (525.60.13+ for:nvenc,
570+ for:edge-nvenc) and the Monitor page surfaces your running driver
so any mismatch is obvious. - VMAF minimum-score threshold. Settings → Video → "Reject encodes below
a minimum VMAF score". When enabled, any encode whose measured score is
below the threshold is discarded and the original is kept. Rejected jobs
get a distinct amber "VMAF rejected" badge on the Completed tab with the
exact score and threshold in the expanded detail. - Monitor page encoding-capability strip. Each node card now shows what
the node can actually encode (NVENC ✓ / libx265 ✓) and, when NVENC is
unavailable, a specific human-readable reason (missing GPU, old driver,
ffmpeg build has no hevc_nvenc, etc.). - Driver version reporting. Shows your NVIDIA driver version alongside
the GPU name so you can correlate with the ffmpeg SDK's driver floor. runtime: nvidiacompose docs. The portainer compose template now
documents the Linux vs Windows/Docker-Desktop GPU-passthrough differences
inline, with copy-pasteable instructions for both.- Build variants via
FFMPEG_BUILDarg. Power users can rebuild the
image pinned to a specific BtbN release (n7.1,n8.1,master, …). scripts/build-images.sh— one command to build all four image tags
locally, with optionalMULTIARCH=1for buildx cross-compile builds..github/workflows/build-images.yml— automatically publishes all
four tags to GHCR on every push tomainand onv*tag pushes.- Remote worker nodes — run a second container on any host with
SHRINKERR_MODE=worker, advertise its capabilities (nvenc / libx265),
and jobs get dispatched to it with capability-aware routing. - Autoplaying hero video in the README — five-screen UI tour that
loops seamlessly.
Changed
- Rebrand from Squeezarr to Shrinkerr. All user-facing strings, DB
filename (squeezarr.db→shrinkerr.dbwith transparent startup
migration), backup folder name (.squeezarr_backup→.shrinkerr_backup
with fallback reads), environment variable prefix (SQUEEZARR_*→
SHRINKERR_*with fallback parsing), session cookie, download filenames,
and notification subject lines. Backward-compat shims everywhere so
existing deployments upgrade with zero config changes. - Default ffmpeg pinned to BtbN n7.1 (NVENC SDK 12.2, driver 525.60.13+)
instead of rollingmaster. Covers a much wider driver range out of
the box. Override via--build-arg FFMPEG_BUILD=masterfor bleeding edge. - README rewrite with a proper features matrix, platform compatibility
table, workflow walkthroughs, environment variable reference, and
troubleshooting guide. - Apache 2.0 license added.
Fixed
- NVENC falsely detected on CPU-only hosts. A bug in the detection code
lethevc_nvencpass the capability check on machines with no NVIDIA GPU
at all (macOS in particular). Detection now requiresnvidia-smito
succeed before even attempting the NVENC test encode, and trusts ffmpeg's
return code rather than parsing stderr for failure strings. - Queue page at 116% CPU + 1.9 GB RAM in Chrome during active encoding.
Four compounding issues: a document-wideMutationObserver, un-throttled
WebSocket progress broadcasts, missingReact.memoon list rows, and
never-paused polling. Fixed all four; typical idle Queue page is now in
the single-digit CPU range. - Dashboard page at 60% CPU during encoding. Similar pattern: every
WebSocket progress tick forced the four Recharts SVG surfaces to redraw
from scratch. Extracted the live-status card into a memoized child,
memoizedchartData, and added visibility-aware polling. - VMAF score missing on half of concurrent encodes. Two jobs running in
parallel on files that shared a 20-character filename prefix (same-series
TV episodes, same-franchise movies) both wrote libvmaf output to the
same/tmp/shrinkerr_vmaf/*_vmaf.jsonpath, clobbering each other. Now
suffixed with a UUID fragment — zero collisions possible. - "Output file missing or empty after conversion" false failures on
flaky NFS / SMB mounts. Added a retry loop with directory-scan fallback
for late-landed temp files, and clear diagnostic output when the source
is intact so a failed job doesn't trigger downstream NZBGet/Sonarr
cascades that blocklist the release. - NZBGet post-processing script exiting with code 1 on unhandled Python
exceptions. Wrappedmain()in a try/except that exitsPOSTPROCESS_NONE
instead — prevents NZBGet from marking a healthy download as broken. - NZBGet script download endpoint 404. Endpoint was pointing at a
non-existentnzbget-extension/Squeezarr/main.pypath with the wrong
placeholder tokens. Now correctly serves the realShrinkerr.pytemplate
with matching__SHRINKERR_URL__/__SHRINKERR_API_KEY__substitutions. runtime: nvidiamissing from production compose caused NVENC
passthrough to silently no-op on many Linux hosts even when the Container
Toolkit was correctly installed. Compose templates now document both
runtime: nvidiaANDdeploy.resources.reservations.devicesas the
belt-and-suspenders Linux pattern.- Scanner "Quick check" and "Thorough check" buttons collapsed into one
"Health check" dropdown — same two modes, less button clutter.
Security
- No user-facing security fixes in this release.
Docker images
Pinned to this release:
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.0 # portable (amd64 + arm64, CPU)
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.0-nvenc # x86_64 + NVIDIA GPU (NVENC)
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.0-edge # as above but ffmpeg master
docker pull ghcr.io/i-ial9000/shrinkerr:0.3.0-edge-nvencFloating tags (:latest, :edge, :nvenc, :edge-nvenc) track the most recent release of each lineage.