Octatrack-style scenes. A/B crossfader. No DAW required.
Snapshot a handful of parameters, assign them to four scenes per pattern, and morph between them in real time — Digitakt, Syntakt, Analog Heat, Analog Rytm, and the rest of the Overbridge family. A tiny local VST3 host drives the plugin and serves the web UI from your Mac.
| Surface | Open it | What it's for |
|---|---|---|
| Scenes & crossfader | /scenes.html |
Build scenes, morph, MIDI clock slide |
| Remote crossfader | /remote.html |
Crossfader only — great on a phone over Wi‑Fi |
| Classic control | / |
Browse, search, and tweak all 2,700+ parameters |
Pattern bar, A/B assignment, crossfader, clock slide, four scene slots, and the parameter picker — the main event.
Switch to 4 scenes (grid) to assign a scene to each corner, then drag the pad to bilinearly morph between all four.
Search, pin favourites, nudge anything. Handy when you don't know the exact parameter name yet.
Crossfader-only surface for phones and tablets on your LAN — follows the active pattern from the desktop UI.
To regenerate these clips locally (uses the in-process fake plugin — no hardware
required; writes MP4 + GIF under docs/videos/):
cargo build --release
OB_FAKE_PLUGIN=1 ./target/release/ob-host --fake-plugin --port 7780 &
npm install && node scripts/record-demo-videos.mjs- 4 scene snapshots per pattern — each scene holds only the parameters you pick, at the values you want. Just like an Octatrack scene.
- A/B crossfader — assign a scene to each side and drag to morph every mapped
parameter live. Snap buttons too:
⟵ A·B ⟶. - 2D quad crossfader — assign four scenes to the grid corners and drag the pad to morph bilinearly between them.
- Pattern baseline — Capture baseline stores a neutral “home” per pattern for empty crossfader sides. No capture yet? Empty sides follow the live value.
- Param Learn — hit Learn on a scene card, wiggle a knob, and the parameter that moved gets added (or updated).
- Per-pattern scenes on disk —
data/scenes/<plugin>/<pattern>.jsonvia the host API. BrowserlocalStorageis a fallback only. - Pattern selection & PC follow — banks A–P, patterns 1–16, or enable Follow Program Change to switch when the Digitakt sends MIDI PC (pick the port in the header MIDI selector).
- Clock slide — sweep the crossfader over N bars (default 8) from MIDI clock, locked to transport Start and bar 1. Uses the header MIDI input.
- MIDI crossfader mapping — absolute fader (0–127) or relative encoder, via host or Web MIDI.
- Debug MIDI log —
--debugorOB_DEBUG=1for a per-message log in the scenes UI.
- Remote slider —
/remote.htmlis crossfader-only for phones and tablets on your LAN. Openhttp://<your-mac>.local:7780/remote.html(set System Settings → General → Sharing → Local Hostname) or use the IP from startup logs. Follows the active pattern from the desktop UI; override with?pattern=B05. - Live, bidirectional — hardware moves show up in the UI; UI writes hit the device. Default control-only mode leaves device audio to the hardware (or your DAW) while the host handles parameters.
- Full HTTP / WebSocket / MIDI API — poll, set, batch morph, send MIDI, roll
your own controller. Scene files at
GET/PUT /api/scenes/{plugin}/{pattern}.
This repo is source code only — no proprietary Elektron binaries.
| Component | Included? | How to get it |
|---|---|---|
| Overbridge Scenes host + web UI | ✓ | Clone & build |
truce-rack-vst3 |
✓ | Vendored (MIT / Apache-2.0) |
| Elektron Overbridge VST3 plugins | ✗ | Install Overbridge → ./scripts/copy-plugins.sh |
| Overbridge Engine | ✗ | Ships with Overbridge; setup.sh may copy a local ref into vendor/ (gitignored) |
plugins/, vendor/Overbridge Engine.app, and data/scenes/ stay on your
machine — all gitignored.
ob-host is control-only. It never opens the Elektron as a CoreAudio device and never writes to the USB audio return — so analog Main Out stays on the hardware's own mix, and a DAW can use Overbridge USB audio in parallel.
Web UI / HTTP / WebSocket / MIDI
│
▼
ob-host (VST3 host)
│
▼
Elektron Overbridge VST3 plugin ──► Overbridge Engine ──USB──► device
(params / MIDI only)
Device audio: analog Main Out ←── hardware mix (or your DAW's Overbridge I/O)
Parameters are delivered through the edit controller (same path as the plugin
GUI), driven by the hidden editor + main run-loop pump. No process() call,
no host audio thread.
More detail: docs/architecture.md ·
docs/designs/audio-routing-and-control-options.md
git clone https://github.com/MartinNeifert/overbridge-scenes.git
cd overbridge-scenes
./scripts/setup.sh # copy VST3s + build
./scripts/start-engine.sh # Overbridge Engine (USB mode)
RUST_LOG=info ./target/release/ob-host --plugin Digitakt
open http://127.0.0.1:7780/scenes.htmlStartup also prints LAN URLs for the remote slider:
LAN remote crossfader: http://192.168.1.42:7780/remote.html
LAN remote crossfader: http://digitakt.local:7780/remote.html
Want the MIDI tap? Add --debug:
RUST_LOG=info ./target/release/ob-host --plugin Digitakt --debugMore run modes and architecture: docs/architecture.md.
No hardware or VST bundle required — run the full suite as part of normal development:
./scripts/test.shThis runs Rust tests (parameter round-trips, MIDI mapping, scenes HTTP API, fake-plugin Overbridge contract) and Node unit tests for crossfader morph math in web/scenes-morph.mjs. Equivalent: cargo test -- --test-threads=1 plus npm test. Optional live HTTP smoke: ./scripts/test-params.sh --live.
- Choose a scene under Add parameters to.
- Search → + to capture the current live value.
- Or Learn on a scene card + move hardware — biggest wiggle wins.
- Snapshot live refreshes every param already in the scene from the device. Row sliders edit the scene value only (not the crossfader morph). ✕ removes a param.
- Recall slams the whole scene to the device, crossfader aside.
Pick Scene A and Scene B, drag the fader. Every param in the union morphs like this:
| Situation | What happens |
|---|---|
| Locked in both scenes | A-value ↔ B-value |
| Locked in one scene only | That lock ↔ baseline |
Side is — None — |
Other scene ↔ baseline |
Capture baseline for a fixed home on empty sides. Clock slide auto-sweeps over N bars when you hit Play — set Bars to your pattern length.
Deep dive: docs/designs/scenes-crossfader.md.
Same powers as the UI — HTTP, WebSocket, virtual MIDI port:
curl http://127.0.0.1:7780/api/parameters | jq '.[0:5]'
curl http://127.0.0.1:7780/api/scenes/Digitakt/A01Full reference: docs/api-reference.md.
| Doc | Why read it |
|---|---|
docs/architecture.md |
Layers, CLI, project layout |
docs/api-reference.md |
HTTP / WS / MIDI API |
docs/designs/ |
Design notes incl. scenes & crossfader |
docs/machines/ |
Device quirks (e.g. Analog Heat MKII) |
docs/active-issues/ |
Known rough edges |
Index: docs/README.md.
- macOS (Apple Silicon or Intel)
- Elektron Overbridge (
/Applications/Elektron/) - Rust (
brew install rustor rustup) - Hardware in Overbridge USB mode — not MIDI-only
MIT License. Not affiliated with Elektron.



