Requests

This page is reference material for building your own control panel. Anything that speaks the obs-websocket protocol can drive the playout with these nine commands — a Stream Deck, a tally system, a script of your own.

How they are sent

Requests go over the connection from the remote connection as a custom vendor request.

Vendor nameultimate-playout
Also registered asobs-playout — the old name; panels built with it keep working

A request that is accepted answers ok: true. When eight requests are already waiting to be carried out, the next one answers ok: false with a reason.

Which playout

Every request takes an optional playout:

ValueMeaning
14That playout, whatever is on screen
0, or left outThe playout being driven at that moment

The nine requests

RequestParametersDoes
goplayoutTakes the armed cue to air
stopplayoutStops that playout
arm_nextplayoutMoves the green marker one step down
arm_prevplayoutMoves it one step up
armnumber, playoutArms the cue with that number, without playing it
gotonumber, playoutArms that cue and plays it
recordon, playoutStarts or stops recording
streamon, playoutStarts or stops streaming
statusReports the playouts, see below

number is the number as it appears in the list: 3, 3.1, 3.1.2.

Recording and streaming

record and stream are the two that begin and end a broadcast, and they work

the same way.

on is optional. Send on: true or on: false to set it; leave the parameter out and it toggles. The reply only confirms the request; read status for the state afterwards.

Toggling is what you want on a physical button, and setting is what you want in a script — a script that toggles twice because a message went missing has stopped the recording it meant to start.

To read the state without changing anything, use status.

What status returns

count     how many playouts are switched on
active    which playout is being driven at that moment, 1..4 — what
          `playout: 0` resolves to
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" }, … ]
            recording     true while that playout records
            streaming     true while it streams
            live          true while something is on screen
            live_number   number of the cue on screen, "" when nothing is
            live_title    its title
            armed_number  number of the cue that will go on the next GO
            armed_title   its title

That is everything a panel needs to build itself and light itself: the names for its labels, the colour for its buttons, the cue list for its drop-downs, and the two markers for its feedbacks. The numbers in live_number and

armed_number are the same n as in cues, so a button can compare them

with its own pick.

The markers lag by up to a second. The program refreshes them on its one-second tick, not on the GO itself. A panel polling every second sees a change within a second or two, which is what a lamp on a button needs; do not build anything on it that needs to be exact to the frame.

Notes for implementers

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.

A go request and the GO hotkey do the same thing, as do the other pairs.

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.