compreel

Motion vocabulary · Diagram builds

Ticking checklist

Rows slide in one per beat and draw their tick, cross or note; an optional stamp slams on at the end.

Live loop · 7 s · 1920×1080 at 24 fps

Parameters

ParameterTypeWhat it does
src / points"/assets/<screen>.jpg" / [{x, y, label}]callouts: the screen and 2-5 points (x, y in 0..1 of the screen)
items / title / stamp[{text, mark?: "yes"|"no"|"note", sub?}] / string / stringchecklist: 2-5 rows, a heading, a stamp slammed on at the end
hub / nodes / fromstring / string[] / indexnetwork: the hub, 3-8 nodes and the node whose packets pave its spoke
step_msmsone beat between two callouts or two rows
ease{"<move>": ease}retune any named move (see the entry's moves): a preset name ("out-expo"), a cubic-bezier [x1, y1, x2, y2], {spring: [hz, damping]} or {trapezoid: [accel, decel]}. A wrong move name or curve throws, it never falls back. A move measured from a reference clip (the replica workbench's measure/*.json, frame-keyed) becomes a curve without conversion: MV.fitEase(doc, "x", {from: 133, to: 142}) or `motion-fit <file> --measure x --from 133 --to 142 --ease`
camera{focal?, x?, y?, z?}the scene's camera: pan x / y and push z as numbers or keyframes [[ms, value, ease?], ...]; objects at different depths move differently (real parallax). focal default 1800
brandhex
Default: #6B5BFF
the site's brand colour; the component derives its accent (>= 3:1 on the stage), surfaces and ink from it
stage"dark" | "light"
Default: "dark"
the stage the component sits on
displayfont stem
Default: "Inter-Bold"
headline stem; name it in the call so the runtime loads it
bodyfont stem
Default: "Inter-Regular"
UI / body stem; name it in the call so the runtime loads it
start_msms
Default: 300
when the component starts, ms into the shot
backgroundboolean
Default: false
draw the stage background (off: transparent over the shot's own stage)
place{x, y, w, h, z?}the component's place in the shot's layout: it fits its 1920x1080 composition into this stage rect (centred, aspect kept); z orders components front to back. Default: the whole stage

Moves and their curves

Every move is eased on its own. Retune one with ease: { "<move>": <curve> }, a curve name or cubic-bezier handles.

MoveCurveWhat it does
title.inhousethe heading fading in
row.inhouseeach row sliding in 40 px from the left
mark.circlelinearthe mark's circle drawing
mark.glyphout-quadthe tick, cross or note drawing
stamp.dropin-cubicthe stamp dropping from 1.6x onto the list
stamp.settleout-quadthe stamp's small rebound settling

This demo

variant"checklist"
items[{"text":"Reads your product page","mark":"yes"},{"text":"Writes the script","mark":"yes"},{"text":"Draws every shot","mark":"yes"},{"text":"Needs an editor","mark":"no"}]
stamp"Ready"
brand#2F9E6E
stagedark
<script src="/vendor/motion-vocab.js"></script>
MV.bind("s3", MV.diagram(el, {"variant":"checklist","items":[{"text":"Reads your product page","mark":"yes"},{"text":"Writes the script","mark":"yes"},{"text":"Draws every shot","mark":"yes"},{"text":"Needs an editor","mark":"no"}],"stamp":"Ready","brand":"#2F9E6E","stage":"dark","display":"Inter-Bold","body":"Inter-Regular"}));

When to use it in a launch film

What the product does and does not need from you, or the promises before the end card.

Why it works

Drawing each mark makes it a decision, not a bullet; the stamp closes the list with one word.

Do not combine with

  • more than five rows
  • a cross for something the brief does not say

Job in the film

  • Proof
  • Feature
  • End card

Natural length

4.0–7.0 s

Make a film with these moves in LaunchReel

More diagram builds

All motion components →