OBS WebSocket Plugin for Unreal Engine
Why This Exists
Wanted to control OBS directly from Unreal Engine — switch scenes based on gameplay, automate recording, save replay highlights, sync media playback with Sequencer timelines. Nothing on the Marketplace covered even half of what the OBS WebSocket protocol can do.
Scope
95% coverage of the obs-websocket 5.x protocol. The only things intentionally left out are hotkey triggering (OBS devs explicitly recommend against it), diagnostic endpoints, and extremely niche features like vendor APIs and deinterlace settings.
Multiple Entry Points
Built five different ways to interact with OBS depending on your use case:
- OBS Component — drop on any Actor, configure in Details panel, zero code
- Trigger Volume — automatic OBS actions when actors enter/exit areas
- Sequencer Track — timeline-based control synced to Level Sequences
- Game Subsystem — global access from anywhere in game code
- Editor Subsystem — control OBS from the editor without entering Play mode
Sequencer Integration
This was the most complex part. Four track paradigms:
- Event Trigger — discrete actions at specific timeline points (start recording, switch scene, save replay)
- Keyframeable — smooth interpolation via curve editor (volume fades, transform animation, color shifts)
- Continuous State — hold a state while playhead is inside a section (mute during cutscene, force visibility)
- Media Sync — OBS media cursor follows Sequencer timeline with drift correction
33ms action throttling, deduplication, batch requests (up to 48 per batch), and pre-animated state restoration when playback stops.
Take Recorder Sync
Experimental integration that auto-starts OBS recording when Take Recorder begins, creates chapter markers from marked frames, and logs file correlation between take assets and OBS recordings. Pre-roll and post-roll support to compensate for WebSocket latency.
Status
Feature-complete. What remains is QA testing and fixing edge cases in the Details panel UI. Planning for Unreal Marketplace release once that’s done.