Skip to content

Desuq Cafe

Documentation menu

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:

  1. Do nothing: the action persists after the section.
  2. Auto-revert: the system generates the reverse action (e.g., Mute → Unmute).
  3. 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:

FeatureDescription
Action Queuing33ms throttling (~30fps) ensures smooth keyframe animation while preventing spam
DeduplicationDuplicate actions in the same frame are merged
Batch RequestsMultiple actions sent as a single OBS request (up to 48 per batch)
Debounced Restore150ms cooldown prevents rapid state restoration during scrubbing
Unified RoutingAll 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

ProblemSolution
Actions not firingCheck the track is not muted. If scrubbing, also verify bFireActionsWhenScrubbing.
Red dot in track headerOBS is not connected. Connect via the Editor Subsystem or OBS Component.
State not restoringEnsure bRestoreStateOnTearDown is enabled on the track
Actions firing multiple timesNormal during rapid scrubbing. The queue throttles to a 33ms minimum.
Toast notification errorsCheck OBS is running and action parameters are valid