Documentation
Animation
Keyframe parameters, edit curves, and preview the result in VFX Loom 1.0.
A VFX Loom project is a flipbook: a fixed number of frames, played at a fixed rate. Animation is what makes those frames differ from one another — either by keyframing a node parameter over the timeline, or by feeding time into the graph as an ordinary value.
- Animate a parameterPress the keyframe button beside a parameter in the Inspector.
- Work in the timelineSelect, move, copy and delete keyframes on their tracks.
- Play it backUse the Preview transport to watch the finished sequence.
Before you animate: frames, rate and duration
How long the effect is, and how many frames it has, are project settings — not animation settings. Open Project Settings and use the flipbook block:
| Setting | What it controls |
|---|---|
| Resolution | The pixel budget for the whole atlas: 256, 512, 1024 or 2048. |
| Frames | How many frames the flipbook has. Pick a preset, or type any whole number in the custom field. |
| Frame rate | Frames per second. Duration is frames ÷ frame rate. |
| Frame padding | Spare pixels around each cell so neighbouring frames cannot bleed into each other. |
The readout underneath states the resulting grid, the true atlas size, the frame count, the rate and the loop length in seconds.
Frames are numbered from 0. A 16-frame project runs from frame 0 to frame 15,
and that is what the Preview and the Animation Editor both display (3 / 15).
Animate a parameter
Every animatable parameter has a small diamond button in the Inspector’s right-hand action column. That button is the whole workflow — it reads as three states and cycles through them:
| Button | Meaning | Pressing it |
|---|---|---|
| Dim outline ◇ | Not animated. | Starts animating the parameter, holding its current value, and opens the Animation Editor. |
| Accent outline ◇ | Animated, no keyframe on this frame. | Adds a keyframe here, holding the value the curve already reads. |
| Filled ◆ | A keyframe sits on this frame. | Removes that keyframe. |
Right-click the button to remove the animation altogether. The parameter keeps the value it was showing at the current frame and becomes an ordinary value again. This is deliberately not part of the cycle: it throws away every keyframe on that channel.
The state is drawn against the playhead, so a filled diamond goes hollow the moment you scrub to a frame with no key on it.
Which parameters can be animated
A parameter is animatable because its node declares it so. In practice:
- Scalar parameters animate as a single track.
- Vector2 parameters animate per component —
XandYare separate tracks, and you can animate one and leave the other alone. - Color parameters animate per channel —
R,GandBare separate tracks. - Bool and Enum parameters are never animatable. Half of a blend mode is not a blend mode.
Changing a value while it is animated
Typing a new number into an animated parameter, or dragging its slider on the node, does not wipe the animation. It writes a keyframe at the current frame — “make it read this, here”. If a keyframe already exists on that frame, its value is updated rather than a second one being stacked on top.
The Animation Editor
Open it with the Animation button at the bottom of the Quick Actions column, down the right-hand edge of the canvas. That button is the only way in; keyframing a parameter from the Inspector for the first time also opens it, so the track you just made is visible without going to look for it.
The editor floats over the graph. Nothing underneath moves to make room, and opening or closing it changes nothing about the project.
| Region | What it is |
|---|---|
| Header | The panel title, a summary line, and the buttons + Key, Fit, −, + and close (×). |
| Ruler | The frame numbers. Drag anywhere in it to scrub. |
| Track names | One heading per animated node, with its animated parameters indented beneath. |
| Timeline | One rail per parameter, with a diamond for each keyframe, crossed by the playhead. |
The summary line in the header reports the current frame, the number of tracks or the number of selected keys, and — when nothing is animated yet — tells you to press ◇ beside a parameter in the Inspector.
- Move the panel by dragging its header.
- Resize it by dragging the grip at the top centre of the header.
- Collapse a node by clicking its heading. Its keyframes stay on the heading row as small muted markers, and the animation is completely unaffected.
- Fit frames the whole flipbook. + and − zoom about the centre.
Navigating
| Gesture | Result |
|---|---|
| Wheel over the timeline | Zoom in and out, around the cursor. |
| Wheel over the track names | Scroll the track list vertically. |
| Middle-mouse drag | Pan the timeline sideways. |
| Drag in the ruler | Scrub the playhead. |
Clicking a keyframe — or a track row — also selects the node it belongs to and shows it in the Inspector, so the timeline, the canvas and the Inspector always agree about what you are editing. The row you last clicked is the active track, drawn in the accent colour; that is the track + Key acts on.
Working with keyframes
| Action | How |
|---|---|
| Add a key at the playhead | + Key in the header, or the ◇ button in the Inspector. |
| Select one | Click it. |
| Select several | Drag a marquee across empty timeline space. |
| Move keys | Drag a selected key sideways. Everything selected moves with it. |
| Delete | Delete or Backspace. |
| Copy / paste | Ctrl+C, then Ctrl+V to paste at the playhead. |
| Change interpolation | Double-click a key and pick a preset in the curve panel. |
| Set an exact frame or value | Double-click the key and type into the Frame and Value fields. |
Some behaviour worth knowing before it surprises you:
- Dragging changes timing, not values. A key dragged along the timeline keeps its value. To change the value, use the curve panel or the Inspector.
- A key will not land on an occupied frame. The move is refused rather than merging two keys into one you could never separate again. With several keys selected, a track whose keys would collide simply does not move; the others still do.
- Deleting the last keyframe of a track stops the animation. The parameter settles on the value it was showing at the current frame, and the row leaves the timeline. Undo brings back the whole thing.
- Paste lands on the track the keys came from, at the playhead, keeping the spacing of the original selection. Keys that would fall outside the flipbook are dropped. A pasted key landing on an existing one overwrites it.
- One gesture is one undo step per track. Dragging six keyframes takes one press of Ctrl+Z to take back, not six.
Playback and the timeline
Playback lives in the Preview panel, and the Animation Editor’s playhead is the same frame the Preview is showing — scrubbing in either moves both.
The transport row has five controls: < (previous frame), Play / Pause,
Stop, > (next frame) and the loop toggle. Under them is the frame
readout, frame / last frame.
| Control | Behaviour |
|---|---|
| Play | Starts playback and switches the view to Animated. The button reads Pause and turns accent-coloured while playing. |
| Stop | Stops and returns to frame 0. |
| < / > | Step one frame. Stepping wraps around the ends. |
| Loop | On by default. With loop off, playback runs to the end, stops, and resets to frame 0. |
| Timeline strip | Click or drag to scrub. Ticks are drawn per frame up to 64 frames. |
Keyboard: Space plays and pauses from anywhere in the workspace; ← and → step one frame. Both are ignored while a text field has focus.
Scrubbing and stepping always pause playback — the playhead would otherwise fight you for control of the frame.
View modes
The three buttons under the transport choose what the Preview shows:
- Atlas — the whole sheet, for judging frame-to-frame consistency.
- Frame — one cell, filling the panel, for judging detail.
- Animated — one cell, advanced by playback. This is the mode that shows the effect.
Switching away from Animated pauses playback.
While the preview is still rendering
Frames have to be rendered before they can be shown. During a render the transport
and the timeline are greyed out and refuse input, and the status line reads
playback locked. This is not a fault: playback and rendering compete for the same
queue, and letting them fight produces an animation that is not the one you would
export. The status line also counts frames as they arrive
(128x128 12/16 frames 24fps).
The preview quality row (Full, 75%, 50%, 25%) makes a heavy graph responsive while you work. It changes only what is drawn on screen — never the project, and never what an export produces.
The curve editor
Double-click a keyframe to open the curve panel. Its title bar names the track
it is editing, for example Transform › Offset.X.
What it edits is the segment leaving the selected key — how that keyframe reaches the next one:
- The plot draws the curve the renderer actually samples, including any overshoot, with a diamond per keyframe. Click a diamond to select it; drag one to change its frame and value at once. A key cannot be dragged past its neighbours.
- Frame and Value fields set the selected key exactly. Press Enter to commit.
- Interpolation offers eight presets in a grid; the active one is highlighted.
- Tangent handles appear only on a Smooth segment — the two square grips on leashes either side of it. Drag one to shape the curve. Dragging a handle also forces the segment to Smooth, because no other mode consults tangents.
| Preset | Shape of the segment |
|---|---|
| Hold | Holds the left key’s value until the next key, then jumps. |
| Linear | A straight line between the two keys. |
| Smooth | A smooth curve with editable tangent handles. The default. |
| In | Starts slowly, accelerates. |
| Out | Starts quickly, decelerates. |
| In-Out | Flat at both ends, fastest in the middle. |
| Bounce | Overshoots and settles, like a landing. |
| Elastic | Overshoots and oscillates into place. |
A Hold key is drawn hollow in the timeline, so “this segment does not move” is readable without selecting the key first.
The panel closes itself if the track disappears underneath it — because the node was deleted, or the animation was removed — rather than leaving a curve on screen that no longer belongs to anything.
Curve parameters
Some nodes take a whole curve as a parameter value rather than a single number. Those rows show an Edit curve (n points) button in the Inspector, which opens the same panel in a slightly different mode: the horizontal axis is X from 0 to 1 instead of a frame number, and + Point and − Point appear in the header for adding and removing points. This is a shaping curve, not a timeline — it is not driven by the playhead.
Animating without keyframes
Keyframes are not the only route. The Animation node category provides time-driven values — a Time node outputs the current position in the flipbook, and that value can be wired into any compatible input, shaped along the way and used to drive motion. Nodes downstream of it are re-evaluated per frame.
The two approaches mix freely in one project. See Nodes for what each node in the category does.
How animation reaches the effect
The animation is baked into the flipbook at export time: the output node is evaluated once per frame across the whole frame count, and the frames are packed into one atlas. Nothing about the curves is carried into the exported effect — what ships is the rendered sequence.
Export renders its own frames rather than reusing the preview’s, so the preview quality setting cannot affect the result.
See Export for the rest of the export workflow.
Tips and limitations
- Turning animation on changes nothing on screen until you move a key: the first keyframe holds the value the parameter already had.
- Animating a parameter creates exactly one keyframe. You need a second one at a different frame before anything moves.
- Changing the frame count keeps keyframes in the same proportional position along the flipbook, so they land on new frame numbers and may be rounded to the nearest frame. Check your timing after a large change.
- Only animated channels get a row. The track list is derived from the project every time it is drawn, so undo, redo and node deletion are always reflected.
- Two keys can never share a frame — the editor refuses the move rather than stacking them.
- There is no expression, driver or link between one parameter and another; parameters are shared by wiring the graph, not by referencing each other.
Troubleshooting
The keyframe button is missing on a parameter. That parameter is not animatable. Bool and Enum parameters never are, and a node only offers animation on the parameters it declares.
The Animation Editor is empty. Nothing in the project is animated yet. Select a node, then press ◇ beside a parameter in the Inspector.
Pressing + Key reports that nothing is animated. There is no active track. Animate a parameter first, then click its row in the track list to make it active.
A keyframe will not move where I want it. There is already a keyframe on that frame. Move or delete the one already there first.
Play does nothing and the controls look greyed out. The preview is still rendering, and playback is locked until it finishes. Watch the frame count in the status line.
The effect plays, but the preview shows the whole sheet. The view mode is Atlas. Switch to Animated.