BroadwayOSC

Version T's open control protocol — read and drive console parameters live from any external program over the network.

Download the full spec (PDF) Download Markdown

BroadwayOSC is Version T’s open control protocol. Any external program — a show-control system, a QLab-style cue engine, a custom script — can reach the connected console over the network and read or drive its parameters live, using the same model Version T uses internally. Whatever an operator does on the console flows back out to every listening client without polling.

It’s a superset of standard Open Sound Control (OSC 1.0 / 1.1): plain float, integer and string messages work exactly as they do in any OSC tool, and BroadwayOSC adds a richer type system, index-range addressing and a readable console namespace on top. This page is a working summary; the full specification is the BroadwayOSC document in the project.

Connecting

BroadwayOSC runs over UDP, default port 8765. There’s no handshake — send any BroadwayOSC message and you’re registered as a client from that moment. Send /Unsubscribe/* to remove yourself cleanly when you disconnect.

What a message means

Every message is one of four intents, decided by the path prefix and whether a value is attached:

  • SET — a path with a value. The parameter updates immediately. ​/Input/1/Level ,f 0.75
  • GET — a path with no value. The current value comes back, and you’re auto-subscribed to future changes for that address. ​/Input/1/Level
  • SUBSCRIBE​/Subscribe/Input/1/Level registers for ongoing updates without changing anything.
  • UNSUBSCRIBE​/Unsubscribe/Input/1/Level stops one address; ​/Unsubscribe/* removes the client entirely.

An explicit /Set/… or /Get/… prefix is accepted if your client prefers it, but isn’t required.

Address format

/ChannelType/index/Parameter
/ChannelType/index/ProcessingBlock/Parameter
/ChannelType/index/ChannelType/index/Parameter

Tokens are case-insensitive — /input/1/level equals /Input/1/Level. Processing blocks (Comp, Gate, Hpf, Lpf, Preamp, Eq) take no index of their own. A crosspoint — a send from a channel to a bus — carries both indices, e.g. /Input/1/Aux/3/Level.

AddressReaches
/Input/1/LevelInput 1 fader
/Input/1/MuteInput 1 mute
/Aux/3/LevelAux 3 fader
/Input/1/Aux/3/LevelInput 1’s send to aux 3
/Dca/1/LevelDCA 1 fader
/MainStereo/1/LevelMain LR fader
/Input/1/Comp/ThresholdInput 1 compressor threshold
/Input/1/Hpf/FreqInput 1 high-pass frequency
/Input/1/Preamp/TrimInput 1 preamp trim

Addressing many channels at once

The index field isn’t limited to a single number:

FormExampleMeans
Single3Channel 3
Range1-32Channels 1 through 32
Set1,4,5-8Channels 1, 4, 5, 6, 7, 8
Wildcard*Every channel of that type

Two ranges in one address produce every combination — /Input/1-32/Aux/1-16/Level is 512 crosspoints. On SET the same value is written to every expanded address; on GET/SUBSCRIBE each one is handled individually.

Channel types

Inputs: Input, InputStereo, AuxInput, AuxInputStereo, FxReturn, FxReturnStereo.

Buses: Aux, AuxStereo, Group, GroupStereo, Bus, BusStereo, Matrix, MatrixStereo, FxSend, FxSendStereo, Output, OutputStereo, MainStereo, MainCentre, MainSub, MainSum, MainSurround, Mon.

Groups: Dca, MuteGroup.

Parameters

Float values are in engineering units — Hz, ms, dB — and Version T converts to and from each console’s wire format for you.

ParameterTypeNotes
LevelfloatFader (dB), −∞ to +10.0
Panfloat−100.0 L … 0.0 centre … +100.0 R
LevelDCAfloatDCA-adjusted level — read-only
MuteT/F
SoloT/FRead-only
NamestringRead-only
ColorRGB0xRRGGBB — read-only

Processing blocks each carry their own controls, addressed under the block: Preamp (Trim, Phase, Phantom), Hpf / Lpf (Freq, Enable, Slope), Gate, Comp (with sidechain and parallel sub-blocks), Eq (per-band Freq/Gain/Q/Type), Geq (mix buses), Delay, Insert, and DCA assignment (/Input/n/Dca/m/Enable). See the full spec for every field.

Scenes and cues

AddressTypeDoes
/Cues/1/GoimpulseFire the standby scene
/Cues/1/StandbyCueintSet the standby scene index
/Cues/1/ActiveCueIDintActive scene — read-only
/Cues/1/ShowstringActive show name — read-only
/Cues/1/CueListGETThe full scene list

Value types

BroadwayOSC carries the standard OSC tags — i int32, f float32, s string, b blob, T/F boolean, N null, I impulse (used for actions like Go), d float64, h int64, and arrays […] — and adds three of its own: u (uint16), R (RGB colour, 0x00RRGGBB), and P (a pair — int16 token plus int16 index). Collections use OSC 1.1 arrays: [TTF] for routing enables, [fff] for levels, [iii] for pre/post flags, [PP] for a channel pair list.

How clients stay in sync

Each client keeps its own subscription set; pushes only go to addresses in that set. Build the set by GETting an address (auto-subscribe) or with /Subscribe/. If you GET an address the server doesn’t yet hold, it fetches the value from the console, stores it, and pushes it to you as soon as it arrives — no re-request. From then on, every console move on that address is forwarded to you live. Clients are identified by ip:port.

Coexisting with ADM-OSC

BroadwayOSC (/ChannelType/n/…) and ADM-OSC (/adm/obj/n/…) use non-overlapping namespaces and can share the same UDP port, so spatial-object control and console control can run side by side.