Animation System
Yugma includes a keyframe-based animation system accessible via the Timeline panel at the bottom of the editor.
Timeline Panel
The Timeline sits at the bottom of the viewport and provides:
- Play/Pause controls
- Keyframe track per object — visual diamond markers for each keyframe
- Playhead — Draggable time cursor showing current frame
- FPS control — Adjustable frames per second (default: 24)
Working with Keyframes
Adding Keyframes
- Select an object
- Move the playhead to the desired frame
- Modify the object's transform (position, rotation, scale)
- A keyframe is automatically recorded at that frame
Playback
Press the Play button or use the timeline controls to preview the animation. Objects interpolate between keyframes according to each keyframe's interpolation mode.
Interpolation & Easing
Each keyframe carries an interpolation mode — linear (the default for timeline-recorded keyframes), cubic (eased), or step. The AI set_animation tool sets it via a per-keyframe easing hint: ease-in, ease-out, ease-in-out, and spring map to cubic, step to step.
Animation Data
Keyframes are stored per-object in the scene state:
{
"keyframes": {
"0": {
"position": [0, 0, 0],
"rotation": [0, 0, 0],
"scale": [1, 1, 1]
},
"24": {
"position": [2, 0, 0],
"rotation": [0, 1.57, 0],
"scale": [1, 1, 1]
}
}
}
Joint & Clip Animation
Beyond transform keyframes, two AI-driven animation paths exist for imported models:
- Joint-space animation — for kinematic catalog/URDF models, the AI
set_animationtool acceptsjointTargets: each entry eases a named joint from its current value to an absolute target (radians for revolute/continuous joints, meters for prismatic), clamped to the joint's URDF limits. - Embedded GLB clips — imported GLB models with baked animation clips can play them via the AI
play_animationtool.
Current Limitations
- Timeline keyframes drive transform properties only (position, rotation, scale)
- No material property animation (planned)