This page is reference material for building your own control panel. If you use Companion, you do not need it: that module speaks this protocol already.
How they are sent
Requests go over the connection from the remote connection as a custom vendor request.
| Vendor name | ultimate-playout |
| Also registered as | obs-playout — the old name, so panels built earlier keep working |
Every request answers with ok: true.
Which playout
Every request takes an optional playout:
| Value | Meaning |
|---|---|
1–4 | That playout, whatever is on screen |
0, or left out | The playout being driven at that moment |
Leaving it out is the behaviour panels had before playouts could be addressed individually, so old buttons keep doing what they did.
The seven requests
| Request | Parameters | Does |
|---|---|---|
go | playout | Takes the armed cue to air |
stop | playout | Stops that playout |
arm_next | playout | Moves the green marker one step down |
arm_prev | playout | Moves it one step up |
arm | number, playout | Arms the cue with that number, without playing it |
goto | number, playout | Arms that cue and plays it |
status | — | Reports the playouts, see below |
number is the number as it appears in the list: 3, 3.1, 3.1.2.
What status returns
count how many playouts are switched on
playouts one entry per playout:
slot 1..4
name the output name
color that playout's accent colour
cues [ { n: "3.1", t: "Announcement 1" }, … ]
That is deliberately everything a panel needs to build itself: the names for its labels, the colour for its buttons, and the cue list for its drop-downs. A panel should not have to be told your rundown — it can ask.
Notes for implementers
Actions run on the program’s own thread. A request returns as soon as it is accepted, not when the cue is on air. Do not treat the answer as confirmation that the picture changed; read status if you need to know.
Hotkeys and requests share one layer. A go request and the GO hotkey are the same call, so behaviour cannot drift between them.
Numbers move. A cue’s number changes when the list changes shape. A panel that stores numbers should refresh them from status rather than assume last week’s are still right.