Skip to content

Fix three obs-websocket vendor-request issues (replay filename, disabled filter, error reporting) - #184

Open
r-bart wants to merge 4 commits into
exeldro:masterfrom
r-bart:pr/websocket-fixes
Open

Fix three obs-websocket vendor-request issues (replay filename, disabled filter, error reporting)#184
r-bart wants to merge 4 commits into
exeldro:masterfrom
r-bart:pr/websocket-fixes

Conversation

@r-bart

@r-bart r-bart commented Jul 12, 2026

Copy link
Copy Markdown

Three small, self-contained fixes to the source-record obs-websocket vendor requests, each verified via a smoke test (tests/smoke_websocket.py, 5/5).

replay_buffer_start wrote the wrong setting key

It wrote the filename into filename_formatting (the recording filename), clobbering it, instead of replay_filename_formatting. Now writes replay_filename_formatting.

record_stop re-enabled a disabled filter

Stopping/pausing via the vendor API re-enabled a filter the user had explicitly disabled. Now it leaves a disabled filter disabled.

pause/split/chapter failures reported success

record_pause (and unpause/split/chapter) on an inactive output returned success with no error. Now returns success:false with an error string.

Testing

tests/smoke_websocket.py drives the vendor requests and asserts all three via filter-state inspection.


Developed with AI assistance (Claude); verified against the libobs / obs-websocket API.

r-bart and others added 4 commits July 12, 2026 12:06
… (N7)

start_replay_buffer_source was a copy of start_record_source that never
adapted the settings key: it wrote the request's filename into
filename_formatting (the record key) instead of replay_filename_formatting.
Replays kept using the default name while the filter's record path was
clobbered, so a later record_start with no filename recorded with the
replay-intended name. The stale restart-detection also force-stopped every
output, flushing the live replay buffer for nothing. Write the correct key
and drop the restart block — replay format applies hot.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sts (N2)

get_source_record_filter() unconditionally re-enabled the filter before
returning it, even for record_stop / record_pause / stream_stop and the
other create=false paths. A user who disabled a filter (eye icon or the
source_record.disable hotkey) that still had a latched record/stream mode
would see it resume the moment a "stop" request arrived. Gate the
re-enable on create=true so only the start_* paths (which intend to run an
output) can flip the filter back on.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…es (B18e)

pause/unpause/split/add_chapter returned false without ever writing "error"
into the response, so a client saw success:false with a stale or empty error
message. Set a specific error string on the "no active record output" and
failed proc-call paths. (Per-source error aggregation for the no-"source"
fan-out is deferred to the enumeration-helper refactor.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tests/smoke_websocket.py drives the source-record vendor requests and asserts the
three fixes in this branch via filter-state inspection: replay_buffer_start writes
replay_filename_formatting (not filename_formatting), record_stop does not
re-enable a disabled filter, and record_pause on an inactive output returns
success:false with an error string. Needs only obsws-python.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant