Docs — control API
Control API
Everything the on-screen controls can do, an external controller can do — from a MIDI surface, a lighting desk, or your own software. Four ways in, one stable protocol.
Transports
| Transport | Where | Notes |
|---|---|---|
| MIDI | Virtual destination StageVis Control | CC, Note, Program and Clock. Hardware controllers connect automatically; MIDI-learn mapping is built in and persists. |
| OSC | UDP port 57824 |
Address patterns mirror the addressing scheme below. |
| HTTP + WebSocket | Port 57823 |
REST: GET /health, GET /discover,
GET /state, POST /command. Live updates
over WebSocket at /ws. |
| Data channel | Topic stagevis-control |
For controllers that already sit in the camera session. |
Locked by default
The control ports bind to the Mac itself (localhost). Control from another device on the LAN is an explicit opt-in in Settings and requires a bearer token that you hand to the controller — nobody on the venue Wi-Fi can touch your show uninvited.
Addressing
Every tunable parameter has a stable address:
style.<id>.<param>— pixel filters (strobe, mirrors, beat effects…)effect.<id>.<param>— semantic effects (face zoom, camera movement, Auto Smart Mode…)visual.<id>.<param>— generative visualizers
Don't guess IDs: ask the running app. GET /discover
returns the live catalog — every unit and parameter the app accepts,
with ranges and defaults. That reply is the source of truth.
Show safety
The panic command resets the pipeline to a clean
passthrough — the picture, untouched. BLACKOUT and FREEZE remain
available on-screen no matter what a controller is doing.
Stability
The wire format is versioned and stable: integrations built today keep working across updates. Unknown fields are ignored rather than rejected.
Building a deeper integration? The full wire contract — versioning, atomic batches, error semantics, plus a JSON schema for every command — is available on request: [email protected].
