The sequencer API development has been sponsored by Matthew Whelan (http://www.mattwhelan.com/)
Credits should go to Ron Fischer too, for having explained me the sequencer api ;)
You can create a new 'Level Sequence' asset using the LevelSequencerFactoryNew class:
from unreal_engine.classes import LevelSequenceFactoryNew
factory = LevelSequenceFactoryNew()
seq = factory.factory_create_new('/Game/MovieMaster')
In the following example we add a MovieSceneAudioTrack as a master track
from unreal_engine.classes import MovieSceneAudioTrack
audio_track = seq.sequencer_add_master_track(MovieSceneAudioTrack)
the following snippet prints the name of the MovieSceneTrack classes
import unreal_engine as ue
from unreal_engine.classes import MovieSceneTrack
for uclass in ue.all_classes():
if uclass.is_child_of(MovieSceneTrack):
print(uclass.get_name())
tracks = seq.sequencer_master_tracks()
This is a pretty complex example, we add a skeletal animation track and then we add a bunch of sections (each of them should point to an animation asset using the AnimSequence field)
from unreal_engine.classes import MovieSceneSkeletalAnimationTrack
# add an animation track mapped to the just added actor
anim = seq.sequencer_add_track(MovieSceneSkeletalAnimationTrack, guid)
# create 3 animations sections (assign AnimSequence field to set the animation to play)
anim_sequence = anim.sequencer_track_add_section()
anim_sequence.StartTime = 1
anim_sequence.EndTime = 3
anim_sequence.RowIndex = 0
anim_sequence2 = anim.sequencer_track_add_section()
anim_sequence2.RowIndex = 1
anim_sequence2.StartTime = 2
anim_sequence2.EndTime = 5
anim_sequence3 = anim.sequencer_track_add_section()
anim_sequence3.RowIndex = 1
anim_sequence3.SlotName = 'Hello'
anim_sequence3.StartTIme = 0
anim_sequence3.EndTime = 30
from unreal_engine import FTransform, FVector
from unreal_engine.classes import MovieScene3DTransformTrack
# possess an actor and get its binding guid
guid = seq.sequencer_add_actor(an_actor_in_the_scene)
transform_track = seq.sequencer_add_track(MovieScene3DTransformTrack, guid)
transform_section = transform_track.sequencer_track_add_section()
# set section size
transform_section.StartTime = 0
transform_section.EndTime = 5
# adding keyframes to section
transform_section.sequencer_section_add_key(0.0, FTransform(FVector(17, 22, 30)))
transform_section.sequencer_section_add_key(0.17, FTransform(FVector(30, 17, 22)))
listing folders
# get the root folders
root_folders = seq.sequencer_folders()
# get subfolders
sub_folders = seq.sequencer_folders(root_folders[0])
creating folders
new_folder = seq.sequencer_create_folder('Folder001')
# create subfolder
new_sub_folder = seq.sequencer_create_folder('SubFolder001', new_folder)
Some of the sequencer api operations do not update the editor, if you need to force an update you can use
seq.sequencer_changed(True)
the boolean argument (if True) move the editor focus to the sequencer
Check it here: https://github.com/20tab/UnrealEnginePython/blob/master/examples/sequencer_scripting.py