SceneDeck — back to top
v0.1.21 Install

OBS Studio remote · Native Linux · v0.1.21

Stream from
one machine.
Control it from another.

SceneDeck is a native GTK4 control surface for OBS Studio. Scenes, audio and live telemetry for your whole session — driven from the computer you actually work on.

$ sudo snap install scenedeck
SceneDeck Profile: Streaming · Collection: Main
Connected
STREAM RECORD 60.0 fps 6000 kb/s CPU 4.2% 0 dropped

Illustration of the SceneDeck interface. Figures are representative, not a live feed.

Four things that
break a stream.

  1. 01

    The alt-tab tax

    Your rig runs OBS. You run everything else — the code, the deck, the game — on a different machine. Every scene switch costs you a context switch.

  2. 02

    A scene list out of control

    Real setups fill with utility scenes, camera-only scenes, overlays and source wrappers. Things that belong inside other scenes, and should never be clicked live by accident.

  3. 03

    Fighting audio mid-stream

    The input you need to mute is nested three scenes deep, and the slider you must not touch is sitting right next to it.

  4. 04

    Flying blind

    Frames are being dropped somewhere, and you will find out from chat.

01 / Live & Inventory

Only the scenes you actually switch to.

Tag scenes by role once. The Live page then shows only your primary scenes, as cards, with your own accent colour behind each one. One click sends a scene to program. No renaming your collection. No restructuring it.

Live · Primary scenes

Program: Main Cam

Scene accent colour

Six roles, stored on your machine

Primary, Secondary, Module, Raw, Debug and Archive. Roles live in SceneDeck's own local registry — your OBS scene collection is never touched.

  • Primary Live-switchable program scene
  • Secondary Valid scene, hidden from Live by default
  • Module Reusable nested building block
  • Raw Source wrapper — a leaf in the graph
  • Debug Temporary, never on a live path
  • Archive Preserved, out of the workflow

Set it up once

Inventory is where you tell SceneDeck what your scenes are for. Assign a role, assign an accent colour, and drag them into an order that sticks — that order is the order the Live page uses.

Export and import the whole registry as YAML

02 / Stats

Flying blind
is a choice.

The Stats page is a live instrument panel for your OBS session — gauges and charts, updating while you work, on the machine that is not busy encoding.

Streaming bitrate (kb/s)
6000
Average frame render time (ms)
3.4

It reflows. The Stats page rearranges for narrow windows, so it still works parked in a column beside your editor.

And it never leaves. Connection state, stream and record status, FPS, streaming bitrate, OBS CPU usage and dropped frames sit in the status bar on every single page.

Figures on this page illustrate the Stats layout. They are not a live feed.

03 / Mixer

The mixer follows the scene.

Global audio first, then every audio-capable input in the active scene — including inputs nested inside other scenes and groups. Mute instantly. Ride levels on compact vertical sliders. Lock a slider so you never nudge it on air.

The Mixer is a page of its own, with three modes: Active follows the OBS program scene, Selected inspects a scene without following OBS, and Pinned holds one scene no matter what goes to program.

  • It reaches into nested scenes

    If an input is buried inside a scene that is itself inside your program scene, it still shows up in the mixer. You do not have to go find it.

  • The lock is the point

    Locking a card freezes its slider locally. The fader stops responding to pointer and keyboard, so the one level you must not touch cannot be touched.

    Try the lock on any channel

04 / Graph & Doctor

See what is inside what.

Graph

The Graph page draws your nested scene dependencies — which scenes are embedded inside which. The collection you have been building for eighteen months, as a diagram, in one screen.

Directed edges — a parent scene nesting a child scene

Doctor

The Doctor page runs structural diagnostics across your scene roles and your scene dependency structure, and tells you what it found.

  • Every scene in the registry still exists in OBS
  • A scene in the collection has no assigned role
  • A Primary scene nests a Debug scene
  • Dependency cycle detected between two scenes
  • No Raw scene nests another scene

Each finding carries a suggested fix

05 / Settings

Your rig, your rules.

Connection

Point SceneDeck at your OBS host and port — 127.0.0.1:4455 by default — and connect. Your password is stored in the system Secret Service keyring. Never in plaintext, never in a config file.

Stored in the system keyring

Appearance

Follow the system colour scheme, or pin light or dark. Choose a built-in theme family, or point SceneDeck at your own light and dark CSS files.

  • Studio Purple
  • Nord
  • Dracula-inspired
  • Stream Red
  • Solarized Dark
  • Ubuntu Violet

While connected

Switch OBS profiles and scene collections straight from the SceneDeck header. Start and stop streaming and recording from the sidebar, on any page.

Internationalised with Fluent · English is the fallback locale

Output safety

Going live and stopping a recording are the two clicks you cannot take back, so each of the four output actions can ask first. Turn the confirmations on or off independently — start stream, stop stream, start recording, stop recording.

Off by default for recording, on for the stream

The real thing

Screenshots.

The actual application, connected to OBS 32.1.2. Everything above this point is a rebuild in HTML so it can theme with the page; these are not.

Live — scenes, outputs and the audio for the active scene
Inventory — assign roles, export the registry as YAML
Settings — connection, and the output confirmations

Not Electron.
Not a web wrapper.

SceneDeck is a single small Rust binary built with GTK4 and libadwaita. It looks and behaves like the rest of your desktop because it is built with the same toolkit your desktop is.

Language
Rust 2021
Toolkit
GTK4 + libadwaita
Licence
MIT
Architectures
amd64 · arm64

One GTK main thread owns every widget. A Tokio runtime owns every OBS WebSocket call. Events cross back over an mpsc channel, polled every 50 ms. That boundary is why the interface does not stutter when the network does.

06 / Install

Patch it in.

Five ways in, on both amd64 and arm64. All of them are one command.

Install from the Snap Store

The shortest path, and the one that keeps itself up to date.

$ sudo snap install scenedeck
Get it from the Snap Store

Every archive is published on the GitHub Releases page for v0.1.21.

Spec sheet

What it needs, and what it does not do.

OBS Studio
28 or newer — the WebSocket server is built in from 28
Desktop
Any Linux desktop with GTK4 and libadwaita
Connection
OBS WebSocket, 127.0.0.1:4455 by default
Password storage
The system Secret Service keyring
Does SceneDeck have to run on the same machine as OBS?

No — that is the point. Run OBS on your streaming rig and SceneDeck on whatever you are actually working on, and point it at the rig's host and port.

Do I have to rename or restructure my scenes?

No. Roles and accent colours are stored locally by SceneDeck. Your OBS scene collection is untouched.

Where is my OBS password kept?

In your system's Secret Service keyring. It is never written in plaintext and never stored in the config file.

Can I use my own colours?

Yes. There are built-in light and dark theme families, and you can point SceneDeck at your own light and dark CSS files.

Is it translated?

SceneDeck is internationalised with Fluent, and English is the fallback locale. Translations are welcome.

Something is wrong.

Open an issue on GitHub. This is a single-developer project, and bug reports are read.