Overview
This is the "exit" for an animation. It evaluates the upstream graph once for every
frame and combines all frames into a single sprite sheet. Its role is to bake the
results of parameters driven by time_source into a form that a game engine can use
directly.
Usage tips
- Basic setup:
time_source(progress) → waveform node (such as motion (Wobble)) → parameter to animate, then place this node at the end of the graph that creates the artwork (→ Guide "07 Animation"). - Select this node to use the playback preview in the inspector (play/pause, frame stepping, and current-frame display). Check the motion here before exporting.
- For looping motion such as rotation or an idle animation, make the waveform complete
exactly one cycle over
total_framesto avoid a visible seam (one sawtooth cycle per loop is the standard setup). columns=0(automatic) produces a roughly square layout. If the target engine requires a single horizontal row, explicitly setcolumns = total_frames.- Send the result to downstream
batch_renderor output nodes. If you need frame information, pass along the metadata output as well (frame_count / fps / columns, and so on).
Common pitfalls
- Every frame looks identical: no waveform is connected to the parameter you want to animate; it still has a direct numeric value. Check the connection to the parameter's input port.
- Frame dimensions change during the animation: rendering fails explicitly to avoid
losing content. Set an upstream
solid_renderormodel_rendertoframe_mode = FixedCanvasso every frame uses fixed dimensions and center. - The sheet layout is not what you expected: check
columns. A value of 0 uses automatic layout, so set it explicitly when ordering matters. - Motion looks choppy:
total_framesis too low, or the motion has no easing. Increase the frame count or insertease_in_out.
Technical details
- Multi-frame evaluation runs at the
evaluate_graphlevel. This node'sprocess()is the fallback for single-frame evaluation. - Starting with P07A,
AnimationRenderoutputs the dedicatedSpriteSheettype. - It also provides
frame_count + fps + columns + rows + frame_width + frame_height + fill_orderas helper metadata pins. - With
columns=0, it automatically chooses a roughly square layout. Usecolumns>0for an explicit layout. - Promoted
total_frames,fps, andcolumnsuse their resolved connected values. - Every frame image must have identical dimensions. A mismatch reports an error with FixedCanvas guidance instead of silently cropping to the first frame.
- It is designed to be used with an upstream TimeSource node.
Examples
- Connect TimeSource → transformation nodes → AnimationRender in that order.
- Check AnimationRender's output sprite sheet in Preview, then save it as PNG.
Solid turntable
When baking a Solid rotation animation, set Solid Render to FixedCanvas.
TimeSource.progress
-> SawtoothWave.input
-> SolidTransform.rotate_z
-> SolidRender.image
-> AnimationRender.image
If Solid Render remains set to AutoFit, the size or center of individual frames
may change with the angle, causing the sprite sheet to jitter.
Related nodes
time_source— supplies frame progress (almost always paired with this node)motion/motion/keyframe_clip— convert progress into motionsprite_sheet_playback/sprite_sheet_pack— play or repack an existing sprite sheetspritesheet_to_aseprite— when you want to export an Aseprite project