Profile, naming, output folder, audio bit depth and auto-reveal toggle
now round-trip via ~/.config/nocoder/config.json instead of resetting
to defaults on every launch. Alpha is deliberately NOT persisted because
the toggle is conditional on the chosen profile and would create more
confusion than value when restored from a stale session.
* New nocoder/config.py owns the JSON file with read-modify-write
merging so multiple writers (hwaccel.py + UI prefs) don't clobber
each other. Atomic write via tempfile + os.replace.
* hwaccel.py refactored to use the shared load_config / update_config
helpers; CONFIG_PATH still re-exported for backward compat.
* settings_pane.Settings gains to_persistable() that returns the
subset to round-trip; new load_persisted_settings() validates each
field against its allowed range and falls back to defaults.
* window.py loads settings on startup and persists them every time
the settings-changed signal fires (which already covers the folder
picker via set_output_folder).
Verified: round-trip works, validation rejects bogus values cleanly,
hwaccel survives the merge.
Native GTK4 + libadwaita app that wraps ffmpeg to batch-convert source
video into editorial-ready Apple ProRes .mov. Targets Omarchy / Hyprland
on Arch Linux specifically.
Highlights:
* Real ffmpeg encode (prores_ks → prores fallback) with live progress
parsing, cancelable serial queue, disk-space pre-check, source-missing
guard, output-collision (N) suffixes.
* GPU decode auto-probe at install time — picks cuda → qsv → vaapi based
on what actually initialises on the host. ProRes encoding stays on CPU
(no vendor ships a GPU encoder); offloading the decode side cuts wall
time 25-40% on H.264 / HEVC sources.
* Theme-aware: tracks the active Omarchy theme on every launch by
parsing colors.toml / ghostty.conf / alacritty.toml / kitty.conf in
priority order. 34 stock + custom themes verified.
* Pro camera support: .MXF (Canon XF / Sony XDCAM / Panasonic AVC-Intra)
with proxy-directory pruning so dropping a Sony XAVC card maps masters
in CLIP/ but skips the low-res duplicates in SUB/.
* Multi-track audio preserved — 4 mono PCM streams from a Canon C300/C500
land in the output as 4 separate tracks. Optional 24-bit toggle.
* Live encode-speed indicator with ffmpeg -progress parsing; ETA refines
from real measured throughput rather than a fixed heuristic.
* Hyprland-aware install — registers walker entry, six hicolor icon
sizes, float+centre windowrule for class dev.nocoder.NoCoder.
Distribution model: git clone + bash install.sh. The installer copies the
source tree to ~/.local/share/nocoder/ so the clone is disposable. Updates
are git pull + re-run install.sh.
Documented at README.md.