Getting started

What is Rundown Studio?Create an account

Rundown

Rundown basicsColumnsTemplatesSettingsGaps and overlapsTrashCell historyMentionsText variablesRunning a showImport CSV rundown

Event

Event basicsSharing events

API

Getting startedAPI reference ↗Build a rundown from CSVWorking with cell contentLive updates over SSEAdvanced usageError referenceMigrating from v0API v0 (deprecated)

Integrations

Companion ModuleBitfocus ButtonsOBS StudioOnTheAir VideoProPresenterQLab

Sharing and outputs

Read-only rundownEditable rundownQuick access codeOutputPrompterPDF exportCSV export

Account

Your teamSubscription and invoices

Updates

Changelog
Docs Integrations

OBS Studio

OBS Studio

Switch OBS scenes straight from your rundown.

OBS Studio is the free, open-source standard for streaming and recording. It has an official Bitfocus Companion module, and so does Rundown Studio, so Companion can sit between the two: your rundown says which scene belongs to a cue, and Companion tells OBS to switch to it.

The result is one action for the operator. Move to the next cue in Rundown Studio and OBS lands on the right scene, with nobody hunting through a scene list mid-show.

Rundown Studio and OBS Studio running side by side
The SCENE column names match the scenes in OBS, so the active cue picks the scene

How it works

The two modules divide the job between them:

  1. You add a SCENE column to your rundown. In each cue, the cell holds the name of the OBS scene that cue should be on.
  2. The Rundown Studio module publishes that cell as a Companion variable for whichever cue is currently active.
  3. A Companion trigger watches that variable. When it changes, it tells OBS to switch to the scene with that name.

Because the trigger keys off the active cue, the rundown is the single source of truth. Rearrange your running order or swap a scene name in the rundown and OBS follows, with no button remapping.

Before you start

You’ll need:

  • Companion running on a machine that can reach the computer running OBS.
  • OBS Studio 28 or later. The obs-websocket server the module uses is built in from version 28 onwards, so there’s no plugin to install.
  • Your Rundown Studio API token and rundown ID.

1. Turn on the OBS WebSocket server

In OBS, go to Tools → WebSocket Server Settings and tick Enable WebSocket server under Plugin Settings.

Enabling the WebSocket server in OBS
WebSocket Server Settings sits under the Tools menu

Further down the same window, Server Settings holds the Server Port - 4455 by default - and the password. Click Show Connect Info to reveal it, and keep the window open: you’ll paste both into Companion in a moment.

Leave authentication enabled if OBS is on a shared network. On a closed show network you can untick Enable Authentication to save a step, but anyone who can reach the machine can then drive your OBS.

2. Set up the SCENE column

In your rundown, add a column named SCENE. See Columns if you haven’t added one before.

In every cue, put the name of the OBS scene that cue should be on. The name has to match the scene in OBS exactly - same spelling, same capitalisation, no stray spaces. Leave the cell empty on cues that shouldn’t change the scene.

A rundown with a SCENE column
Two cues, one on the camera scene and one on video, with an empty cell where the scene shouldn’t change

Tip: The column has to be public for the module to publish it as a variable, and the name is what the variable is built from. A column called SCENE becomes $(rundown-studio:currentcue_scene).

3. Add the Rundown Studio module

In Companion, open Connections and add the Rundown Studio module, then give it your API Token and Rundown ID.

API tokens are generated from the API section of the Rundown Studio dashboard. Only team admins can generate or regenerate a token, but anyone on the team can read and use it.

Generating an API token in the dashboard
Copying your API token from the dashboard

The rundown ID is in the URL of any rundown. For example, if your rundown URL is:

https://app.rundownstudio.app/rundown/pLRbtKC410HFjBVVcaT1

then the rundown ID is pLRbtKC410HFjBVVcaT1.

Finding the rundown ID in the URL
The rundown ID is the last part of the rundown URL

The full module setup is covered in Companion Module.

Check the variable

Once the connection is up, open the Variables tab and find the Rundown Studio module. You should see currentcue_scene alongside the built-in variables, described as Current Cue: SCENE and holding the SCENE cell of whichever cue is active. If it’s missing, check the column is public and the name is spelled as you expect.

The currentcue_scene variable in Companion
Sitting on the camera cue, the variable reads camera - copy the name with the button beside it

This is the check worth doing before you build anything else. If the value here follows your rundown as you move between cues, the hard part is done and the trigger is a formality.

4. Add the OBS Studio module

Add the OBS: Studio module as a second connection. It needs:

  • Server IP / Hostname - the address of the machine running OBS. Use 127.0.0.1 if Companion is on that same machine.
  • Server Port - 4455 unless you changed it.
  • Server Password - from the WebSocket settings, if authentication is on.
The OBS Studio module configured in Companion
Pointing the module at OBS on the same machine, on the default port

The Label is how this connection appears in actions and variables later. The default obs is fine, but if you’re running more than one OBS machine, name them something you’ll recognise under pressure - obs-stage, obs-stream - because that label is what you’ll be picking from a dropdown mid-build.

Once connected, the module pulls in your scenes and sources, and its variables list fills with what it can see. That list is a handy way to check the scene names you’ve typed into the SCENE column.

If the connection shows an error, check the IP address first, then the password. A blank password in Companion with authentication switched on in OBS is the most common cause.

5. Build the trigger

This is the piece that ties the two together. In Companion, go to Triggers and add a new trigger.

Event: choose Variable value changes and set it to $(rundown-studio:currentcue_scene). The trigger now fires whenever the active cue’s SCENE cell is different from the last one.

Condition: add a Variable value condition so an empty cell doesn’t fire anything. Set it to check that $(rundown-studio:currentcue_scene) is not equal to an empty value. Without this, moving onto a cue with no scene sends a switch request for a scene named nothing.

Action: on the Actions tab, add Scene - Set Program Scene from your OBS connection. Rather than picking a scene from the dropdown, click the $ button beside the Scene field to switch it to an expression, and put in $(rundown-studio:currentcue_scene).

The Set Program Scene action using the rundown variable
The Scene field holds the variable, not a fixed scene - the blue chip shows it currently resolving to video

That blue chip under the Scene label is the useful part: it previews what the variable resolves to right now. If it shows the scene name you expect, the action will fire correctly. If it’s empty or shows something odd, fix that before moving on.

The dropdown is the trap here. Picking a scene from the list hard-codes one scene and the trigger will send that same scene for every cue. The whole point is that the field holds the variable, so it changes with the rundown.

That’s the whole integration. Move to a cue in Rundown Studio, the SCENE variable updates, the trigger fires, and OBS cuts to that scene.

Pressing Next cue in Rundown Studio switching the scene in OBS
One press of Next cue moves the rundown and OBS follows it to the camera scene

From here on the operator only touches the rundown. The scene list in OBS is something to glance at, not something to drive.

Preview first, then take

If you’d rather not cut straight to air, OBS Studio Mode gives you a preview step. Swap Set Program Scene for Set Preview Scene in the trigger, so moving through the rundown queues the next scene up in preview without changing what’s on air. The operator then presses a Companion button running the OBS Transition action when they’re ready.

This is worth doing on any show where the rundown might move before the picture should.

Going the other way

The same two modules work in reverse, letting OBS drive the rundown. Build a Companion button that runs the OBS Set Program Scene action and the Rundown Studio Go to next cue action together, and one press cuts the scene and moves the rundown on.

The Rundown Studio module’s own variables - $(rundown-studio:currentcue_timeleft_mmss) and the rest - sit alongside the OBS ones on the same page, so one surface shows both your running order and your stream status.

Useful extras

Some other things worth putting on the same page:

  • Titles from the rundown. Add a LOWER THIRD column, then use the OBS Set Source Text action in a second trigger to push its value into a text source. Your presenter names live in the rundown and appear on screen automatically.
  • Start recording with the show. Add the OBS Recording action to a trigger on the Rundown Studio module’s running state, so hitting start on the rundown also rolls the record.
  • Stream status on the surface. The OBS module’s streaming and recording feedbacks colour a button red when you’re live, so the director can see stream health next to the rundown timings.
  • A second column. If some cues need a scene queued but not taken, add a SCENE MODE column and use its variable in a trigger condition to pick between Set Program Scene and Set Preview Scene.

Troubleshooting

If a cue doesn’t switch its scene, work down the chain:

  • Is the variable right? Check $(rundown-studio:currentcue_scene) in Companion’s Variables tab while sitting on the cue. If it’s empty or wrong, the problem is in the rundown, not Companion.
  • Does the scene name match? Names must match the OBS scene exactly. A trailing space or different capitalisation is enough to miss.
  • Have the scenes changed? If you’ve added or renamed scenes since Companion connected, the module re-reads them automatically, but a quick disable and re-enable of the connection forces it.
  • Is the connection up? Both modules should show as connected in the Connections list rather than an error state.
  • Is OBS in Studio Mode? Set Program Scene cuts straight to air in either mode, but if you’re expecting a preview step you need Set Preview Scene and Studio Mode switched on.

Turning on Verbose Mode in the Rundown Studio module’s advanced config writes more detail to the debug log, which usually points straight at the problem.