Advanced Topics
This page covers the behaviors that matter once you’re driving OBS hard from the timeline: how State sections revert, what state gets restored on stop, the performance safeguards, and how to debug it all.
Exit Actions (State-type only)
For State-type actions (see Section Types), configure what happens when the section ends:
- Do nothing: the action persists after the section.
- Auto-revert: the system generates the reverse action (e.g., Mute → Unmute).
- Custom exit action: specify a different action to perform.
Note: Auto-reverse exit actions are generated only when reversion is enabled and no explicit exit action is set. Backwards playback inverts entry/exit semantics: the section’s “exit” action runs at what is, in reverse, the section start.
Pre-Animated State Restoration
When bRestoreStateOnTearDown is enabled, the track captures OBS state before playback and restores it when:
- Sequence playback stops.
- Scrubbing away from sections.
- The sequence is closed.
Currently restored:
- Outputs: Recording (active, paused), Streaming, Virtual Camera, Replay Buffer.
- Scenes: Current program scene.
- Scene Items: Visibility, Lock state, Blend mode (via Continuous State tracks).
- Scene Item Transforms: Position, Scale, Rotation, Crop (via OBS Transform Track).
- Audio: Input mute state, Input volume (dB) (via OBS Volume Track), Input balance (via OBS Balance Track).
- Transitions: Current transition, Transition duration (via OBS Transition Duration Track).
- Studio Mode: Studio mode enabled, Preview scene.
- Filters: Filter enabled state, Filter setting values (via OBS Filter Setting Track).
- Sources: Text content, Browser URL, Image file, Media file + looping, Color (via OBS Color Source Track).
- Media: Cursor position (via OBS Media Cursor Track).
Not restored (instant actions):
- Recording split/chapters, Replay buffer save, Stream captions.
- Media input actions (play/pause/stop), Media cursor position.
- Studio mode transition trigger.
- Screenshots (can’t un-take a photo).
Note: The pre-animated restore is debounced (a ~150ms cooldown, applied per-section rather than per-input). Two sections ending within that window can mask a legitimate state change. Capture happens against the last cached OBS state, not a fresh query, so it can be stale. Remember that a keyframeable track’s target (
InputName/source) lives on the track, not the section.
Performance Features
The Sequencer integration includes several optimizations:
| Feature | Description |
|---|---|
| Action Queuing | 33ms throttling (~30fps) ensures smooth keyframe animation while preventing spam |
| Deduplication | Duplicate actions in the same frame are merged |
| Batch Requests | Multiple actions sent as a single OBS request (up to 48 per batch) |
| Debounced Restore | 150ms cooldown prevents rapid state restoration during scrubbing |
| Unified Routing | All keyframeable tracks route through the action queue for consistent throttling/batching |
Editor Notifications
When actions fail, toast notifications appear in the editor with error details. Success notifications can be enabled for major actions (Start/Stop Record, Start/Stop Stream).
Example Use Cases
Cinematic Recording
[0:00] StartRecord section
[0:05] SwitchScene("CloseUp") section
[0:15] SwitchScene("WideShot") section
[0:30] StopRecord section
Live Show Automation
[Intro] SwitchScene("TitleCard") + StartStream
[Main] SwitchScene("MainCamera") + UnmuteInput("Mic")
[Outro] SwitchScene("EndCard") + MuteInput("Mic")
[End] StopStream
Replay Highlights
[Boss Defeated] SaveReplayBuffer section
[Victory Screen] SwitchScene("Victory") section
C++ Access
// The Sequencer system uses these key classes:
#include "Sequencer/MovieSceneOBSTrack.h"
#include "Sequencer/MovieSceneOBSSection.h"
#include "Sequencer/InhyeongOBSSequencerTypes.h"
// Action metadata is available via the registry
const FOBSSequencerActionMetadata* Meta = FOBSSequencerActionRegistry::GetMetadata(EOBSSequencerAction::SwitchScene);
if (Meta && Meta->bRequiresTargetName)
{
// This action needs a target name (scene name)
}
// Get all actions in a category
TArray<EOBSSequencerAction> RecordingActions =
FOBSSequencerActionRegistry::GetActionsForCategory(EOBSSequencerActionCategory::Recording);
See the Action Reference for the full list of EOBSSequencerAction values.
Sequencer Troubleshooting
| Problem | Solution |
|---|---|
| Actions not firing | Check the track is not muted. If scrubbing, also verify bFireActionsWhenScrubbing. |
| Red dot in track header | OBS is not connected. Connect via the Editor Subsystem or OBS Component. |
| State not restoring | Ensure bRestoreStateOnTearDown is enabled on the track |
| Actions firing multiple times | Normal during rapid scrubbing. The queue throttles to a 33ms minimum. |
| Toast notification errors | Check OBS is running and action parameters are valid |