Sequencer
Level Sequencer verbs: seq-list-tracks, seq-add-track, seq-add-section, seq-add-key, seq-set-range.
Verbs for creating and editing LevelSequence assets: listing tracks, adding tracks and sections, inserting keyframes, and setting playback ranges.
seq-list-tracks#
List all tracks in a LevelSequence.
Category: Read (focused)
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | LevelSequence asset path |
Examples:
-verb=seq-list-tracks -asset=/Game/Cinematics/LS_Intro
seq-add-track#
Add a track to a LevelSequence.
Category: Write (sequencer)
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | LevelSequence asset path |
-type= |
Yes | Track type: Float, Bool, Transform, Event, Audio, SkeletalAnimation, CameraCut |
-binding= |
No | Object binding name (bind the track to a specific object in the sequence) |
Examples:
-verb=seq-add-track -asset=/Game/Cinematics/LS_Intro -type=CameraCut
-verb=seq-add-track -asset=/Game/Cinematics/LS_Intro -type=Transform -binding=CameraActor
-verb=seq-add-track -asset=/Game/Cinematics/LS_Intro -type=Float -binding=PointLight
Notes:
CameraCuttracks do not take a-binding=because they reference camera actors via sections/keys, not a direct object binding.TransformandFloattracks typically bind to a specific actor so the sequencer knows which object's property to animate.
seq-add-section#
Add a section (time range) to a track.
Category: Write (sequencer)
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | LevelSequence asset path |
-track= |
Yes | Track index (integer, 0-based from seq-list-tracks output) |
-startframe= |
Yes | Section start frame |
-endframe= |
Yes | Section end frame |
Examples:
-verb=seq-add-section -asset=/Game/Cinematics/LS_Intro -track=0 -startframe=0 -endframe=150
-verb=seq-add-section -asset=/Game/Cinematics/LS_Intro -track=1 -startframe=0 -endframe=300
Notes:
- Frame numbers use the sequence's display rate (typically 30 fps). A section from frame 0 to 150 at 30 fps spans 5 seconds.
seq-add-key#
Add a keyframe to a section.
Category: Write (sequencer)
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | LevelSequence asset path |
-track= |
Yes | Track index (integer, 0-based) |
-frame= |
Yes | Frame number |
-value= |
Yes | Keyframe value (parsed as string, same as UE property text format) |
-section= |
No | Section index within the track (defaults to 0) |
-channel= |
No | Channel index within the section (defaults to 0). Transform tracks use channels 0-8: Location X/Y/Z (0-2), Rotation X/Y/Z (3-5), Scale X/Y/Z (6-8). |
Examples:
-verb=seq-add-key -asset=/Game/Cinematics/LS_Intro -track=0 -frame=0 -value="(X=0,Y=0,Z=200)"
-verb=seq-add-key -asset=/Game/Cinematics/LS_Intro -track=0 -frame=150 -value="(X=500,Y=0,Z=200)"
-verb=seq-add-key -asset=/Game/Cinematics/LS_Intro -track=1 -frame=0 -value=0.0 -channel=0
-verb=seq-add-key -asset=/Game/Cinematics/LS_Intro -track=1 -frame=90 -value=1.0 -channel=0
Notes:
- For Transform tracks, the
-value=can be a full struct(X=...,Y=...,Z=...)when setting all components at once, or a single float when targeting a specific-channel=. - For Float tracks,
-value=is a single numeric value. - For Bool tracks,
-value=istrueorfalse.
seq-set-range#
Set the playback range of a LevelSequence.
Category: Write (sequencer)
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | LevelSequence asset path |
-startframe= |
Yes | Start frame |
-endframe= |
Yes | End frame |
Examples:
-verb=seq-set-range -asset=/Game/Cinematics/LS_Intro -startframe=0 -endframe=300
Notes:
- This sets the working range shown in the Sequencer editor and used as the default playback bounds.
Practical example: camera fly-through sequence#
Create a LevelSequence with a CameraCut track and a Transform track that moves a camera from one position to another over 5 seconds (150 frames at 30 fps).
Using batch (recommended)#
curl -X POST http://localhost:7850/baa/v1/batch \
-H "Content-Type: application/json" \
-d '{
"defaultAsset": "/Game/Cinematics/LS_CameraFlythrough",
"operations": [
{
"verb": "seq-set-range",
"args": { "startframe": "0", "endframe": "150" },
"id": "range"
},
{
"verb": "seq-add-track",
"args": { "type": "Transform", "binding": "CameraActor" },
"id": "camTrack"
},
{
"verb": "seq-add-section",
"args": { "track": "$camTrack.trackIndex", "startframe": "0", "endframe": "150" },
"id": "camSection"
},
{
"verb": "seq-add-key",
"args": {
"track": "$camTrack.trackIndex",
"frame": "0",
"value": "(X=0,Y=0,Z=200)",
"section": "0"
}
},
{
"verb": "seq-add-key",
"args": {
"track": "$camTrack.trackIndex",
"frame": "75",
"value": "(X=250,Y=100,Z=250)",
"section": "0"
}
},
{
"verb": "seq-add-key",
"args": {
"track": "$camTrack.trackIndex",
"frame": "150",
"value": "(X=500,Y=0,Z=200)",
"section": "0"
}
},
{
"verb": "save"
}
]
}'
Using commandlet (no HTTP server)#
# Step 1: Set playback range
"C:\Unreal\UE571Source\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" \
"C:\Unreal\ProjectLeyline\CombatDemo\CombatDemo.uproject" \
-run=BlueprintAIAssistant \
-verb=seq-set-range \
-asset=/Game/Cinematics/LS_CameraFlythrough \
-startframe=0 -endframe=150 \
-nullrhi -nosplash -nosound -unattended
# Step 2: Add transform track bound to camera
"C:\Unreal\UE571Source\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" \
"C:\Unreal\ProjectLeyline\CombatDemo\CombatDemo.uproject" \
-run=BlueprintAIAssistant \
-verb=seq-add-track \
-asset=/Game/Cinematics/LS_CameraFlythrough \
-type=Transform -binding=CameraActor \
-nullrhi -nosplash -nosound -unattended
# Step 3: Add section spanning full range
"C:\Unreal\UE571Source\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" \
"C:\Unreal\ProjectLeyline\CombatDemo\CombatDemo.uproject" \
-run=BlueprintAIAssistant \
-verb=seq-add-section \
-asset=/Game/Cinematics/LS_CameraFlythrough \
-track=0 -startframe=0 -endframe=150 \
-nullrhi -nosplash -nosound -unattended
# Step 4: Add start keyframe
"C:\Unreal\UE571Source\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" \
"C:\Unreal\ProjectLeyline\CombatDemo\CombatDemo.uproject" \
-run=BlueprintAIAssistant \
-verb=seq-add-key \
-asset=/Game/Cinematics/LS_CameraFlythrough \
-track=0 -frame=0 -value="(X=0,Y=0,Z=200)" \
-save \
-nullrhi -nosplash -nosound -unattended
Note: For the commandlet approach, prefer using the batch verb with a JSON
manifest file instead of multiple separate launches. Each commandlet launch
loads the full editor (30-60 seconds), so batching saves significant time.
Tips#
- List tracks first. Before adding sections or keys, run
seq-list-tracksto see existing track indices and types. - Use batch for multi-step operations. Building a sequence typically involves multiple verbs (add track, add section, add keys). Batch them to avoid repeated editor startup costs.
- Frame numbers use display rate. The default display rate is typically 30 fps. Frame 150 = 5 seconds at 30 fps.
- Channel indices for Transform tracks. Channels 0-2 are Location X/Y/Z, channels 3-5 are Rotation X/Y/Z, channels 6-8 are Scale X/Y/Z.
- Save after writes. Sequencer write verbs modify the asset in memory.
Use
-saveon the last verb or add a separatesaveoperation to persist changes to disk.