Working notes, diagrams, and show sheets for a hybrid audio–video performance rig.
This repo exists so that future-you can walk into a venue, open one page, and remember:
- what plugs into what,
- which device lives on which MIDI channel,
- and how the visuals are being driven by hands and by sound.
It’s not firmware. It’s the field manual for the whole ecosystem: audio, MIDI, analysis, and video endpoints.
If you need the library/catalogue view of boxes, runtimes, manuals, and muster steps, start with:
equipment/INDEX.mdequipment/MUSTER_MATRIX.mdequipment/MANUALS.md
If you need the actual current studio picture rather than the stable architecture, start with:
12_current-studio-rig.md13_hardware-registry.md14_external-sources.mddocs/SCENES.md
If something is failing right now, start with:
docs/TROUBLESHOOTING.mdHELP_REQUEST.mdnpm run doctor:helpernpm run collect:debug
- Clock first - decide who owns clock tonight, then keep it singular. DrumKid often fills this role; REAPER can do it in DAW-led sets.
- Audio + analysis - mixer -> Horizon / PA; frZone fed from a post-fader bus.
- Visuals + bridge - start SCapps / Processing endpoints, then the bridge/router.
If you’re standing in a basement / club / warehouse right now, start here.
-
Clock (one boss only)
- If REAPER owns clock tonight:
- Enable the DrumKid MIDI output in Preferences → Audio → MIDI Devices.
- Right-click it → Enable output + Send clock/SPP.
- Keep Edirol/frZone tracks off that output: current DrumKid firmware accepts CC 16–31 on every MIDI channel.
- If DrumKid owns clock tonight:
- Keep REAPER out of transport ownership.
- Use DrumKid to fan clock to SQ-64 or other devices if needed.
- If REAPER owns clock tonight:
-
Audio (mixer → Horizon → PA)
- Patch sources and devices according to
02_audio-mixer-fx.md. - Confirm main mix → Horizon → interface / PA.
- Send a post-fader bus (e.g. Bus 1) to frZone (and LineLight, if it shares that feed).
- Patch sources and devices according to
-
Video (SCapps chain up)
- Launch the appropriate SCapps chain from
05_scapps-rigs.md
(Frame Buffer, Maelstrom, SC Video Mixer, etc.). - Confirm capture/camera → SCapps is working (or that your bridge app is feeding them).
- Launch the appropriate SCapps chain from
-
Control (Edirol + frZone)
- Move each Edirol fader/knob on the video-control channel and watch the bridge / SCapps respond.
- Play audio and confirm frZone shows activity and is issuing CC on its analysis channel.
- If Maschine MK1 is present, confirm only the intended safe/scene/event pads are armed; it should not own transport.
-
Safety
- Verify you have a reliable blackout / safe scene you can trigger instantly.
- After the set, jot any weirdness in
notes/so it can feed back into the docs.
Once those five are green, you can start pushing things into the red.
Three lanes, one rig:
-
Audio lane
Sources → mixer → Horizon / other FX → PA / recording.
frZone and LineLight tap a post-fader bus here to “listen” to the mix. -
Control lane
One device owns clock at a time.
DrumKid often serves as the active clock controller.
REAPER can take that role in DAW-led sets.
SQ-64 and AE rack handle voices.
Edirol sends visual macros.
frZone sends analysis CCs. Maschine can optionally add a small scene/event deck. -
Video lane
Capture / camera feed flows into a chain of Signal Culture modular video apps (“SCapps”).
These are video endpoints:- They receive video (capture / Syphon)
- They receive control (MIDI/OSC) from Edirol, frZone, and any optional semantic deck routed through the bridge
- They do not own the global logic; they just react beautifully.
This repo describes how those three lanes weave together for different shows and projects.
These are the files currently in the repo and their jobs:
-
01_system-overview.md
Big-picture map of the rig: audio, MIDI, and video lanes, plus where SCapps sit. -
02_audio-mixer-fx.md
Mixer channel layout, FX loop, how Horizon sits on the master bus, and how frZone / LineLight tap the audio. -
03_midi-clock-video.md
Clock topology and MIDI routing, including how DrumKid- or REAPER-led clock setups coexist with the video-control lanes. -
04_scapps-overview.md
Overview of the SCapps in use (Frame Buffer, Maelstrom, SC Video Mixer, etc.):
what each app does, what it expects for video in, and what MIDI/OSC it listens to. -
05_scapps-rigs.md
“Whole-world” video setups: which SCapps are chained together for a given set or EP, and how Edirol’s controls are mapped for each rig. -
10_maschine-mk1-lane.mdFirst-pass field-manual page for the optional Maschine MK1 scene/event deck: pad intent, stable IDs, safety logic, and interop guidance. -
11_repo-roles-failover.mdAuthority-side registry for repo roles, survivability tiers, failover paths, and show-night failure cards. -
12_current-studio-rig.mdSnapshot of what is actually in the studio now: core, dormant, planned, and under-documented nodes. -
13_hardware-registry.mdFlat current-rig registry of hardware nodes, their current roles, their sources of truth, and the next documentation move for each. -
14_external-sources.mdProvenance map for manuals, local repos, vendored code, and other off-page sources this rig still depends on. -
equipment/Field-library atlas for anything that can be remembered, taught, loaned, patched, revived, or called into service. This is the broader equipment truth, separate from the current show-ready rig truth. -
docs/TROUBLESHOOTING.mdSymptom-first recovery guide for audio, visuals, controller, clock, frZone, safety states, export drift, and hardware-source confusion. -
HELP_REQUEST.mdCopy/paste intake sheet for getting help without losing time to vague state gathering. -
docs/PROFILES.mdMission profiles for show readiness: required devices, optional devices, controllers, endpoints, and clock doctrine. -
docs/CONTROLLERS.mdSemantic controller maps for the physical surfaces and the web control surface. -
RigMap.drawio.pngCurrent hand-built studio diagram: the fastest way to see which nodes are actually active right now. -
interop/
Interop contract + play rules: mappings schema, authority contract, exported runtime profile, endpoint behavior, naming conventions, bridge expectations, and consumer notes indocs/INTEROP_EXPORTS.md. -
tools/rig-doctor.js
Profile-aware preflight command for show readiness, environment checks, runtime context, safety mapping summaries, export freshness, and capture JSON. -
tools/collect-debug.jsBuilds a timestampedlogs/live-rig-debug-*packet with doctor JSON, selected profile, scene file, controller maps, interop export, package metadata, and git state. -
docs/PREFLIGHT.mdShow-night preflight guide with 5-minute and 20-minute checklists. -
vendor/greyBox/Vendored snapshot of the currentgreyBox/Growsersketch family so the source is available from this repo alone. -
hardware/Backwards-compatible pointers to moved equipment passports. Useequipment/for new per-node pages. -
snapshots/Last-known-good or documented-placeholder snapshots of profile, devices, clock, endpoint, safety anchors, and things not to change before the next test. -
06_frzone-linelight.md
How frZone and LineLight listen to the audio bus, what CCs frZone emits, and how those CCs bias SCapps parameters. -
07_show-2025-12-15-basement-noise.md
A specific basement show plan: cabling, minimal rig choices, and one-off routing notes. -
08_midi-mapping-2025-03-15-basement-noise.md
MIDI / OSC mapping sheet for that set: which controls go where for that particular performance. -
ep-i-hope-the-sky-will-still-take-us/
EP-specific notes, mappings, and rig snapshots connected to i hope the sky will still take us. -
notes/
Scratch questions, experiments, troubleshooting logs, and post-show notes that should eventually feed back into the main docs.
This is the default mental model for channels. Per-show files can override, but treat this as home base.
- Active clock boss → followers: clock, start, stop
- DrumKid may forward clock to SQ-64 and other devices.
| Device | Role | MIDI Ch | How it’s used now |
|---|---|---|---|
| DrumKid | Clock controller/follower + drums | — | May own clock or follow another master; drives drum audio; can fan clock. |
| SQ-64 | Main sequencer | varies | Sends notes/gates; AE rack on its track set to Ch 16. |
| AE Rack | Modular voices | 16 | Receives note/gate patterns from SQ-64. |
| Edirol PCM-30 | Visual “mission control” | 10 | Faders/knobs/buttons send CC/notes to bridge → SCapps. |
| frZone | Audio analysis → CC | 15 | Emits CCs (bands) for SCapps to use as modulation. |
| Horizon | Master FX / bus processor | — | Front-panel for now; Ch 9 mentally reserved for future MIDI. |
| Lo-Fi Sampler | Clocked audio texture | — | Audio + clock in; no CC/note I/O yet. |
| LineLight | Audio-reactive lamp | — | Follows an audio bus; no MIDI. |
| SCapps | Video processing chain (endpoint) | n/a | Receive video + CC/OSC from Edirol (Ch 10) & frZone (Ch 15). |
| REAPER (DAW) | Hub / router | n/a | Routes audio/MIDI and may own clock in DAW-led sets. |
- Source: Edirol PCM-30 (faders, knobs, buttons)
- Destination: bridge (TD/Max/etc.) → SCapps
Conceptually:
- Faders: big moves (clean ↔ processed, feedback amount, tunnel depth, etc.)
- Knobs: fine shape (micro-glitch, warp, hue, bias between analysis and manual control)
- Buttons: hard switches (harsh scene, soft scene, blackout)
The exact CC/Note map for each show lives in 03_midi-clock-video.md and 05_scapps-rigs.md.
- Source: frZone, listening to a post-fader bus from the mixer.
- Destination: SCapps.
Typical mapping:
- CC 20 = low band (bass energy)
- CC 22 = mid band
- CC 23 = upper-mid band
- CC 24 = high band
SCapps (via the bridge) treat these as gentle bias inputs; Edirol’s macros ride on top.
- Source: SQ-64 track configured for Ch 16
- Destination: AE rack voices
Keeps the modular’s note lane clearly separated from the visual control lanes.
- Role: dedicated 4x4 hardware deck for safe/show-state actions, named scenes, hybrid hits, and section cues
- Preferred transport: OSC-first semantic commands, with hybrid MIDI+OSC only for bounded event pads
- Invariant: not transport, not clock, not a replacement for Edirol, frZone, or
live-rig-control
Use stable IDs such as:
masch.safe.blackoutmasch.scene.intromasch.event.noise_burstmasch.override.manual
Treat raw note numbers and any MIDI channel assignment as TODO until the hardware template is locked.
- Planned for any future Horizon MIDI:
- scene select
- tilt / width / fold
- wet/dry
Keeping one channel mentally reserved now avoids future routing chaos.
You don’t need a full how-to here, just a few anchors:
-
MIDI Devices
- If REAPER owns clock tonight, enable DrumKid as an output and turn on Send clock/SPP.
- Enable a virtual port (IAC / loopMIDI) for sending Edirol/analysis CCs into the bridge → SCapps.
-
Audio buses
- Use a post-fader send from the master or a submix bus to feed frZone / LineLight.
- If REAPER is feeding SCapps audio directly (for capture/feedback), document that routing in
02_audio-mixer-fx.mdor04_scapps-overview.md.
If you change those assumptions later, update this block and the relevant per-file notes.
For each new show / project:
- Duplicate the latest
07_show-…and08_midi-mapping-…files as a starting point. - Adjust only what really changes:
- which devices are on the table,
- which SCapps rig you’re running,
- any special cabling or safety constraints.
- After the show, drop quick notes in
notes/and then:- update
01_system-overview.mdif the rig itself has evolved, or - update
03_midi-clock-video.md/04_scapps-overview.mdif the logic has shifted.
- update
The goal isn’t to keep this perfectly pristine; it’s to give future-you a single page of clarity before you start plugging things in and turning them up.
The interop contract lives in interop/interop.md and is the source of truth for:
- mappings schema (
interop/interop.schema.json) - authority contract (
interop/rig.contract.json) - authority contract schema (
interop/rig.contract.schema.json) - exported runtime profile (
interop/exports/live-rig.default.json) - export contract notes (
docs/INTEROP_EXPORTS.md) - control lanes (macro vs analysis)
- the optional Maschine semantic lane
- naming conventions
- endpoint behavior
Key invariant: endpoints follow clock; they never generate it.
If you’re wiring Processing endpoints, route CC/OSC through the bridge and follow the
scene system notes in docs/SCENES.md (semantic scene IDs -> triggers -> router).
If clock is required, forward it from REAPER/bridge into the same port.
Authority-side maintenance commands:
npm run validate:rig-contract
npm run validate:scenes
npm run validate:profiles
npm run validate:controllers
npm run doctor
npm run export:rig-profile
npm run validate:rig-profile