Commit graph

2 commits

Author SHA1 Message Date
e72a46cce5 Add per-core CPU visualizer and total-encode-time stat
* New collapsible pane sits between the main split and the footer and
  shows per-core CPU utilisation as btop-style vertical bars. Polls
  /proc/stat once a second, paints with the live Omarchy accent colour
  via Cairo. Collapsed/expanded state persists in
  ~/.config/nocoder/config.json as cpu_pane_expanded (default true) so
  the pane reopens however the user last left it.

* Footer "complete" state now reports TOTAL TIME alongside Succeeded /
  Failed / Output size. Wall time captured via time.monotonic() when the
  encode worker starts and again when the state flips to complete; only
  successful (non-cancelled) batches get a time. Formatted via the
  existing data.format_duration helper so it matches the pre-encode
  estimate's display.

The /proc/stat parser lives in its own pure-Python module
(nocoder/cpu_sampler.py) so it's GTK-free and easy to test in isolation.
SystemPane mirrors the Footer attachment pattern (Gtk.Box subclass +
__gtype_name__ + add_css_class), attached from MainWindow exactly like
the footer is. Timer auto-stops on widget detach via a get_root() check,
so no explicit teardown wiring is needed.

CSS gets a .system-pane block (top border + padding) and a .cpu-bar-area
rule that sets foreground colour to @accent — the Cairo draw callback
reads that via widget.get_color() so the bars track the live theme
without re-plumbing.

Verified:
* CpuSampler reports 32 cores at idle baseline; under stress-ng --cpu 0
  aggregate hit 99.9% with all bars saturated.
* Theme accent cascades correctly; bars use the active Omarchy theme.
* cpu_pane_expanded round-trips (manually setting false then relaunching
  reopens the pane collapsed).
* TOTAL TIME shows 0:02 for a 2.28s encode of a 3-second HEVC test clip.
* Installed copy at ~/.local/share/nocoder/ updated and verified via the
  walker launcher.
2026-05-19 07:06:04 +01:00
749e102bd5 Initial release: NO-CODER batch ProRes transcoder for Omarchy
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.
2026-04-21 20:43:14 +01:00