Native GTK4 batch ProRes transcoder for Omarchy. Drop a camera card, get editorial-ready .mov files.
Find a file
28allday 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
assets Initial release: NO-CODER batch ProRes transcoder for Omarchy 2026-04-21 20:43:14 +01:00
nocoder Add per-core CPU visualizer and total-encode-time stat 2026-05-19 07:06:04 +01:00
packaging Initial release: NO-CODER batch ProRes transcoder for Omarchy 2026-04-21 20:43:14 +01:00
.gitignore Initial release: NO-CODER batch ProRes transcoder for Omarchy 2026-04-21 20:43:14 +01:00
install.sh install/uninstall: write windowrules to hyprland.conf 2026-04-25 13:52:55 +01:00
README.md Add per-core CPU visualizer and total-encode-time stat 2026-05-19 07:06:04 +01:00
run.py Initial release: NO-CODER batch ProRes transcoder for Omarchy 2026-04-21 20:43:14 +01:00
style.css Add per-core CPU visualizer and total-encode-time stat 2026-05-19 07:06:04 +01:00
uninstall.sh install/uninstall: write windowrules to hyprland.conf 2026-04-25 13:52:55 +01:00

NO-CODER

A native GTK4 + libadwaita batch transcoder for Omarchy. Drop video files (or whole camera cards) onto the window, choose a ProRes profile, hit Encode. Output is editorial-ready Apple ProRes .mov ready for DaVinci Resolve, Premiere, FCP, Avid.

Features

  • Real ffmpeg encodeprores_ks (with fallback to plain prores), live progress bar parsed from -progress pipe:1, cancelable, serial queue with disk-space pre-check.
  • GPU decode auto-probe — installer tests cudaqsvvaapi and pins the working one to ~/.config/nocoder/config.json. ProRes encoding stays on CPU (no vendor ships a GPU ProRes encoder), but offloading the decode side cuts wall time by 25-40% on H.264 / HEVC / AV1 sources.
  • Theme-aware — palette tracks the active Omarchy theme on every launch (parses colors.toml / ghostty.conf / alacritty.toml / kitty.conf in priority order). 34 stock + custom themes verified.
  • Pro camera ready.MXF from Canon XF / Sony XDCAM / Panasonic AVC-Intra, with proxy-directory pruning so dropping a Sony XAVC card maps only the masters in CLIP/ and not the low-res duplicates in SUB/.
  • Multi-track audio preserved — Canon C300/C500 records 4 mono PCM streams; all four land in the output .mov as separate tracks. Optional 24-bit toggle for pro delivery.
  • Live encode-speed indicator — footer shows real 1.5× throughput from ffmpeg and refines the ETA from actual measured rate, not a fixed heuristic. After the batch finishes, the footer also reports total wall time alongside succeeded / failed / output size.
  • Per-core CPU visualizer — collapsible btop-style pane between the queue and the footer, polling /proc/stat once a second and painting one vertical bar per logical core in the live theme accent. Useful for seeing at a glance whether the chosen profile / hwaccel combo is saturating the box or leaving headroom. Expand/collapse state persists across launches.
  • Hyprland-aware install — registers a .desktop entry with the walker, installs the icon at six hicolor sizes, appends a windowrule that floats and centres the app at 1280×880.

Supported source formats

.mov .mp4 .m4v .mkv .avi .mts .m2ts .webm .mpeg .mpg .3gp .3g2 .mxf

Not supported (proprietary RAW; ffmpeg has no decoder without vendor SDKs): .crm (Canon Cinema RAW Light), .braw (Blackmagic), .r3d (RED), .ari (Arri). Pre-transcode those via Canon Cinema RAW Development / Blackmagic RAW Player / REDCINE-X / ARRI Meta Extract first, then bring the resulting MXF or MOV into NO-CODER.

Install

Targets Arch / Omarchy specifically.

git clone https://git.no-signal.uk/nosignal/nocoder.git
cd nocoder
bash install.sh

The installer:

  1. Verifies pacman is present, fails fast otherwise.
  2. Installs missing pacman packages: python python-gobject gtk4 libadwaita ffmpeg.
  3. Installs Inter and JetBrains Mono fonts to ~/.local/share/fonts/ (per-user, no sudo).
  4. Probes GPU decode and pins the working backend to ~/.config/nocoder/config.json.
  5. Copies the source tree to ~/.local/share/nocoder/ so you can delete this clone afterward.
  6. Writes a launcher to ~/.local/bin/nocoder.
  7. Drops the .desktop file and PNG icons into the right XDG locations.
  8. Appends Hyprland windowrules (float, centre, 1280×880) inside a marked block in ~/.config/hypr/windows.conf.
  9. Restarts walker so the entry appears immediately.

After install, Super+Space → "no" launches it. Or nocoder from a shell.

Updating

cd nocoder
git pull
bash install.sh

Re-running the installer wipes and re-copies the live install dir — files removed upstream propagate cleanly.

Uninstall

bash uninstall.sh

Removes the installed app tree, launcher, desktop entry, all six icon sizes, the Hyprland windowrules block, and the per-user config. Pacman packages and fonts are left in place (other apps may need them).

Hardware

  • Required: anything that runs Omarchy / Hyprland.
  • Recommended: a GPU with ffmpeg-supported decode (NVIDIA NVDEC, Intel QSV, AMD VAAPI). The probe falls back to CPU decode on systems without; everything still works, just slower on camera-native sources.
  • No upper limit on coresprores_ks is well-parallelised.

Configuration

~/.config/nocoder/config.json is read at launch and merged on every settings change. All keys are optional:

{
  "hwaccel":            "cuda" | "qsv" | "vaapi" | "none",
  "profile":            "proxy" | "lt" | "standard" | "hq" | "4444" | "4444xq",
  "naming":             "keep" | "suffix",
  "out_dir":            "/absolute/path/to/output/folder",
  "audio_bits":         16 | 24,
  "auto_reveal":        true | false,
  "cpu_pane_expanded":  true | false
}

You can edit by hand to override the auto-probed hwaccel or to seed defaults; everything else just reflects what you've picked in the UI most recently.

Known gaps

  • "Reveal in Files" opens the output folder but doesn't select the specific file.
  • Per-row remove button isn't keyboard-accessible (mouse-hover only, by design — keeps tab order clean).
  • No live theme-change pickup — theme swaps apply on next launch, not immediately.

License

Not yet specified. The app wraps ffmpeg and depends on GTK4 / libadwaita; check those licenses for the redistributable parts.

Credits

Born as a rewrite of prowrap-yad.sh (a yad-based ProRes batch transcoder), rebranded NO-CODER to lean into the visual identity. The encoding logic from the original bash script is preserved verbatim.