This plugin was heavily inspired by NOALBS. Huge thanks to the NOALBS team for their amazing work!
- Automatic Scene Switching - Switch scenes based on bitrate thresholds
- Multiple Server Support - Works with BELABOX, NGINX, SLS, MediaMTX, and more
- RTT Monitoring - SRT round-trip-time based switching
- Twitch Chat Integration - Control scenes via chat commands
- Configurable Triggers - Set low bitrate, offline, and RTT thresholds
- Optional Scenes - Starting, ending, privacy, and refresh scenes
- Download the latest release from Releases
- Extract the zip file
- Copy contents to your OBS installation:
BitrateSceneSwitch.dll→C:\Program Files\obs-studio\obs-plugins\64bit\
- Restart OBS Studio
- Open OBS Studio
- Go to Tools → Bitrate Scene Switch
- Configure your stream server and thresholds
- Select your scenes and click Save
Control the switcher via Twitch chat (requires setup in Chat tab):
| Command | Description |
|---|---|
!live |
Switch to Live scene |
!low |
Switch to Low scene |
!brb |
Switch to BRB/Offline scene |
!ss <name> |
Switch to any scene (case-insensitive) |
!refresh |
Refresh scene (fix issues) |
!fix |
Refresh media sources |
!status |
Show current bitrate status |
!trigger |
Force switch check |
!start |
Start streaming |
!stop |
Stop streaming |
BitrateSceneSwitch registers as an obs-websocket vendor, allowing external tools, bots, and overlays to control the plugin remotely. Requires obs-websocket (included with OBS 28+).
All requests use the vendor name BitrateSceneSwitch and are sent via the obs-websocket CallVendorRequest message.
| Request | Description | Parameters | Response |
|---|---|---|---|
GetSettings |
Get all plugin settings | none | enabled, onlyWhenStreaming, instantRecover, retryAttempts, triggers, scenes |
SetSettings |
Update plugin settings (partial updates supported) | Any settings field (e.g. enabled, triggerLow, sceneNormal) |
success: true |
GetStatus |
Get live status | none | currentScene, isStreaming, bitrateKbps, rttMs, isOnline, serverName, statusMessage, enabled |
SwitchScene |
Switch to a specific scene | sceneName (string, required) |
success: true/false, error if failed |
StartStream |
Start streaming | none | success: true/false, error if already streaming |
StopStream |
Stop streaming | none | success: true/false, error if not streaming |
GetVersion |
Get plugin version | none | version, vendor |
{
"op": 6,
"d": {
"requestType": "CallVendorRequest",
"requestId": "1",
"requestData": {
"vendorName": "BitrateSceneSwitch",
"requestType": "GetStatus"
}
}
}const resp = await obs.callVendorRequest("BitrateSceneSwitch", "GetStatus", {});
console.log(resp.bitrateKbps, resp.rttMs, resp.currentScene);| Server | Stats URL Example |
|---|---|
| BELABOX | https://cloud.belabox.net/stats |
| NGINX RTMP | http://localhost:8080/stat |
| SRT Live Server | http://localhost:8181/stats |
| MediaMTX | http://localhost:9997/v3/paths/get/ |
| Node Media Server | http://localhost:8000/api/streams |
| Nimble | http://localhost:8082 |
| IRLHosting | Your server stats URL |
cmake -B build -S .
cmake --build build --config ReleaseGPL-2.0
v1.0.3 | Powered by IRLHosting

