Kalpana Docs
Designer MCP

Motion

Animate layers, set the timeline and check motion as frames.

animate

Add motion to layers. Motion adds to what a layer has unless replace is set, and the timeline grows to fit.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
animationsobject[]Yes—One per layer, with the fields below.

Each animation:

FieldTypeDefaultDescription
node_idstring—Required. The layer.
presetstring—fade_in, slide_in_up, slide_in_down, slide_in_left, slide_in_right, scale_in, pop_in, blur_in, spring_in, bounce_in, tilt_in, draw_on, wipe_in_right, wipe_in_left, wipe_in_up, wipe_in_down, pulse, float, spin, shake, drift, count_up, count_down, orbit, ring_spin, peel, decoration_on (draws a text's underline or strikethrough on), and the outs fade_out, slide_out_up, slide_out_down, slide_out_left, slide_out_right, scale_out, blur_out.
startnumber0When the motion starts. Before it, the layer holds the preset's first value.
durationnumber0.6Seconds the preset takes.
amountnumberPer presetStrength: px for slides, float and blur; a factor for scale and pulse; degrees for spin.
easingeasingPer presetA name (linear, ease, ease_in, ease_out, ease_in_out, ease_out_quart, ease_out_expo, ease_in_cubic, ease_in_out_cubic, ease_in_back, ease_out_cubic, ease_out_back) or bezier [x1, y1, x2, y2].
tracksRecord<string, keyframe[]>—Keyframes per property, replacing that property's keyframes. Each keyframe: t (required), value, easing, hold, spring (bounce, floor); fill_color and stroke_color take color.
text_reveal, text_exitobject—Text layers: words or letters in or out one after another: unit (word, letter, sentence), style (fade, slide_up, slide_down, slide_left, slide_right, pop, typewriter, scramble), stagger, duration, distance, easing.
staggerobject—Apply the motion to the layer's children one after another: each (required, seconds), from (first, last, center, point), point.
shapesstring[][]—Vector layers: outlines to morph between with a shape track.
path, auto_orientstring, boolean—Move along an SVG path over duration; turn to face along it.
physicsobject—Drop or throw in under gravity: from ([0, -600]), gravity (3000), bounce (0.45), throw, from_rotation, start.
followobject—Trail a moving parent on a spring: stiffness (180), damping (0.4), sway.
stretchobject—Squash and stretch with speed: amount (0.2), max (0.4).
wiggleobject—Smooth random jitter: amount (10), frequency (2), rotation, scale, ramp, seed.
motion_blurobject—Smear along the movement: shutter (1/60), samples (16).
clockobject—The layer's own clock for it and its children: start, from, speed, repeat, hold_at.
counter_formatobject—Text with a counter track: decimals, grouping, separator, decimal_point, step.
replacebooleanfalseClear the layer's existing motion first.

Track names and their values at rest:

TrackUnit (rest)
translation_x, translation_y (also x, y), translation_zpx from the layer's place (0)
scale_x, scale_yfactor about the centre (1)
resize_x, resize_yfactor that rebuilds the box, keeping radii and strokes (1)
rotation, skew_x, rotation_x, rotation_ydegrees (0)
opacity0 to 1 (1)
blurpx (0)
clip_left, clip_top, clip_right, clip_bottom0 to 1 of the layer's box (0, 0, 1, 1)
path_trim_start, path_trim_end0 to 1 of the outline drawn (0, 1)
corner_radius, stroke_widthpx (the layer's own); on text, outline rings scale with the stroke
peel, peel_angle0 to 1 (0); degrees where the peel starts
shadowfactor on drop shadows, shapes and text (1)
counterthe number shown in a text layer
text_path_offset, text_ring_turnlaps along a text path; degrees a text ring turns
decoration_progress0 to 1 of a text's underline and strikethrough drawn, in reading order (1)
motion_progress0 to 1 along path
shapeindex into shapes (1.5 is halfway from the second to the third)
fill_color, stroke_colorhex, in color

kinetic_type

A phrase laid out word by word by the real text engine, with motion that gives every word its own path. Seeded, so it varies per phrase but repeats exactly.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
textstringYes—The phrase.
x, y, widthnumberYes—Where the block sits in its parent and how wide it may be.
font_sizenumberYes—px.
font_family, font_stylestringNo—The font.
colorstringNo"#111111"Text colour.
alignstringNo"left"Line alignment.
line_heightnumber | stringNo1.15A multiple of the size, px when above 4, or a percentage like "108%".
motionstringNo—fly, drop, scatter, pop, wave, glitch or zoom.
start, duration, staggernumberNo0, 0.7, 0.08When it starts, seconds per word, seconds between words.
exit_atnumberNo—Words fly back out in reverse at this second.
emphasisobject[]No—Per word, by index or word: color, font_family, font_style, scale, rotation, highlight (a pill colour), strike_at.
strike_at, strike_colornumber, stringNo—Strike the whole phrase through at this second.
seedintegerNo0The variation.
name, parent_idstringNoThe text, the pageThe group's name and parent.
  • Returns: The group id and the block's size.

make_transition

Shapes that cover or reveal the design, on top of everything.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
stylestringNo—circle (rings grow from origin), stripes, blades or burst (rays, then a flood).
partstringNo—out ends fully covered at at + duration; in starts covered and reveals.
atnumberNo0When it starts.
durationnumberNo0.6Seconds.
colorsstring[]NoBuilt-inThe layers of colour, first to last.
origin[x, y]NoThe centreWhere circles and bursts start.
anglenumberNo-18Stripes: the tilt.
countintegerNo5 stripes, 14 raysHow many stripes or rays.
size[w, h]No[1920, 1080]The scene's size.
namestringNo—The layer's name.

camera

Films the page's layers with a camera. The layers move into a page-sized Camera frame at the back; kinetic type and transitions stay on screen above the shot. Calling it again replaces the move.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
stopsobject[]Yes—Where the camera is over time: t (required), zoom (1 is the whole design), focus ([x, y] at the centre of the shot), rotation, tilt_x, tilt_y, easing (ease_in_out), spring.
idsstring[]NoEvery top-level layer except transitionsThe layers the camera films.

make_particles

A region filled with small shapes spread by a seed, behind the other layers unless front is set.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
region[x, y, w, h]Yes—The area they live in, in the parent.
countintegerYes—1 to 400.
shapesstring[]Nodot, ring, sparkledot, ring, star, plus, cross, pill, square, triangle, blob, sparkle.
motionstringNo—float, twinkle, burst (from origin), rain, rise, pop or still.
palettestring[]NoBuilt-inColours as hex.
size[min, max]No[6, 28]Particle sizes, px.
opacity[min, max]No[0.5, 1]Opacity range.
depthnumberNo0.2Share pushed out of focus, 0 to 1.
avoid[x, y, w, h]No—A box kept clear, such as behind a headline.
start, duration, untilnumberNo0, 1.2, start + duration + 4When motion starts, how long the arrival takes, when floating stops.
strengthnumberNo14How far they drift, px.
origin[x, y]NoThe region's centreBurst: where they fly from.
frontbooleanNofalsePut the field on top.
seedintegerNo0The same seed gives the same field.
name, parent_idstringNo"Particles", the pageThe group's name and parent.

make_cursor

A pointer that glides through stops with eased moves; each click presses and spreads a ripple. It sits on top.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
stopsobject[]Yes—At least one: x, y (where the tip is), t (when it arrives), click (false).
stylestringNo—arrow, pill (with label) or dot (a touch).
labelstringNo—Pill style: the name on it.
color, ripplestringNoNear-black, the cursor colourColours.
sizenumberNo40Arrow size, px.
namestringNo—The layer's name.

make_list

Rows of UI with text and an optional value on the right. Rows spring in one after another and a highlight slides between rows at the select times; pair it with make_cursor clicks.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
items{text, value?}[]Yes—The rows; value is shown on the right ("312", "+4%").
x, y, widthnumberYes—Top-left of the list and its width.
select{index, t}[]No—The highlight's path: the row and when it arrives.
numberedbooleanNofalseNumber each row, for ranked lists.
staticbooleanNofalseA still list or table built as layout flows, with no motion or highlight.
row_height, gapnumberNo64, 10Row height and the gap between rows, px.
start, staggernumberNo0, 0.07When rows start arriving, and the seconds between them.
fill, colorstringNoWhite, near-blackRow fill and text colour.
accent, accent_textstringNo—Highlight fill and the text colour on it.
dividerstringNo—Static lists: a hairline under each row in this colour.
font_family, font_sizestring, numberNo—The font.
name, parent_idstringNo—The group's name and parent.

Cards on a track that step to the next card every step seconds, neighbours swung back in 3D. An animation inside one design; an Instagram carousel is one page per slide instead.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
items{image?, title?, subtitle?}[]Yes—The cards; image is an https URL.
center_x, ynumberYes—Centre of the focused card, and the top of the cards.
card_width, card_heightnumberNo720, 940Card size.
radiusnumberNo6% of the widthCard corner radius.
start, step, move_durationnumberNo0, 0.5, 0.35When the first card is centred, seconds per card, seconds per move.
tiltnumberNo58Degrees the neighbours swing back.
side_scale, side_shadenumberNo1, 0.12Neighbours' size and how much they fade.
gapnumberNo−2% of the widthSpace between a neighbour and the centre card.
enterbooleanNotrueSlide the carousel up into place just before start.
card_fill, art_fill, color, subtitle_colorstringNoWhite, #F4F4F4, near-black, #8A8A8AColours.
font_family, name, parent_idstringNo—The font, the group's name and parent.

stagger_times

Start times for N items that cascade. Free.

ParameterTypeRequiredDefaultDescription
countintegerYes—How many items.
startnumberNo0The first start.
stepnumberOne of these—Seconds between starts.
totalnumberOne of these—Seconds from the first start to the last.
easestringNo"linear"linear, in, out or in_out: how the gaps shrink or grow.

set_timeline

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
durationnumberNo—The page's length in seconds, at most 60.
fpsnumberNo—Frame rate.
still_timenumberNoThe last frameThe second a still image of the page shows, where all its content is in place. Image batches use it unless the batch gives its own. A negative value clears it.

set_choreography

Camera moves and morphs between layers, in their stored format.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
choreographyobjectYes—The stored format (read the current value with get_design and timeline); {} clears it. A flow alone (slides in order joined by transitions, under stage and steps) is compiled into the camera and morphs it plays. Validated before saving; the timeline grows to fit.

edit_keyframes

Tune existing motion one keyframe at a time. Edits apply in order; if one cannot apply, none do.

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
editsobject[]Yes—The edits below.
opFieldsDoes
addnode_id, track, t, value (required), easing, holdAdd a keyframe, or replace the one at the same time.
updatenode_id, track, at (required), t, value, easing, holdChange the keyframe at at: move it, or change its value, easing or hold.
deletenode_id, track, at (required)Remove the keyframe at at.
shiftnode_id, by (required), tracks, fromMove a layer's whole motion, and that of the layers inside it, by by seconds.

clear_animation

ParameterTypeRequiredDefaultDescription
page_id, intentstringYes—The page, and what and why.
node_idsstring[]NoEvery layerThe layers to clear.
tracksstring[]NoAll motionOnly these properties; shape removes a shape morph with its outlines.

render_timeline

ParameterTypeRequiredDefaultDescription
page_idstringYes—The page.
node_idsstring[]NoEvery animated layerOnly these layers (or groups).
propertiesbooleanNotrueA row per property under each layer.
  • Returns: A diagram: a time ruler, a row per animated layer with a bar over its motion, keyframe diamonds per property, and where the motion ends.

render_contact_sheet

ParameterTypeRequiredDefaultDescription
page_idstringYes—The page.
framesintegerNo12Frames evenly spaced from start to end, at most 32.
timesnumber[]No—1 to 32 exact seconds, in place of frames.
start, endnumberNo0, the endThe range.
columnsintegerNo4Frames per row, at most 8.
cell_widthintegerNo320Width of each frame, at most 320 px.
  • Returns: One PNG of the frames, left to right and top to bottom, and the times shown. For one moment at full preview size, use render_design with time.
Was this page helpful?

Updated 8 Nov 2026

On this page