r/linuxaudio • u/Siryu6 • 19m ago
OpenRig: a JACK/LV2 guitar pedalboard OS for the Pi 5 – PREEMPT_RT, KMS UI, A/B updates
I've been working on OpenRig, a guitar pedalboard that ships as a Buildroot image for the Raspberry Pi 5 and x86_64. It's written in Rust and hosts LV2 plugins and Neural Amp Modeler captures over JACK. Sharing it here because the audio side may interest some of you, and I'd value feedback from people who know LV2 hosting better than I do.
Audio
- JACK callback: tuner → effects → looper. Buffers are preallocated, there's no allocation and no blocking lock in the callback (try_lock only), and the DSP meter uses atomics.
- Structural changes (add, move, preset load) build a new chain on a builder thread. It's swapped in with a 20 ms equal-power crossfade, and the old chain is dropped off the audio thread. Parameters, bypass, scenes and split settings apply live without a rebuild.
- Delays and reverbs keep their tails across bypass and scene changes.
- Cabinet and room IRs use zero-latency convolution. The tail of long IRs runs on a worker thread, so the callback cost stays flat.
- NAM through NeuralAudio (NAM Core + RTNeural), always built optimised.
LV2 hosting (lilv)
- Provided features: URID map/unmap, options, bounded-block-length and isLive. Atom inputs get time:Position (tempo from tap or MIDI clock) and MIDI. Controls, ranges, units, toggles, integers and enumerations come from the plugin metadata.
- Not provided yet: worker:schedule and state. So plugins that need them (Dragonfly Hall/Room/Plate, file loaders, some guitarix bundles) are skipped for now. ZAM, x42 fil4/dpl/tuna, CAPS, Calf (no UI), LSP, MDA, Airwindows and GxPlugins load. Adding worker and state is next on my list.
OS
- Buildroot with a PREEMPT_RT kernel and a read-only root. The UI runs full screen on KMS/DRM (Slint linuxkms backend), with no X11 or Wayland.
- Signed RAUC A/B updates with rollback when the new system doesn't come up. There are app-only updates when the system doesn't change.
- The audio interface and buffer size are set in a pedalboard.txt on the FAT boot partition, editable from any computer.
- In-app monitor: DSP load vs. period, JACK load, xruns, CPU per core, temperature, and Pi throttling/under-voltage.
Tested on a Pi 5 with a Scarlett 2i2 at 48 kHz, 128 × 2. It also runs as a plain app on a desktop with JACK or PipeWire-JACK. Version 0.2, GPL-3.0.
- Docs: https://openrig.eu (the developer section covers build and architecture)
- Code: https://github.com/Siryu6/OpenRig

