overlay: OBS control window via WebSocket API (#773)

## Link to GitHub Issue or related Pull Request, if one exists
n/a

## Description of change
Adds an overlay window widget for controlling OBS over WebSocket.

Add new lines to the FPS widget that shows recording / streaming timers.

Show notifications for major state changes (stream started/stopped,
recording started/paused/resumed/stopped)

## Testing
This commit is contained in:
bicarus
2026-06-24 02:44:36 -07:00
committed by GitHub
parent 5c69e295ab
commit 451cbec0b9
19 changed files with 1680 additions and 25 deletions
+46
View File
@@ -52,6 +52,7 @@ static const std::vector<std::string> CATEGORY_ORDER_NETWORK = {
static const std::vector<std::string> CATEGORY_ORDER_OVERLAY = {
"General Overlay",
"Game Overlay",
"OBS Control",
};
static const std::vector<std::string> CATEGORY_ORDER_ADVANCED = {
@@ -3201,6 +3202,51 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
.type = OptionType::Bool,
.category = "Development",
},
{
// OBSWebSocketEnabled
.title = "OBS WebSocket Enable",
.name = "obsenable",
.desc = "Enables the in-game OBS Control overlay and its connection to the OBS Studio "
"obs-websocket (v5) server.",
.type = OptionType::Bool,
.category = "OBS Control",
},
{
// OBSWebSocketHost
.title = "OBS WebSocket Host",
.name = "obshost",
.desc = "Host name or IP address of the OBS Studio obs-websocket (v5) server used by "
"the in-game OBS Control overlay. Defaults to 127.0.0.1 when left empty.",
.type = OptionType::Text,
.category = "OBS Control",
},
{
// OBSWebSocketPort
.title = "OBS WebSocket Port",
.name = "obsport",
.desc = "Port of the OBS Studio obs-websocket (v5) server. Defaults to 4455 when left empty.",
.type = OptionType::Integer,
.category = "OBS Control",
},
{
// OBSWebSocketPassword
.title = "OBS WebSocket Password",
.name = "obspass",
.desc = "Password for the OBS Studio obs-websocket (v5) server. Leave empty if "
"authentication is disabled in OBS.",
.type = OptionType::Text,
.category = "OBS Control",
.sensitive = true,
},
{
// OBSWebSocketDebug
.title = "OBS WebSocket Debug",
.name = "obsdebug",
.desc = "Writes the OBS WebSocket client's internal connection diagnostics to the log. "
"Only enable this when troubleshooting connection problems.",
.type = OptionType::Bool,
.category = "OBS Control",
},
};
const std::vector<std::string> &launcher::get_categories(Options::OptionsCategory category) {