The headline of this release is the three-phase /config redesign: every scan-related setting that was previously env-only is now editable from the UI, can be overridden per scan path, and is bundled into one-click presets. Plus AV1 hardware decode finally works out of the box on NVIDIA hosts.
Added
- Scan presets (#271). Named bundles of scan settings (detection method, mode, thorough decode duration / timeout, hardware acceleration) that apply to a scan path with one click. Ships with five built-ins: Zero-byte only, Quick (the existing default), Fast triage (decode first 60 s with hwaccel - the "just check the start of every file" preset), Deep scan (full decode with a 30-min timeout), and Paranoid (HandBrake's stricter decoder, software-only). You can also create your own custom presets under Advanced → Scan presets. Applying a preset writes its values into the scan path form; you can still tweak any field afterwards. Built-in presets are read-only so the dropdown cannot be accidentally emptied.
- Per-scan-path overrides for thorough decode duration, timeout, and hwaccel (#270). Each scan path can pin its own value (NULL = inherit the global). Lets a mixed setup keep one global value while making narrow exceptions: a 4K AV1 library on a CUDA host can force
hwaccel=cudaandthorough_duration=60swhile the same Healarr instance scanning a remote SMB share runs withhwaccel=offand a longer timeout. Configured under the "Override scanning defaults for this path" disclosure on each scan path. - Per-path Dry Run checkbox (#270). The
dry_runcolumn has existed onscan_pathsfor several versions but was missing from the form, so it could only be set via direct DB poke or import/export. It now sits next to the Auto Remediate checkbox. - Settings page exposes the runtime tunables that were previously env-only (#263). Thirteen
HEALARR_*knobs are now editable from/config(thorough decode duration / timeout, hardware acceleration mode, default retry cap, scanner worker count, scanner shutdown timeout, dry-run mode, retention days, verification timeout / interval, stale threshold, *arr rate limit RPS / burst). Each field shows whether its current value comes from env, the DB, or the built-in default; env-set values render read-only with a "Set byHEALARR_FOO" badge so it is obvious which fields are operator-locked.
Changed
- Docker image ships a custom ffmpeg with NVIDIA codec support baked in (#261). The stock Alpine
apkffmpeg was compiled without NVDEC/NVENC/CUVID, so AV1 files always fell back to software decode (libdav1d) even on hosts with an NVIDIA GPU passed through. The image now bundles a from-source ffmpeg 7.1.1 built with--enable-cuda --enable-cuvid --enable-nvdec --enable-nvenc --enable-vaapi, so AV1 / HEVC / H.264 hardware decode and encode all work when/dev/nvidia*(NVIDIA Container Toolkit) or/dev/dri(VAAPI / Intel QSV / AMD) is exposed to the container. Runtime ABI shim (gcompat) is included so the musl-linked ffmpeg can dlopen the glibc NVIDIA libraries the Container Toolkit injects. Image size: 371 MB (was 249 MB). - Thorough scan duration / timeout / hwaccel changes take effect on the next scan without a restart (#263). These three values were previously only read at process startup. The internal resolver now consults env > DB > default at every health-check call, so a UI-side change applies immediately to the next file scanned. The other ten tunables still flag as restart-required because they are bound to subsystems (scheduler, rate limiter, retention pruner) that cache their config on startup.
Fixed
- Scan-path validation no longer rejects Windows and UNC paths (#262). The frontend Zod schema required both
local_pathandarr_pathto start with/, which is wrong for two cases: (1) Healarr running on Windows directly (the binary, not the Docker image), and (2) Healarr running on Linux while talking to a Sonarr / Radarr that itself runs on Windows and returns paths likeD:\Media\Moviesor\\server\share\Movies. Both fields now accept POSIX absolute (/foo), Windows drive-letter (C:\foo,c:/foo), and UNC (\\server\share,//server/share) forms. Fixes #255. - Hardware acceleration probe no longer claims success on hosts that only expose an emulated VGA (#261). When
HEALARR_HEALTH_CHECK_HWACCEL=auto, the probe used to accept any ffmpeg whose build advertised hwaccels, even inside a VM where the only "GPU" is QEMU/Bochs emulated VGA (PCI vendor0x1234) with no decode hardware behind it. Healarr would then add-hwaccel autoto every command, ffmpeg would silently fall back to software, and AV1 thorough checks would time out. The probe now also verifies that at least one credible GPU device is exposed to the container (/dev/nvidiactl, or a/dev/dri/renderD*whose sysfs vendor is not0x1234) and logs a clear warning otherwise so the misconfiguration is obvious from the logs.
Removed
- Dead
health_check_modecolumn onscan_paths(#270). It was defined in001_schema.sqlwith a CHECK constraint but never read or written by any Go code; the concept moved intodetection_mode(which is what the scanner actually consults). Carrying both invited future confusion. Migration008drops the column.
Full Changelog: v1.3.3...v1.3.4