OSC (Open Sound Control)
Beta
OSC is rolling out in phases and is off by default. Today it lives in the Logic script API (osc.on / osc.send). Dedicated wiring nodes and plugin-parameter mapping come in later releases. It requires a licence.
Open Sound Control lets Stagewright send and receive control messages over your show network, so it can talk to lighting consoles, media servers (QLab), mixers, and tablet surfaces (TouchOSC, Lemur). It's a higher- resolution, network-native complement to MIDI.
Turn it on
Settings ▸ OSC (a licensed feature):
- Enable OSC (beta) — off by default. When on, Stagewright opens an OSC receiver so your script's
osc.on(...)handlers fire. - Network interface — which network to listen on. The default is every interface; on a multi-network rig (Dante, SoundGrid, MA-Net, venue Wi-Fi) pick a specific one so OSC only appears where you want it.
- Port — the UDP port the receiver binds to (default 8000).
Sending OSC (osc.send) works from a script whenever OSC is enabled and needs no receiver — you give it the target host and port directly.
Map a control without scripting (beta)
You don't need a script for the common case. Select a Stage control in edit mode and open the OSC section in the inspector, right below MIDI Learn:
- Receive from OSC address (
/fader/1) drives this control from an inbound OSC message (its first numeric argument,0..1). Needs OSC enabled above. - Send to
host/port/addresssends the control's value out whenever it changes, to a lighting desk, QLab, a DAW, or a tablet surface.
Set both and the control is bidirectional: an external surface can move it, and it echoes changes back so the surface stays in sync. Mappings save with the project. Use a script (below) when you need logic OSC mapping can't express.
Trigger the show from a song (beta)
Stagewright can conduct the rest of your rig off your songs. In the Set view, select a song and add OSC messages under OSC on recall: host, port, address, and optional arguments. When that song is recalled, from the song strip, the Set tab, a remote, or a MIDI Program Change, Stagewright fires those messages.
So a foot-controller Program Change that recalls "Chorus" can, in the same move, jump the lighting console to the chorus look and advance a QLab cue. Sending needs no receiver, and no script.
Song "Chorus" -> /eos/cue/12/fire to 192.168.1.20:8000
-> /cue/8/start to 192.168.1.50:53000 (QLab)Receiving
// Fire when a message arrives at an exact address.
osc.on('/fader/1', (args) => {
widget('PIANO_VOL').set(args[0] as number); // OSC float 0..1
});
// "*" is a catch-all: every inbound message, so a script can route
// addresses itself.
osc.on('*', (args, address) => {
console.log(`osc ${address}: ${args.join(', ')}`);
});The handler receives (args, address): args is the list of message arguments (numbers and strings), address is the address it arrived on.
Sending
// osc.send(host, port, address, ...args)
osc.send('192.168.1.50', 53000, '/cue/1/start'); // QLab: go
osc.send('192.168.1.50', 53000, '/fader/1', 0.73); // a float value
osc.send('192.168.1.50', 8000, '/scene', 3, 'verse'); // int + stringArgument types: JavaScript numbers keep their int/float type (a whole number goes out as an OSC int, a fractional one as a float), strings map to OSC strings, and booleans to 0 / 1.
Notes
- OSC never touches the audio thread; inbound messages are handled on the UI/message thread, so a flood of messages can't glitch audio.
- The receiver only listens while OSC is enabled and Stagewright is running. Turn it off when you're not using it.
- Because the network is the trust boundary (like the remote surface), bind OSC to a specific interface on a shared show network.