worxbend ~/streaming
OBS STUDIO · TWITCH · YOUTUBE · TWO-MACHINE SETUP

Your stream. Your terminal. Zero alt-tabs.

Seven small, sharp, open-source utilities for OBS Studio, Twitch and YouTube — built in Rust, Crystal and Go, terminal-first, no Electron in sight.

  • RUST · CRYSTAL · GO
  • SINGLE BINARIES
  • NO ELECTRON
  • OBS-WEBSOCKET 5
  • TWITCH IRC
  • YOUTUBE DATA API
  • MIT LICENSED
Explore the map GitHub ↗ 7 TOOLS · 3 LANGUAGES · 2 PLATFORMS · 0 BROWSER TABS
0 TOOLS
:0 WEBSOCKET LINK
0 ELECTRON APPS
0 DEFAULT PORT

Two machines, one link.

OBS runs on the rig that captures and encodes. These tools run on the machine you actually work on. Between them is OBS's own WebSocket server — so the machine under load never has to be the machine you touch. The chat and go-live tools skip the rig entirely and talk straight to Twitch and YouTube.

YOUR MACHINE
SceneDeck
obsctl-rs ▸ dashboard
● connected · obs 30.1 · 60 fps
▶ LIVE: Gameplay
scenes: intro · gameplay · brb
mic −12 dB ▮▮▮▮▯▯ · desktop −20 dB
$ obsctl scene switch BRB
{ "ok": true, "scene": "BRB" }
$ obsctl stream status
{ "live": true, "kbps": 6000 }
exit 0
CPU34%
FPS60.0
ENC2.1ms
NET0 DROPPED
viewer_42: gg that transition
mira: !uptime
twi-bot: live for 2h 14m
you: thanks <3
msm ▸ twitch + youtube
● both ready — start streaming in OBS
title: friday night refactor
twitch 142 viewers · youtube 38
key ●●●●●●●●●●●● · reused
@somechannel: first!
member_3y: super chat · £5
— new member: kata —
quota 6.2k/10k · every 12.4s
STREAMING RIG
OBS Studio REC
CAPTURING AND ENCODING.
BUSY, AND LEFT ALONE.
— TO TWITCH + YOUTUBE · RTMP
click any node
OBS-WEBSOCKET 5.X
COMMANDS OUT ▸
MONITOR
◂ SCENES, AUDIO, TELEMETRY
TITLE · TAGS · CATEGORY ▸
CHAT · IRC
CHAT · DATA API
RTMP ▸
CAPTURES SCREEN + AUDIO
WORKSTATION — WHERE YOU SIT
STREAMING RIG
DESTINATIONS

SAME MACHINE WORKS TOO — POINT THE TOOLS AT LOCALHOST (127.0.0.1:4455 BY DEFAULT) AND EVERYTHING BEHAVES THE SAME WAY.

Seven binaries, one workflow.

Each one does a single job well and speaks the protocol its job needs. Take all seven, or take the one you need.

Commands in. JSON out.

Every CLI call prints one envelope and exits with a code that means something — so your hotkeys and shell scripts can actually branch on the result.

~/streaming — obsctl running

Live in three steps.

This walks through obsctl-rs; the others follow the same shape.

  1. 01

    Turn on OBS's WebSocket server

    On the streaming rig, open Tools ▸ WebSocket Server Settings, enable the server and copy the password. OBS 28 and newer ship obs-websocket 5.x built in.

    OBS Studio ▸ Tools ▸ WebSocket Server Settings ▸ Enable
  2. 02

    Install the tool on your workstation

    One script, one static binary, no runtime to manage. Read it first if you'd rather not pipe a stranger into your shell.

    curl -fsSL https://github.com/worxbend/obsctl-rs/releases/latest/download/install.sh | sh
    read the script first ↗
  3. 03

    Point it at the rig and go

    Initialise the config, hand it the password, start the daemon that owns the socket, then open the dashboard.

    obsctl init export OBS_WEBSOCKET_PASSWORD='your_password' obsctl server --headless obsctl tui

    Want it always on? obsctl service install then systemctl --user enable --now obsctl.service.

Small tools that stay out of the way.

Nothing steals focus

No window jumping in front of the thing you are capturing. A pane, a hotkey, and you are back.

Single static binaries

Rust, Crystal and Go, linked against musl where it counts. Drop the file in ~/.local/bin and it runs.

One socket, one owner

A local daemon holds the WebSocket so the CLI and TUI never fight over the connection.

{}

Scriptable by design

JSON envelopes and honest exit codes. Bind a scene switch to a key, or branch on it in CI.

Load stays on the rig

Encoding happens where it should. Your workstation only sends commands and reads telemetry.

Yours to change

Every tool is MIT licensed, with themes, locales and configs meant to be edited.

Before you install.

Do I actually need two machines?

No. Two machines is the setup these tools were shaped around, but every one of them works against a local OBS. Point them at 127.0.0.1:4455 and nothing else changes.

Which version of OBS do I need?

OBS 28 or newer. That is when obs-websocket 5.x became part of OBS itself, so there is no plugin to install — just enable the server under Tools ▸ WebSocket Server Settings.

Is there anything with a GUI?

SceneDeck. It is a native GTK4 desktop app rather than a terminal tool — the same control surface, for when you want buttons instead of keys.

Does any of this work with YouTube?

Two of them are built for it. msm sets up a Twitch stream and a YouTube broadcast from one form, and yc reads YouTube live chat in a terminal pane. Neither goes through OBS — they talk to the platforms directly, so they work whether or not you use the rest of the toolkit.

Does msm start the stream for me?

No, and that is deliberate. It gets both platforms configured and then stops; you press Start Streaming in OBS when you are ready. If one platform fails to configure, the other is still set up and usable — the failure is shown in its own panel rather than rolling everything back.

Do I have to install all seven?

No. They are separate binaries, and only the OBS control tools share a protocol. Most people start with one control tool, add obs-stats when they want to watch for dropped frames, and pick up a chat client for whichever platform they actually stream to.

Why pipe a script into a shell?

Because it is the shortest path to a working binary. Every install command here links the raw script next to it so you can read exactly what it does first — or skip it entirely and grab a release tarball.

What does it cost?

Nothing. All five are MIT licensed and developed in the open on GitHub.