killer-wail
Hot-swap orchestrator for Orca-c and Bitwig Studio on macOS.
Orca-c is a brilliant livecoding environment, but it has no IPC, no file watching, and no external control mechanism. It reads its file once at startup and ignores the outside world. The only way to make it reload is to physically press Ctrl+O inside the TUI.
killer-wail works around this by running Orca-c inside a tmux session and using tmux send-keys to simulate those keystrokes from the outside. You can swap patterns, auto-reload on save, and map MIDI channels to Bitwig tracks without ever touching the Orca window.
The Trick
When Orca-c opens its file dialog with Ctrl+O, it pre-populates the input with the current filename. So the reload sequence is just two keystrokes: open the dialog, then press Enter to accept what's already there. Orca re-reads from disk instantly.
The catch is that if you're writing to the same file Orca is reading, you can get a partial read. killer-wail solves this with atomic writes: it writes to a temp file first, then does an os.replace() to swap it into place in a single filesystem operation. By the time Orca looks, the file is always complete.
Getting Started
You'll need macOS, Python 3.10 or later, tmux, and an Orca-c binary in your PATH. Build Orca-c from the hundredrabbits repo and install tmux with brew install tmux if you haven't already.
pip install -e ".[dev]"
That gives you the kw command. Start an Orca session, swap patterns on the fly, and watch files for automatic reload.
kw start orca/kick.orca --bpm 120
kw swap orca/backbeat.orca
kw watch orca/
kw stop
MIDI Channels
Orca's : operator sends MIDI with a hex channel character from 0 to f, mapping to MIDI channels 1 through 16. killer-wail gives you a channels.yml config that maps those hex values to human-readable track names in Bitwig.
Run kw channels --init to generate a default mapping, then edit it to match your Bitwig session. Run kw scan on any pattern file to see which channels it uses and what they'll route to.
Watch Mode
Point kw watch at a file or directory and it monitors for changes using watchdog. Every time you save, Orca reloads. Events are debounced at 150 milliseconds so editors that trigger multiple write events on a single save don't cause a reload storm.
Timing
MIDI timing over software is never sample-accurate, but it's close enough to be useful. Apply a small offset in Bitwig to compensate for jitter, and quantize your recorded clips after the fact. For the tightest results, use lower BPM subdivisions in Orca and let Bitwig snap everything to the grid.