OSC Integration
Send and receive Open Sound Control messages to automate lighting desks, media servers, sound consoles, and more — triggered by spoken words.
How It Works
ProdCom listens to live audio on one or more channels, transcribes speech in real time, and matches keywords you define. When a keyword fires, ProdCom sends OSC messages to your configured destinations — no external scripting required.
- Add a destination — Settings → OSC → Add Destination (host, port, UDP or TCP).
- Create an automation — Settings → Automations → New Automation.
- Choose a trigger — keyword match, inbound OSC message, or MIDI event.
- Add an OSC Send action — set the address pattern, arguments, and target destination.
- Go live — start your channels and ProdCom handles the rest.
OSC Address Patterns
An OSC address is a forward-slash-delimited path, similar to a URL. ProdCom supports the full OSC 1.1 pattern matching spec for inbound triggers:
| Pattern | Matches |
|---|---|
/cue/go |
Exact address |
/cue/* |
Any direct child of /cue/ |
/cue/*/fire |
Wildcard segment in the middle |
/cue/{go,stop} |
Matches /cue/go or /cue/stop |
/cue/[1-5] |
Character range — matches /cue/1 through /cue/5 |
/msg/{channel}/{text} |
Named capture — captures channel and text for use in actions |
Named Captures
When using an OSC trigger, wrap a path segment in curly braces to capture its value at runtime. Captured values can then be used as template variables in any downstream action.
| Trigger Pattern | Incoming Address | Captures |
|---|---|---|
/msg/{channel}/{text} |
/msg/Stage Left/standby |
{channel} → "Stage Left", {text} → "standby" |
/fader/{id}/level |
/fader/7/level |
{id} → "7" |
/cue/{list}/{cue}/fire |
/cue/main/42/fire |
{list} → "main", {cue} → "42" |
Captures are also available by position: {1} is the first capture,
{2} the second, and so on.
Note: Curly braces with a comma inside — like {go,stop} — are standard
OSC alternation, not captures. Only single-word braces like {name} create captures.
Template Variables
Action fields that accept text — such as OSC send addresses, string arguments, and "send text to channel" messages — support template variables. Wrap a variable name in curly braces and ProdCom replaces it with the live value when the automation fires.
| Variable | Trigger | Description |
|---|---|---|
{value} |
Keyword / OSC | Matched transcript text, or first OSC argument |
{source.channel} |
Keyword | Name of the channel that produced the match |
{address} |
OSC | Full incoming OSC address |
{arg1}, {arg2}, … |
OSC | Nth argument from the incoming message |
{1}, {2}, … |
OSC | Nth captured segment from a named-capture trigger |
{channel_name}, etc. |
OSC | Named capture — matches the {name} in the trigger pattern |
{note} |
MIDI | MIDI note number |
{velocity} |
MIDI | MIDI note velocity |
{raw} |
All | Full raw description of the triggering event |
Example: An OSC trigger /msg/{channel}/{text} paired with
an OSC send action using address /reply/{channel}/ack and string argument
{text} — when /msg/FOH/standby arrives, ProdCom sends
/reply/FOH/ack with argument "standby".
Dynamic Channel Targeting
The "Send Text to Channel" action supports a Dynamic target option. Instead of picking a fixed channel, enter a template variable — ProdCom resolves it at runtime and routes the text to the matching channel.
Resolution order:
- By name — exact match against channel display names (case-insensitive).
- By index — if the resolved value is a number, it targets the channel at that position (1-based).
Example: Trigger pattern /msg/{channel_name}/{text} with a "Send Text
to Channel" action targeting {channel_name} and message {text}. When
/msg/Stage Left/standby for cue 5 arrives, ProdCom sends "standby for cue 5" to the
channel named "Stage Left".
If neither a name nor an index matches, the action is skipped and logged to the Activity Log.
Argument Types
ProdCom supports the standard OSC 1.0/1.1 argument types:
| Type Tag | Name | Example |
|---|---|---|
i |
Int32 | 42 |
f |
Float32 | 0.75 |
s |
String | "hello" |
b |
Blob (binary) | Raw bytes |
T / F |
Bool | True / False |
N |
Null | — |
I |
Impulse (bang) | — |
Transport Options
UDP
The default for most OSC workflows. Fire-and-forget, lowest latency. Use for lighting desks (ETC Eos, grandMA3), media servers (Resolume, Disguise), and most sound consoles.
TCP
Reliable, ordered delivery with automatic reconnect. Required by QLab and recommended when packet loss is unacceptable. ProdCom uses SLIP framing (OSC 1.1) and reconnects automatically with exponential backoff if the connection drops.
Receiving OSC
ProdCom can also listen for inbound OSC messages and use them as automation triggers. Enable the OSC server in Settings → OSC, choose a port, and select UDP, TCP, or both.
Use cases:
- A lighting console sends
/cue/go— ProdCom selects a channel or clears a transcript. - A stage manager's tablet sends
/standby/1— ProdCom starts listening on channel 1. - QLab fires an OSC cue — ProdCom sends a MIDI note to a downstream device.
Built-in Commands
When the OSC server is enabled, ProdCom automatically responds to messages under the
/prodcom/ address prefix — no automations required. This follows the
same zero-configuration pattern used by QLab, ETC Eos, grandMA3, and other professional tools.
Channel Commands
Control individual channels by 1-based index or slug (lowercase name, spaces replaced with hyphens).
| Address | Arguments | Description |
|---|---|---|
/prodcom/channel/next | — | Select the next channel |
/prodcom/channel/previous | — | Select the previous channel |
/prodcom/channel/count | — | Reply with channel count |
/prodcom/channel/list | — | Reply with index, slug, and name for each channel |
/prodcom/channel/{ch}/select | — | Select a specific channel |
/prodcom/channel/{ch}/send | s text | Send text to a channel's transcript |
/prodcom/channel/{ch}/clear | — | Clear a channel's transcript |
/prodcom/channel/{ch}/mark | — | Mark a channel's transcript as read |
/prodcom/channel/{ch}/name | — | Reply with the channel's slug and display name |
/prodcom/channel/all/clear | — | Clear all transcripts |
/prodcom/channel/all/mark | — | Mark all transcripts as read |
/prodcom/channel/selected/send | s text | Send text to the selected channel |
/prodcom/channel/selected/clear | — | Clear the selected channel's transcript |
/prodcom/channel/selected/mark | — | Mark the selected channel as read |
{ch} is a 1-based index (e.g. 1) or a slug (e.g.
stage-left).
Scroll Commands
| Address | Description |
|---|---|
/prodcom/scroll/up | Scroll the transcript up |
/prodcom/scroll/down | Scroll the transcript down |
/prodcom/scroll/current | Scroll to the current position |
Window & Flash
| Address | Arguments | Description |
|---|---|---|
/prodcom/window/show | — | Show the main window |
/prodcom/window/hide | — | Hide the main window |
/prodcom/flash | s text, f duration (opt), i repeats (opt) | Flash text on screen |
Font Commands
| Address | Description |
|---|---|
/prodcom/font/increase | Increase transcript font size |
/prodcom/font/decrease | Decrease transcript font size |
Automation Commands
Trigger automations by name or slug, and query the list of configured automations.
| Address | Arguments | Description |
|---|---|---|
/prodcom/automation/trigger | s name | Trigger an automation by display name |
/prodcom/automation/{slug}/trigger | — | Trigger an automation by slug |
/prodcom/automation/count | — | Reply with automation count |
/prodcom/automation/list | — | Reply with index, slug, and name for each automation |
/prodcom/automation/{slug}/name | — | Reply with the automation's display name |
Query & Discovery
| Address | Description |
|---|---|
/prodcom/ping | Replies with /prodcom/pong |
/prodcom/version | Replies with /prodcom/version/reply containing the app version |
Built-in commands execute first; any automation triggers on the same incoming message still fire independently — both run without conflict.
Common Device Examples
ETC Eos Family
Fire a cue: /eos/cue/1/fire
Set channel intensity: /eos/chan/1/param/intens with a Float32 argument
(0.0–1.0).
Default port: 8000 UDP. Enable OSC RX/TX in Eos Shell → Settings → Show Control → OSC.
QLab
Go on current cue: /go
Go on specific cue: /cue/42/start
Stop all: /stop
Default port: 53000 TCP. Enable OSC in QLab → Settings → Network → OSC Access.
grandMA3
Execute command: /cmd with a String argument (e.g.
"Go+ Executor 1").
Page change: /Page with an Int32 argument.
Default port: 8000 UDP. Enable in grandMA3 → Menu → In & Out → Protocols → OSC.
Resolume Arena / Avenue
Trigger clip: /composition/layers/1/clips/1/connect with Int32
1.
Master opacity: /composition/master/video/opacity with Float32 (0.0–1.0).
Default port: 7000 UDP. OSC is enabled by default in Resolume preferences.
Disguise (d3)
Play section: /d3/showcontrol/cue with a String cue name.
Next section: /d3/showcontrol/next
Default port: 8000 UDP. Enable in Disguise → Show Control Settings.
Activity Log
Monitor all OSC and MIDI traffic in real time with the built-in Activity Log. Open it from the Window menu or press ⌘⌥L.
The log shows:
- Inbound messages — OSC and MIDI events received by ProdCom.
- Outbound messages — OSC and MIDI messages sent by automation actions.
- Automation events — which automations fired, what they resolved, and any actions that were skipped (e.g. a dynamic channel target that didn't match).
- Connection events — TCP connect/disconnect, errors, and reconnection attempts.
Troubleshooting
Messages aren't reaching the destination
Check the Activity Log for send errors. Verify the destination host, port, and transport match the target device. For UDP, ensure no firewall is blocking the port. For TCP, confirm the device is listening and check the connection status indicator in Settings → OSC.
ProdCom isn't receiving OSC
Confirm the OSC server is enabled in Settings → OSC. Verify the port isn't in use by another application. Check that your sending device targets the correct IP and port.
TCP connection keeps dropping
ProdCom reconnects automatically with exponential backoff (1s → 30s cap). If drops are frequent, check network stability and ensure only one client is connecting to the target port. The health indicator in Settings → OSC shows current connection state.