Agent skill

Ue Sequencer Cinematics

by quodsoler in quodsoler/unreal-engine-skills

A skill your agent uses when playing Level Sequences from C++, building cutscenes or in-game camera moments, binding actors to sequence tracks at runtime, wiring Sequencer event tracks, or rendering…

MITAuto-check passedGame Development

Install Ue Sequencer Cinematics

skills CLI
$ npx skills add quodsoler/unreal-engine-skills --skill ue-sequencer-cinematics -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install quodsoler/unreal-engine-skills ue-sequencer-cinematics --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/quodsoler/unreal-engine-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ue-sequencer-cinematics .claude/skills/ue-sequencer-cinematics && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ue-sequencer-cinematics
GitHub stars
362
Token cost
~7.3k tokens
SKILL.md length
1,728 words
Files
2 (incl. references)
Skills in repo
31
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when playing Level Sequences from C++, building cutscenes or in-game camera moments, binding actors to sequence tracks at runtime, wiring Sequencer event tracks, or rendering…

  • Playing Level Sequences from C++
  • SKILL.md covers Context, Build.cs Modules, Runtime vs Editor and Playing a Level Sequence, plus 8 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Building cutscenes

What it does

Ue Sequencer Cinematics is an agent skill from quodsoler/unreal-engine-skills. Use when playing Level Sequences from C++, building cutscenes or in-game camera moments, binding actors to sequence tracks at runtime, wiring Sequencer event tracks, or rendering with Movie Render Graph. Also use when the user mentions 'Sequencer', 'LevelSequence', 'ALevelSequenceActor', 'ULevelSequencePlayer', 'CreateLevelSequencePlayer', 'cutscene', 'camera cut', 'event track', 'ULevelSequenceDirector', 'SetBindingByTag', 'spawnable', 'possessable', 'CineCamera', 'Movie Render Queue', or 'MRQ'. For animation…

Its SKILL.md is about 7.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/sequencer-patterns.md`).

It sits in Game Development. It works with C++. The repository describes itself as: Unreal Engine C++ skills for AI coding agents. 27 skills covering gameplay, rendering, networking, animation, and more. Works with Claude Code, Cursor, Windsurf, and any agent… The licence is MIT.

When your agent uses it

  • Playing Level Sequences from C++
  • Building cutscenes
  • In-game camera moments
  • Binding actors to sequence tracks at runtime

Example prompts

  • “Sequencer”
  • “LevelSequence”
  • “ALevelSequenceActor”
  • “/ue-sequencer-cinematics”

What it can do on your machine

Read from SKILL.md and the folder at commit f3742d7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are cpp and csharp).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ue Sequencer Cinematics loads about 7.3k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 168 tokens; SKILL.md has 1,728 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~168
When it runs · the whole SKILL.md, loaded when a task matches
~7.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~16k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from quodsoler/unreal-engine-skills at commit f3742d7, republished under its MIT licence (© quodsoler). 1,728 words, ~7,326 tokens.

Download SKILL.mdSave it as .claude/skills/ue-sequencer-cinematics/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
ue-sequencer-cinematics
description
Use when playing Level Sequences from C++, building cutscenes or in-game camera moments, binding actors to sequence tracks at runtime, wiring Sequencer event tracks, or rendering with Movie Render Graph. Also use when the user mentions 'Sequencer', 'LevelSequence', 'ALevelSequenceActor', 'ULevelSequencePlayer', 'CreateLevelSequencePlayer', 'cutscene', 'camera cut', 'event track', 'ULevelSequenceDirector', 'SetBindingByTag', 'spawnable', 'possessable', 'CineCamera', 'Movie Render Queue', or 'MRQ'. For animation tracks, see ue-animation-system; for gameplay cameras and shakes, see ue-gameplay-cameras; for sequence audio, see ue-audio-system.
metadata.version
2.0.0
metadata.engine
5.8

UE Sequencer and Cinematics

Target engine: UE 5.8. APIs below are verified against the 5.8 headers; older forms are listed under "Deprecated — do not use".

Sequencer spans three runtime modules plus a plugin. MovieScene holds the data model and the player base class, MovieSceneTracks holds the concrete track and section types, LevelSequence holds the asset, actor, player and director, and CinematicCamera holds the cine camera and camera rigs. Offline rendering lives in the Movie Render Queue plugin (MovieRenderPipelineCore for runtime, MovieRenderPipelineEditor for the editor queue UI); it is disabled by default and must be enabled in the .uproject.

Context

Read .agents/ue-project-context.md if it exists (module names, conventions, enabled plugins, GAS/networking setup). Do not stop if it is missing.

Identify the area from the request and the codebase. Ask only when two plausible readings would produce different code.

Request is about…Go to
Which modules to add to Build.csBuild.cs Modules
What C++ can do at runtime vs editor-onlyRuntime vs Editor
Starting, stopping, seeking, looping a sequencePlaying a Level Sequence
Pointing sequence tracks at gameplay actorsBinding Actors at Runtime
Calling C++ from a key on the timelineSequencer Event Tracks
Tracks, sections, sub-sequences, frame mathMovieScene Data Model
Cine camera setup, focus, rails and cranesCine Cameras and Camera Rigs
Rendering frames or video to diskMovie Render Graph
Full worked cutscene, multiplayer and rig examplesSequencer runtime patterns

Build.cs Modules

csharp
PublicDependencyModuleNames.AddRange(new string[]
{
    "LevelSequence",    // ULevelSequence, ALevelSequenceActor, ULevelSequencePlayer, ULevelSequenceDirector
    "MovieScene",       // UMovieScene, UMovieSceneSequencePlayer, FMovieSceneObjectBindingID
    "MovieSceneTracks", // UMovieSceneEventTrack, UMovieSceneCameraCutTrack, property tracks
    "CinematicCamera",  // ACineCameraActor, UCineCameraComponent, ACameraRig_Rail, ACameraRig_Crane
});

// Offline rendering only. Requires the MovieRenderPipeline plugin enabled in the .uproject.
PrivateDependencyModuleNames.Add("MovieRenderPipelineCore");

Runtime vs Editor

Authoring a sequence is an editor operation. Shipping game code plays and re-binds sequences; it does not build them.

TaskAPIAvailability
Play, stop, seek, set play rateUMovieSceneSequencePlayerRuntime
Override which actors a binding resolves toALevelSequenceActor::SetBinding*Runtime
Read tracks, bindings, frame ratesUMovieScene getters, UMovieSceneSequence::GetMovieSceneRuntime
Call C++ from the timelineULevelSequenceDirector subclassRuntime
Queue and run a renderUMoviePipelineQueueEngineSubsystem (UEngineSubsystem)Runtime
Add actors, cameras, spawnables to a sequenceULevelSequenceEditorSubsystem (UEditorSubsystem)Editor only
Scripted track/section creation and keyingUMovieSceneSequenceExtensions (Runtime module of the Beta SequencerScripting plugin)Editor scripting — mutates assets
Register a custom track editorISequencerModule::RegisterTrackEditorEditor only
Drive the Movie Render Queue windowUMoviePipelineQueueSubsystem (UEditorSubsystem)Editor only

UMovieScene::AddTrack and UMovieSceneSubTrack::AddSequence do compile into runtime builds, but they mutate the sequence asset. Call them only from editor tooling or commandlets — a cooked ULevelSequence must not be edited in a shipped game.

Playing a Level Sequence

From a placed ALevelSequenceActor
cpp
#include "LevelSequenceActor.h"

// LevelSequenceActor.h:153 — UFUNCTION(BlueprintGetter) ULevelSequencePlayer* GetSequencePlayer() const;
if (ULevelSequencePlayer* Player = SeqActor->GetSequencePlayer())
{
    Player->Play();
}

Useful ALevelSequenceActor members: PlaybackSettings, LevelSequenceAsset, BindingOverrides, DefaultInstanceData, bOverrideInstanceData, bReplicatePlayback, GetSequence(), SetSequence(), SetReplicatePlayback(). Auto-play is PlaybackSettings.bAutoPlay; the actor's own bAutoPlay field no longer exists. AReplicatedLevelSequenceActor is a subclass that is always net-relevant.

Spawning a player at runtime
cpp
#include "LevelSequencePlayer.h"
#include "MovieSceneSequencePlaybackSettings.h"

// LevelSequencePlayer.h:106
// static ULevelSequencePlayer* CreateLevelSequencePlayer(
//     UObject* WorldContextObject, ULevelSequence* LevelSequence,
//     FMovieSceneSequencePlaybackSettings Settings, ALevelSequenceActor*& OutActor);

FMovieSceneSequencePlaybackSettings Settings;
Settings.bAutoPlay             = false;
Settings.PlayRate              = 1.0f;
Settings.StartTime             = 0.0f;   // seconds into the playback range
Settings.LoopCount.Value       = 0;      // 0 = once, -1 = infinite, N = N extra loops
Settings.bDisableMovementInput = true;
Settings.bDisableLookAtInput   = true;
Settings.bHidePlayer           = false;
Settings.bHideHud              = true;
Settings.bDisableCameraCuts    = false;
Settings.bPauseAtEnd           = false;
Settings.bDynamicWeighting     = false;  // set true (or enable it on the asset) before using SetWeight() — MovieSceneSequencePlayer.h:278
Settings.FinishCompletionStateOverride = EMovieSceneCompletionModeOverride::ForceRestoreState;

ALevelSequenceActor* OutActor = nullptr;
ULevelSequencePlayer* Player = ULevelSequencePlayer::CreateLevelSequencePlayer(
    this, CutsceneAsset, Settings, OutActor);

ActiveSequenceActor = OutActor;   // UPROPERTY member — otherwise both are collected
ActivePlayer        = Player;     // UPROPERTY member
// Remaining fields: bRandomStartTime, TickInterval, bInheritTickIntervalFromOwner
Playback control
cpp
Player->Play();
Player->PlayReverse();
Player->PlayLooping(-1);          // -1 = infinite
Player->ChangePlaybackDirection();
Player->Pause();
Player->Scrub();
Player->Stop();                   // resets the cursor and fires OnStop
Player->StopAtCurrentTime();
Player->GoToEndAndStop();
Player->SetPlayRate(0.5f);
Player->SetFrameRange(0, 60);     // (StartFrame, Duration) in display-rate frames
Player->SetTimeRange(0.0f, 2.5f); // (StartTime, Duration) in seconds

// Seek without firing the events in between
Player->SetPlaybackPosition(
    FMovieSceneSequencePlaybackParams(FFrameTime(120), EUpdatePositionMethod::Jump));

// Advance to a frame, firing every event along the way
Player->PlayTo(
    FMovieSceneSequencePlaybackParams(FFrameTime(240), EUpdatePositionMethod::Play),
    FMovieSceneSequencePlayToParams());

// Seconds instead of frames: FMovieSceneSequencePlaybackParams(2.5f, EUpdatePositionMethod::Jump)

const bool bPlaying           = Player->IsPlaying();
const FQualifiedFrameTime Now = Player->GetCurrentTime();
const FQualifiedFrameTime Dur = Player->GetDuration();
const FFrameRate Rate         = Player->GetFrameRate();

EUpdatePositionMethod is Play, Jump or Scrub. FMovieSceneSequencePlaybackParams has constructors taking FFrameTime, float seconds, an FString marked-frame name, or an FTimecode.

Delegates
cpp
// UPROPERTY(BlueprintAssignable) FOnMovieSceneSequencePlayerEvent — dynamic, no parameters
Player->OnPlay.AddDynamic(this, &AMyCutsceneManager::HandleSequencePlay);
Player->OnStop.AddDynamic(this, &AMyCutsceneManager::HandleSequenceStop);
Player->OnFinished.AddDynamic(this, &AMyCutsceneManager::HandleSequenceFinished);

Player->OnPause.AddDynamic(this, &AMyCutsceneManager::HandleSequencePause);
Player->OnNativeFinished.BindUObject(this, &AMyCutsceneManager::HandleNativeFinished); // native

// LevelSequencePlayer.h:27 — DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(
//     FOnLevelSequencePlayerCameraCutEvent, UCameraComponent*, CameraComponent)
Player->OnCameraCut.AddDynamic(this, &AMyCutsceneManager::HandleCameraCut);

OnFinished fires only when playback ends naturally (a natural end fires OnStop too); an explicit Stop() fires only OnStop. Bind before Play().

Binding Actors at Runtime

A possessable resolves to an actor that already exists in the level. A spawnable is created and destroyed by the sequence itself. Possessables outlive the sequence; spawnables do not. Runtime overrides apply to possessables.

Tag the object binding in the Sequencer editor (right-click the binding, then Tags), and override by tag from C++ — tags survive re-binding, GUIDs do not.

cpp
#include "LevelSequenceActor.h"
#include "MovieSceneObjectBindingID.h"

// LevelSequenceActor.h:178-253
SeqActor->SetBindingByTag(FName("Hero"), TArray<AActor*>{ HeroActor },
                          /*bAllowBindingsFromAsset=*/ false);
SeqActor->AddBindingByTag(FName("Crowd"), ExtraActor, /*bAllowBindingsFromAsset=*/ true);
SeqActor->RemoveBindingByTag(FName("Crowd"), ExtraActor);

// GUID form — expose the ID so a designer can pick the binding in the details panel:
// UPROPERTY(EditAnywhere, Category = "Cinematics") FMovieSceneObjectBindingID HeroBindingID;
SeqActor->SetBinding(HeroBindingID, TArray<AActor*>{ HeroActor }, false);
SeqActor->AddBinding(HeroBindingID, HeroActor, false);
SeqActor->RemoveBinding(HeroBindingID, HeroActor);
SeqActor->ResetBinding(HeroBindingID);   // back to whatever the asset says
SeqActor->ResetBindings();               // clear every override

const FMovieSceneObjectBindingID Found = SeqActor->FindNamedBinding(FName("Hero"));
const TArray<FMovieSceneObjectBindingID>& All = SeqActor->FindNamedBindings(FName("Crowd"));

// What is actually bound right now
TArray<UObject*> Bound = Player->GetBoundObjects(HeroBindingID);

FMovieSceneObjectBindingID keeps its guid and sequence id private. Read them with GetGuid(), GetRelativeSequenceID() and IsFixedBinding(); move an ID across a sub-sequence hierarchy with ResolveToFixed(), then ConvertToRelative() on the resulting UE::MovieScene::FFixedObjectBindingID (ConvertToRelative is not a member of FMovieSceneObjectBindingID, MovieSceneObjectBindingID.h:113-160,341). Never assign the fields directly.

Relocating a whole sequence

ALevelSequenceActor implements IMovieScenePlaybackClient::GetInstanceData. Set bOverrideInstanceData and supply a UDefaultLevelSequenceInstanceData to offset every absolute transform section, so one authored cutscene can play anywhere in the world.

cpp
#include "DefaultLevelSequenceInstanceData.h"

UDefaultLevelSequenceInstanceData* Data =
    NewObject<UDefaultLevelSequenceInstanceData>(SeqActor);
Data->TransformOriginActor = StageMarkerActor;   // or leave null and set TransformOrigin
SeqActor->DefaultInstanceData  = Data;
SeqActor->bOverrideInstanceData = true;

Sequencer Event Tracks

An event key does not call a loose global function. FMovieSceneEvent stores a compiled UFunction pointer, and the evaluation system calls it on the sequence's director instance — an object of the class in ULevelSequence::DirectorClass, which derives from ULevelSequenceDirector. The UFUNCTION must therefore be a member of a ULevelSequenceDirector subclass or of its Director Blueprint.

Rules the engine enforces:

  • MovieSceneEvent.h:70 — the endpoint takes no parameters, or exactly one pass-by-value object/interface parameter, and returns nothing.
  • When the event track sits under an object binding, the bound object arrives as that single parameter.
  • On a root track, a parameterless endpoint runs once on the director; an endpoint with the object parameter runs once per global event context (MovieSceneEventSystems.cpp:206-213). ULevelSequencePlayer::GetEventContexts returns the persistent level's ALevelScriptActor plus one per streaming level — not the UWorld.
  • In a non-game world (the Sequencer preview), the event is skipped unless the UFUNCTION carries CallInEditor.
cpp
// MyCinematicDirector.h
#pragma once

#include "LevelSequenceDirector.h"
#include "MovieSceneObjectBindingID.h"
#include "MyCinematicDirector.generated.h"

class AActor;

UCLASS(Blueprintable)
class MYGAME_API UMyCinematicDirector : public ULevelSequenceDirector
{
    GENERATED_BODY()

public:
    /** Event endpoint with no parameters. */
    UFUNCTION(BlueprintCallable, CallInEditor, Category = "Cinematics")
    void OnExplosionCue();

    /** Event endpoint on an object-binding track: receives the bound actor. */
    UFUNCTION(BlueprintCallable, CallInEditor, Category = "Cinematics")
    void OnActorCue(AActor* BoundActor);

    /** Assign in the Director Blueprint's class defaults using the Get Sequence Binding node. */
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cinematics")
    FMovieSceneObjectBindingID HeroBinding;
};
cpp
// MyCinematicDirector.cpp
#include "MyCinematicDirector.h"
#include "LevelSequencePlayer.h"
#include "GameFramework/Actor.h"

void UMyCinematicDirector::OnExplosionCue()
{
    // GetBoundObjects and Player are both declared on ULevelSequenceDirector.
    for (UObject* Object : GetBoundObjects(HeroBinding))
    {
        if (AActor* Hero = Cast<AActor>(Object))
        {
            Hero->SetActorHiddenInGame(true);
        }
    }

    if (Player)
    {
        Player->SetPlayRate(0.25f);
    }
}

void UMyCinematicDirector::OnActorCue(AActor* BoundActor)
{
    if (BoundActor)
    {
        BoundActor->SetActorTickEnabled(false);
    }
}

To attach it: open the Level Sequence, open its Director Blueprint from the Sequencer toolbar, and reparent that Blueprint to UMyCinematicDirector (Class Settings, Parent Class). Sequencer compiles the Blueprint into ULevelSequence::DirectorClass; one director instance is created per sequence during evaluation, and ULevelSequenceDirector::Player points at the owning player. ULevelSequenceDirector also exposes GetBoundObject, GetBoundActor, GetBoundActors, GetSequence, GetCurrentTime, GetRootSequenceTime and a BlueprintImplementableEvent OnCreated.

The track classes involved are UMovieSceneEventTrack (with bFireEventsWhenForwards), UMovieSceneEventTriggerSection for one-shot keys and UMovieSceneEventRepeaterSection for a key that fires on every pass. Seeking with EUpdatePositionMethod::Jump skips every event in between; use PlayTo when the events must fire.

MovieScene Data Model

cpp
#include "MovieScene.h"
#include "MovieSceneSpawnable.h"
#include "MovieScenePossessable.h"

UMovieScene* MS = SeqActor->GetSequence()->GetMovieScene();

const FFrameRate DisplayRate     = MS->GetDisplayRate();
const FFrameRate TickResolution  = MS->GetTickResolution();
const TRange<FFrameNumber> Range = MS->GetPlaybackRange();

for (int32 Index = 0; Index < MS->GetPossessableCount(); ++Index)
{
    const FMovieScenePossessable& Possessable = MS->GetPossessable(Index);
    const FGuid Guid = Possessable.GetGuid();       // also GetName, GetPossessedObjectClass
}
for (int32 Index = 0; Index < MS->GetSpawnableCount(); ++Index)
{
    const FMovieSceneSpawnable& Spawnable = MS->GetSpawnable(Index);   // GetGuid, GetName
}

const TArray<UMovieSceneTrack*>& RootTracks = MS->GetTracks();
if (const FMovieSceneBinding* Binding = MS->FindBinding(SomeGuid))
{
    for (UMovieSceneTrack* Track : Binding->GetTracks()) { /* Cast to a concrete type */ }
}
Track class (MovieSceneTracks)Animates
UMovieScene3DTransformTrackActor and component transforms
UMovieSceneSkeletalAnimationTrackSkeletal mesh animation
UMovieSceneCameraCutTrackWhich camera the viewport uses
UMovieSceneEventTrackDirector function calls
UMovieSceneAudioTrackSound assets
UMovieSceneFadeTrackScreen fade
UMovieScenePropertyTrackBase class for property animation

UMovieScenePropertyTrack subclasses drive a named UPROPERTY marked Interp: UMovieSceneFloatTrack produces UMovieSceneFloatSection, which stores an FMovieSceneFloatChannel; UMovieSceneBoolTrack and UMovieSceneColorTrack follow the same shape. UMovieSceneSubTrack and UMovieSceneSubSection live in MovieScene, not MovieSceneTracks.

cpp
#include "Tracks/MovieSceneSubTrack.h"
#include "Sections/MovieSceneSubSection.h"

UMovieSceneSubTrack* SubTrack = RootMovieScene->AddTrack<UMovieSceneSubTrack>();
const FFrameNumber Start = (2.0 * RootMovieScene->GetTickResolution()).FloorToFrame();
const int32 Duration = (5.0 * RootMovieScene->GetTickResolution()).FloorToFrame().Value;

UMovieSceneSubSection* SubSection = SubTrack->AddSequence(ChildSequence, Start, Duration);
SubSection->Parameters.TimeScale.Set(1.0);   // FMovieSceneTimeWarpVariant — Set(), not assignment
SubSection->Parameters.bCanLoop = false;
SubSection->Parameters.StartFrameOffset = FFrameNumber(0);

Sub-section offsets and durations are in tick-resolution frames, not display-rate frames. UE::MovieScene::DiscreteSize, DiscreteInclusiveLower and DiscreteExclusiveUpper in MovieSceneTimeHelpers.h turn a TRange<FFrameNumber> into frame counts.

Cine Cameras and Camera Rigs

This section covers cameras a sequence drives. Gameplay cameras, camera modifiers, camera shakes and view-target blending belong to ue-gameplay-cameras.

cpp
#include "CineCameraActor.h"
#include "CineCameraComponent.h"
#include "CineCameraSettings.h"

ACineCameraActor* Cam = GetWorld()->SpawnActor<ACineCameraActor>(SpawnLocation, SpawnRotation);
UCineCameraComponent* CineComp = Cam->GetCineCameraComponent();

FCameraFilmbackSettings Filmback;          // SensorWidth / SensorHeight in mm
Filmback.SensorWidth  = 36.0f;
Filmback.SensorHeight = 24.0f;
CineComp->SetFilmback(Filmback);           // SensorAspectRatio is derived, not settable

FCameraLensSettings Lens;                  // mm and f-stops
Lens.MinFocalLength       = 35.0f;
Lens.MaxFocalLength       = 35.0f;
Lens.MinFStop             = 1.4f;
Lens.MaxFStop             = 16.0f;
Lens.MinimumFocusDistance = 30.0f;
Lens.DiaphragmBladeCount  = 7;
CineComp->SetLensSettings(Lens);

FCameraFocusSettings Focus;
Focus.FocusMethod               = ECameraFocusMethod::Manual;  // DoNotOverride|Manual|Tracking|Disable
Focus.ManualFocusDistance       = 500.0f;                      // cm
Focus.bSmoothFocusChanges       = true;
Focus.FocusSmoothingInterpSpeed = 8.0f;
CineComp->SetFocusSettings(Focus);

CineComp->SetCurrentFocalLength(35.0f);    // mm; UPROPERTY(Interp) so Sequencer can key it
CineComp->SetCurrentAperture(2.0f);        // f-stop; also Interp

Cam->LookatTrackingSettings.bEnableLookAtTracking     = true;
Cam->LookatTrackingSettings.ActorToTrack              = TargetActor;  // TSoftObjectPtr<AActor>
Cam->LookatTrackingSettings.RelativeOffset            = FVector(0.f, 0.f, 80.f);
Cam->LookatTrackingSettings.LookAtTrackingInterpSpeed = 4.0f;

CurrentFocusDistance and CurrentHorizontalFOV are read-only; query the field of view with GetHorizontalFieldOfView() and GetVerticalFieldOfView(). Presets go through SetFilmbackPresetByName, SetLensPresetByName and SetCropPresetByName.

Attach a camera to a rig and key the rig's Interp properties in Sequencer instead of hand-animating the camera transform:

cpp
#include "CameraRig_Rail.h"
#include "CameraRig_Crane.h"

Rail->CurrentPositionOnRail  = 0.35f;   // 0..1 along the spline
Rail->bLockOrientationToRail = true;
USplineComponent* RailSpline = Rail->GetRailSplineComponent();

Crane->CraneArmLength  = 400.0f;        // cm
Crane->CranePitch      = 12.0f;         // degrees
Crane->CraneYaw        = -45.0f;
Crane->bLockMountPitch = true;          // also bLockMountYaw

Both rigs override GetDefaultAttachComponent(), so attaching the camera as a child puts it on the correct mount.

Show full SKILL.md (707 more words)Show less

Movie Render Graph

Movie Render Graph is production-ready in 5.8 and is the path to prefer for new work. A UMovieGraphConfig is a node graph of UMovieGraphNode subclasses (UMovieGraphSettingNode for settings, UMovieGraphRenderPassNode for passes, UMovieGraphGlobalOutputSettingNode for resolution and output paths); UMovieGraphPipeline executes it through Initialize(UMoviePipelineExecutorJob*, const FMovieGraphInitConfig&).

Runtime rendering goes through UMoviePipelineQueueEngineSubsystem, a UEngineSubsystem in MovieRenderPipelineCore. The editor-facing UMoviePipelineQueueSubsystem is a UEditorSubsystem in MovieRenderPipelineEditor and cannot be referenced from runtime code — doing so breaks a packaged build.

cpp
#include "MoviePipelineQueueEngineSubsystem.h"
#include "MoviePipelineQueue.h"
#include "Graph/MovieGraphConfig.h"

UMoviePipelineQueueEngineSubsystem* RenderSubsystem =
    GEngine->GetEngineSubsystem<UMoviePipelineQueueEngineSubsystem>();
if (!RenderSubsystem || RenderSubsystem->IsRendering())
{
    return;
}

UMoviePipelineExecutorJob* Job = RenderSubsystem->AllocateJob(ShotSequence);
Job->JobName = TEXT("Shot_0010");
Job->Map     = FSoftObjectPath(GetWorld());
Job->SetGraphPreset(RenderGraphAsset);          // UMovieGraphConfig*

RenderSubsystem->OnRenderFinished.AddDynamic(this, &AMyRenderDirector::HandleRenderFinished);
RenderSubsystem->RenderJob(Job);

AllocateJob clears the queue, so it renders exactly one job; for a batch call GetQueue()->AllocateNewJob(UMoviePipelineExecutorJob::StaticClass()) per job and then RenderQueueWithExecutor(UMoviePipelineInProcessExecutor::StaticClass()). Custom executors subclass UMoviePipelineExecutorBase (override Execute_Implementation and IsRendering_Implementation) or UMoviePipelineLinearExecutorBase, which already walks the queue and leaves Start(const UMoviePipelineExecutorJob*) to you.

Render layers are a world feature: UMovieGraphRenderLayerSubsystem is a UWorldSubsystem reached with UMovieGraphRenderLayerSubsystem::GetFromWorld(World), holding UMovieGraphRenderLayer objects. Add modifiers with UMovieGraphRenderLayer::AddLayerModifier(UMovieGraphModifierBase*), read them with GetLayerModifiers() (Blueprint only — not exported from the MinimalAPI class, Graph/MovieGraphRenderLayerSubsystem.h:1216), drop them with RemoveLayerModifier(), and switch layers with SetActiveRenderLayerByName or ClearActiveRenderLayer.

Legacy Movie Render Queue — still shipped and supported, but not the default for new graphs. UMoviePipeline is the executing object, configured by a UMoviePipelinePrimaryConfig holding UMoviePipelineSetting objects, reached with FindOrAddSettingByClass / FindSettingByClass. UMoviePipelineOutputSetting lives in MovieRenderPipelineCore (OutputDirectory, FileNameFormat, OutputResolution, bUseCustomFrameRate, OutputFrameRate, ZeroPadFrameNumbers); the passes and containers (UMoviePipelineDeferredPassBase, UMoviePipelineImageSequenceOutput_PNG, UMoviePipelineImageSequenceOutput_EXR) live in MovieRenderPipelineRenderPasses, which must be added to Build.cs separately. A job is either graph-configured (SetGraphPreset, IsUsingGraphConfiguration()) or legacy-configured (SetConfiguration, IsUsingBasicConfiguration()) — never both.

DaySequence (Experimental in 5.8) builds on MovieScene for time-of-day; it is a separate asset type and the APIs above do not transfer to it unchanged.

Deprecated — do not use

Do not emitUse in 5.8Source
SeqActor->SequencePlayerSeqActor->GetSequencePlayer()UE_DEPRECATED(5.4) in LevelSequenceActor.h:86
SeqActor->bAutoPlaySeqActor->PlaybackSettings.bAutoPlaybAutoPlay_DEPRECATED in LevelSequenceActor.h:109
non-const MovieScene->GetBindings()const GetBindings()UE_DEPRECATED(5.7) in MovieScene.h:782
FMovieSceneBinding::GetName / SetNameFMovieScenePossessable::GetName, FMovieSceneSpawnable::GetNameUE_DEPRECATED(5.7) in MovieSceneBinding.h:89
MovieScene->GetSoloNodes() / GetMuteNodes()FindDecorationUE_DEPRECATED(5.7) in MovieScene.h:978
MovieScene->OnChannelChanged()OnChannelChangedWithTime()UE_DEPRECATED(5.8) in MovieScene.h:993
RenderLayer->AddModifier() / GetModifiers() / RemoveModifier()AddLayerModifier() / GetLayerModifiers() / RemoveLayerModifier()UE_DEPRECATED(5.7) in Graph/MovieGraphRenderLayerSubsystem.h:1204-1218
ConditionGroup->Evaluate()EvaluateActorsAndComponents()UE_DEPRECATED(5.6) in Graph/MovieGraphRenderLayerSubsystem.h:817
GetEffectiveOutputResolution()GetOverscannedResolution()UE_DEPRECATED(5.6) in MoviePipelineBlueprintLibrary.h:154
GameModeOverrideSoftGameModeOverrideUE_DEPRECATED(5.5) in MoviePipelineGameOverrideSetting.h:77
RendererName memberGetRendererName()UE_DEPRECATED(5.7) in Graph/Nodes/MovieGraphBurnInNode.h:43
Section->Parameters.TimeScale = 1.0Parameters.TimeScale.Set(1.0)explicit ctor, Variants/MovieSceneTimeWarpVariant.h:66

Common Mistakes

UFUNCTION on a free function for an event track: a UFUNCTION is only legal inside a UCLASS or USTRUCT body, and Sequencer calls event endpoints on the director instance. Put the endpoint on a ULevelSequenceDirector subclass, with no parameters or one object parameter.

Endpoint with the wrong signature: void Foo(FName Tag, int32 Index) will never bind. The engine accepts no parameters, or one pass-by-value object/interface parameter, and no return value.

Nothing fires in the Sequencer preview: non-game worlds skip endpoints whose UFUNCTION lacks CallInEditor.

Binding after Play(): frame 0 has already evaluated against the asset binding. Call SetBindingByTag or SetBinding on the ALevelSequenceActor before Play().

Losing the spawned actor: CreateLevelSequencePlayer hands back a raw ALevelSequenceActor*. Store it and the player in UPROPERTY() members or they are garbage collected mid-cutscene.

Camera never returns to the player: the camera cut track restores the previous view target only when its section resolves to Restore State (Level Sequences default to it, DefaultCompletionMode=RestoreState in BaseEngine.ini; restore in MovieSceneCameraCutGameHandler.cpp:115-124), and cinematic mode is undone on stop (LevelSequencePlayer.cpp:177). With a Keep State section, ForceKeepState or bPauseAtEnd, handle OnFinished and call PC->SetViewTargetWithBlend(PC->GetPawn(), 0.5f, VTBlend_Cubic) yourself.

Skipping leaves actors mid-pose: set Settings.FinishCompletionStateOverride = EMovieSceneCompletionModeOverride::ForceRestoreState, or call SetCompletionModeOverride, before Stop().

Touching UMoviePipelineQueueSubsystem from game code: it is a UEditorSubsystem in MovieRenderPipelineEditor. Runtime renders use UMoviePipelineQueueEngineSubsystem from MovieRenderPipelineCore.

Mixing graph and legacy config on one job: SetGraphPreset and SetConfiguration are mutually exclusive. Check IsUsingGraphConfiguration() before assuming GetConfiguration() is valid.

Frame-rate confusion: SetFrameRange uses display-rate frames, while UMovieSceneSubSection offsets and UMovieScene::GetPlaybackRange use tick-resolution frames. Convert with GetDisplayRate() and GetTickResolution().

Assuming camera cuts replicate: cuts are evaluated per client. Use SetReplicatePlayback(true), or AReplicatedLevelSequenceActor, so the server drives playback time and each client applies its own cut.

  • ue-animation-system — skeletal animation assets, montages and anim notifies that sequence animation tracks play
  • ue-gameplay-cameras — gameplay cameras, camera modifiers, camera shakes and view-target blending outside Sequencer
  • ue-audio-system — the sound assets, submixes and attenuation behind sequence audio tracks
  • ue-niagara-effects — particle systems a cinematic triggers or that a sequence keys
  • ue-materials-rendering — post process, Lumen and material setup that render passes capture
  • ue-actor-component-architecture — spawning and owning the actors a sequence possesses
  • ue-world-level-streaming — streaming levels in before a cutscene and Data Layer state during a render

© quodsoler, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/ue-sequencer-cinematics of quodsoler/unreal-engine-skills.

  • SKILL.md
  • references/sequencer-patterns.md

Open the folder on GitHubat commit f3742d7

Compare with similar skills

Ue Sequencer Cinematics next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ue Sequencer Cinematics compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ue Sequencer Cinematics this skillquodsoler/unreal-engine-skills362—~7.3kAutomated safety check: PassMIT
Ue Specifiersfjz13/UnrealSpecifiers1.1k—~1.4kAutomated safety check: PassCustom licence
Validate GsdkPlayFab/gsdk170—~645Automated safety check: PassApache-2.0
Unreal Engine MCPEpicGames/unreal-engine-skills-for-claude-code-plugin338—~1.8kAutomated safety check: PassMIT
Sokol Netelix22/Sokol.NET154—~2.8kAutomated safety check: PassMIT
Gdextension Hygienemicrosoft/XBOX-Godot-Sample237—~983Automated safety check: PassMIT

Similar skills

  • Ue Specifiers

    fjz13/UnrealSpecifiers

    A skill your agent uses when writing, editing, reviewing, validating, or explaining Unreal Engine C++ reflected declarations: UCLASS, USTRUCT, UENUM, UINTERFACE, UPROPERTY, UFUNCTION, UPARAM, UMETA…

    1.1k GitHub stars~1.4k tokensUpdated 4 mo ago
    Game DevelopmentAuto-check passed
  • Validate Gsdk

    PlayFab/gsdk

    Validates PlayFab Game Server SDK (GSDK) integrations in game server projects.

    170 GitHub stars~645 tokensUpdated 2 days ago
    Game DevelopmentAuto-check passed
  • Unreal Engine MCP

    EpicGames/unreal-engine-skills-for-claude-code-plugin

    Drives a live Unreal Editor through the unreal-mcp server: spawn actors, edit Blueprints, materials and sequences, change properties and trigger Live Coding.

    338 GitHub stars~1.8k tokensUpdated 24 days ago
    Game DevelopmentAuto-check passed
  • Sokol Net

    elix22/Sokol.NET

    Sokol.NET framework development — use for ANY work in this repo: creating or debugging examples, building/running for desktop/Android/iOS/Web, writing or compiling shaders, adding a new C/C++…

    154 GitHub stars~2.8k tokensUpdated 2 days ago
    Game DevelopmentAuto-check passed
  • Gdextension Hygiene

    microsoft/XBOX-Godot-Sample

    Official

    Run a Godot/GDExtension finish pass over the current diff: enforce headless GDScript validation, public API docclasses coverage, docs/spec/sample/test synchronization, and registration or CMake…

    237 GitHub stars~983 tokensUpdated 3 days ago
    Game DevelopmentAuto-check passed
  • Intrinsic Core Solution Building

    intrinsic-ai/intrinsic-core

    Intrinsic Solution Building Library (SBL) Python SDK guide for connecting to workcells, composing Behavior Trees, querying/mutating ObjectWorld frames, binding equipment resources, and orchestrating…

    560 GitHub stars~2.7k tokensUpdated yesterday
    Game DevelopmentAuto-check passed

More from quodsoler/unreal-engine-skills

All 31 skills in this repo
  • Unreal Actor-Component Architecture

    quodsoler/unreal-engine-skills

    Unreal Engine C++ guidance for AActor and UActorComponent: lifecycle hooks, spawning, component creation and attachment, ticking, interfaces and composition.

    362 GitHub stars~7.5k tokensUpdated 12 days ago
    Auto-check passed
  • Unreal Engine AI and Navigation

    quodsoler/unreal-engine-skills

    Guides Unreal Engine C++ AI work across AI controllers, behavior trees, blackboards, perception, navmesh pathfinding, EQS and Smart Objects.

    362 GitHub stars~8.9k tokensUpdated 12 days ago
    Auto-check passed
  • Unreal Engine Animation System

    quodsoler/unreal-engine-skills

    Reference for writing and debugging Unreal Engine 5.8 animation C++: AnimInstance and proxy, montages, notifies, curves, blend spaces, state machines, linked layers and root motion.

    362 GitHub stars~7k tokensUpdated 12 days ago
    Auto-check passed
  • Unreal Engine Async and Threading

    quodsoler/unreal-engine-skills

    Picks and applies the right Unreal Engine C++ concurrency API, from UE::Tasks and FPipe to ParallelFor, FRunnable, locks and timers, with game-thread safety rules.

    362 GitHub stars~8k tokensUpdated 12 days ago
    Auto-check passed
  • Ue Audio System

    quodsoler/unreal-engine-skills

    A skill your agent uses when playing, mixing or debugging sound in Unreal Engine — one-shot SFX, looping ambience, music, dialogue or procedural audio.

    362 GitHub stars~7.9k tokensUpdated 12 days ago
    Auto-check passed
  • Unreal Blueprint and C++ Interop

    quodsoler/unreal-engine-skills

    Reference for exposing Unreal Engine C++ to Blueprint and calling Blueprint from C++, covering UFUNCTION and UPROPERTY specifiers, latent and async nodes, and interfaces.

    362 GitHub stars~7.8k tokensUpdated 12 days ago
    Auto-check passed

Works with

Questions about Ue Sequencer Cinematics

What does Ue Sequencer Cinematics do?

A skill your agent uses when playing Level Sequences from C++, building cutscenes or in-game camera moments, binding actors to sequence tracks at runtime, wiring Sequencer event tracks, or rendering…. Ue Sequencer Cinematics is an agent skill from quodsoler/unreal-engine-skills. Use when playing Level Sequences from C++, building cutscenes or in-game camera moments, binding actors to sequence tracks at runtime, wiring Sequencer event tracks, or rendering with Movie Render Graph.

When should I use Ue Sequencer Cinematics?

Ue Sequencer Cinematics fits situations like: playing Level Sequences from C++; building cutscenes; in-game camera moments; binding actors to sequence tracks at runtime.

How do I install Ue Sequencer Cinematics in Claude Code?

Run `npx skills add quodsoler/unreal-engine-skills --skill ue-sequencer-cinematics -a claude-code`. Or copy the skill folder (skills/ue-sequencer-cinematics in quodsoler/unreal-engine-skills) into .claude/skills/ue-sequencer-cinematics in your project. Claude Code loads it when a task matches its description.

How do I install Ue Sequencer Cinematics in Codex?

Run `npx skills add quodsoler/unreal-engine-skills --skill ue-sequencer-cinematics -a codex`. Or copy the skill folder (skills/ue-sequencer-cinematics in quodsoler/unreal-engine-skills) into .agents/skills/ue-sequencer-cinematics in your project. Codex loads it when a task matches its description.

Can I use Ue Sequencer Cinematics in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add quodsoler/unreal-engine-skills --skill ue-sequencer-cinematics -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ue-sequencer-cinematics, .gemini/skills/ue-sequencer-cinematics, .github/skills/ue-sequencer-cinematics and .opencode/skills/ue-sequencer-cinematics in your project.

What does Ue Sequencer Cinematics need to run?

SKILL.md names no scripts, command-line tools or credentials: Ue Sequencer Cinematics is instructions for the agent only.

Does Ue Sequencer Cinematics access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Ue Sequencer Cinematics safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ue Sequencer Cinematics use?

Ue Sequencer Cinematics is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ue Sequencer Cinematics use?

About 7.3k tokens (SKILL.md is roughly 29k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.6k tokens, read only when the agent opens those files.

What are the alternatives to Ue Sequencer Cinematics?

Skills that share tags, products or a category with Ue Sequencer Cinematics: Ue Specifiers (fjz13/UnrealSpecifiers, 1.1k stars), Validate Gsdk (PlayFab/gsdk, 170 stars), Unreal Engine MCP (EpicGames/unreal-engine-skills-for-claude-code-plugin, 338 stars) and Sokol Net (elix22/Sokol.NET, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ue Sequencer Cinematics?

quodsoler (a GitHub user) maintains it in quodsoler/unreal-engine-skills, which has 362 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on September 28, 2026.

Source: quodsoler/unreal-engine-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.