Works in Unreal Engine 5. Tested on UE 5.8. Updated October 2026.
Quick answer: a custom Sequencer track needs four C++ classes across two modules:
- Track (
UMovieSceneTrack, runtime module): the row in Sequencer that holds your sections. - Section (
UMovieSceneSection, runtime module): a block on the timeline that stores your data and runs during playback. - Track editor (
FMovieSceneTrackEditor, editor module): adds your track to the + Add menu. - Section interface (
FSequencerSection, editor module): draws your section in the timeline.
Then register the track editor when your editor module starts.
Before you start
Custom tracks are an advanced C++ topic. You need:
- a runtime module for the track and section (they ship with your game),
- an editor module for the track editor and section drawing (editor only).
If your project has only one module, add an editor module first. See how to create a plugin from a module.
Step 1: Add the modules to Build.cs
Runtime module:
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "MovieScene" });
Editor module:
PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "Slate", "SlateCore", "UnrealEd", "MovieScene", "LevelSequence", "Sequencer", "SequencerCore", "YourProject" });
Step 2: Create the track and section
- Subclass
UMovieSceneNameableTrackfor the track. It stores an array of your sections and creates new ones. - Subclass
UMovieSceneSectionfor the section. Put the data you want on the timeline here (a message, a color, a sound…). - To make the section do something during playback, the section reacts when playback enters and leaves it.
Step 3: Create the track editor and section interface
- Subclass
FMovieSceneTrackEditor. It tells Sequencer which track type it handles, adds a menu entry to + Add, and creates sections when you click. - Subclass
FSequencerSectionto control how each section looks in the timeline (its label and color).
Step 4: Register the track editor
In your editor module’s StartupModule:
ISequencerModule& SequencerModule = FModuleManager::LoadModuleChecked("Sequencer");
DebugMessageTrackEditorHandle = SequencerModule.RegisterTrackEditor(FOnCreateTrackEditor::CreateStatic(&FDebugMessageTrackEditor::CreateTrackEditor));
And unregister it in ShutdownModule with UnRegisterTrackEditor(DebugMessageTrackEditorHandle).
Step 5: Test it
Build, open a Level Sequence, click + Add, and your track appears in the menu. Add a section, play the sequence, and check it runs.
Animating a property instead?
If you only want to keyframe a property of an object (like a float or color), you may not need a fully custom track. Sequencer can already animate most exposed properties. For your own property types, look at FPropertyTrackEditor, which handles a lot of the work for you.
Common errors
| Problem | Fix |
|---|---|
| Track doesn’t appear in + Add | The track editor isn’t registered, or the editor module didn’t load. Check StartupModule runs |
| Linker errors (LNK2019) | A module is missing from Build.cs. See LNK2001 unresolved external symbol |
| Section does nothing at runtime | The logic is in the editor module. Playback code must be in the runtime module |
This is what we did in our UMG Cinematics plugin.