Study · 22 launch films from X · measured frame by frame

Launch Motion Playbook

We studied 22 launch films from X, frame by frame: 832 seconds, 137 measured moves, and every cut checked by eye. This page shows what the strong ones share, the numbers behind each rule, and our own coded versions of the best techniques.

Median length
27 s
Cuts per minute
18 (0-154)
Words per card
3.5
Readable hold
0.88 s
Text arrives
0.73 s ease-out
UI arrives
0.70 s ease-out
Camera move
0.96 s in-out
Overshoot > 2 %
6 of 137
0.00 s

What the best ones do

Twelve rules, each backed by the frames

Each rule comes from patterns that repeat across the set, and each evidence line points to the films and the measurements.

Choose one grammar: flow or snap

Flow films move one continuous camera and morph shared objects, with almost no cuts. Snap films hold still frames and change them on the beat grid. The films that mix the two without a plan read as busy.

Flow: Print 0 cuts in 51.5 s · azatsol 0 · Pump.fun 1 · Pomelli 4 cuts, 27 scene changes. Snap: Brim3n 32 cuts in 23.6 s, 63 % still frames · Whop 49 cuts in 19.1 s.

Take the camera to the one thing that matters

No strong film shows a flat screen recording for long. The camera pushes onto the click target, or lifts one control onto an empty stage. Dense UI is texture, never content.

Creator Studio: 11 pushes of 1.85-3.74x in about 1 s · AI Studio: x5.8 in 2.2 s with two hidden punch-in cuts · 16 of 22 films flagged for text too small to read on a phone.

One house curve, from two families

Arrivals ease out hard: most of the travel in the first quarter, then a long, soft landing. Camera moves ease in and out, as a gentle S-curve or a snap. Springy overshoot is not the house style.

Text arrivals median 0.73 s, UI 0.70 s (outExpo, outQuint, outCirc) · camera 0.96 s (inOutCubic, inOutQuad) · overshoot above 2 % in 6 of 137 moves.

Accelerate into the cut, decelerate after it

The cleanest transitions hide the cut at peak speed. The outgoing shot speeds up with an ease-in; the incoming shot starts larger or wider and settles slowly.

16 measured moves into a cut, median 0.66 s, mostly inCubic · Figma: inCubic 0.64 s in, outQuart 2.1 s out · TROOVY: x1.27 in, x1.225 -> 1 outQuint 1.27 s.

Keep it alive, but let each claim settle

About three quarters of all frames move, and text keeps drifting after it lands. But the key states hold still long enough to read: captions, proof, and the end card.

Jumper: text drifts 0.1 W/s · Print: 1.6-2.0 s still reading time per caption · azatsol: 80 % of frames move and its claim is readable for only 0.94 s (flagged).

Show the benefit as one change of one object

The strongest moments turn the product benefit into a single visible change: before, one trigger, after.

Umbra: one click, then every name and salary masks, one character at a time · Jumper: a scan line turns a coin into a dot hologram in 0.55 s · AI Studio: one button carries every state · Aside: a password field hides the phrase itself.

Carry one motif through every transition

One shape, device, or material returns in the hook, the transitions, and the end card, so many shots read as one world.

Jupiter: one glowing lens links 8 scenes, then becomes the URL pill · Grainient: the caret returns about 14 times, then becomes a slider · Pomelli: 9 shared-object morphs.

The accent colour marks the newest thing

In an otherwise near-monochrome frame, one accent lives only on the newest glyph, word, or item, then fades to ink.

Aside: cyan to ink in 0.10-0.25 s · azatsol: coral for 4 frames · Figma: the newest word in agent blue · Lovable: a gradient on the newest 12-16 characters.

Repeat a template, then vary it

One demo unit with a fixed clock repeats until the viewer knows it; from the third repeat, only the framing changes, or the loop gets faster.

Lovable: result cut at +3.13 s in every cycle · Figma: loops shrink from 14 s to 3.5 s · Husher: three titles of exactly 26 frames.

Put the big moments on the sound, not every cut

Most films cut on the picture, not on the beat. But the drop, the key click, the reward, and the logo land on the audio, and the music falls away under the end card.

372 detected cuts: lift about 1.1 over chance · Jupiter, Pump.fun: first product beat on a +20 dB drop · Print: 14 of 17 camera moves end on an onset · Jumper Pass: all 4 cuts on low-end hits.

Open on tension; build the brand from the product

The hook is a problem, a provocation, or an abstract macro, never a static logo. The logo then grows out of the product: its UI, its shapes, its outputs.

Aside: 16.8 % problem before the title · Hunch: a provocative query typed in its own search field · Figma: a 76x macro pull-out · Hunch: UI panels fold into the logo.

End calm, legible, with a next step

The shared end card: the mark lands, slides aside, and the wordmark comes out from behind it; the URL settles; everything holds in quiet.

Four films use the mark-slides end card · the music drops before it (Jumper Pass: -7 dB to -44 dB) · 12 of 22 films show no URL at the end.

Pattern library

Twenty-one moves we can reuse

Each demo is our own rebuild of a technique from the set, with the measured timing, coded as a pure function of time in kit/patterns.mjs. The same code renders these cards and our film engine. Scrub the keyframe timeline to study a move frame by frame; the amber diamonds are the keyframes.

Isolate and magnify

One control carries the feature: a publish button, a URL field, a toggle.

Pan
inCubic 0.41 s
Cut 1
UI to black, x1.9, drift outQuart 1.1 s
Cut 2
x2.4, settle outCirc 0.9 s (x5.8 in 2.2 s)
Press
0.90 outSine 0.14 s, hold 0.17 s, release inOutCubic 0.39 s
States
label swap every 1.5 s
camera: cubic-bezier(0.65, 0, 0.35, 1)

Seen in: Google AI Studio 0:14.20, Pomelli 0:45.67

Prompt to result loop

AI and builder products: a request, then the built result, repeated 3-7 times.

Card
outCirc 1.11 s, 67 % -> 80 % W
Prompt
types in 1.1 s
Chip
lands at +1.10 s
Cut
result at +3.13 s, already rising (outQuart)
outCirc: cubic-bezier(0.08, 0.82, 0.17, 1)

Seen in: Lovable 0:02.80, Figma canvas agent 0:04.00

Chapter slam and title-to-control cut

Split a tour into chapters; each title points at the control that comes next.

Enter
2x -> 1x, outExpo 0.82-0.92 s
Glow
cyan to white, 0.2-0.5 s
Life
26 frames at 24 fps
Cut
to the same words on the control, lands in 0.2 s
outExpo: cubic-bezier(0.16, 1, 0.3, 1)

Seen in: Husher × Axiom 0:07.96

Macro pull-out and cut-through zoom

Open on an abstract detail; link a detail and its context without a visible seam.

Pull-out
log scale from 30-76x, outQuart 0.95 s
Into the cut
inCubic 0.64 s, x1.46
After the cut
outQuart 2.1 s, x1.32
Centre
subject within 4 % on both sides
inCubic: cubic-bezier(0.32, 0, 0.67, 0)

Seen in: Figma canvas agent 0:00.08, Figma canvas agent 0:27.29

Slot swap line

Show breadth in one line: many assets, integrations, or cases.

Swaps
9 hard swaps every 0.133 s, no tween
Reel
widen 0.23 s, scroll 0.65 s
Land
outCirc 0.50 s
outCirc: cubic-bezier(0, 0.55, 0.45, 1)

Seen in: Pump.fun 0:08.43

Blur-in statement and scale-matched cut

Two-to-five-word claims between demo beats.

Per word
blur 8 px -> 0 in 0.28 s
Stagger
0.133 s, the line re-centres
Push
x1.27 with an ease-in, cut at peak speed
Next card
from x1.225, outQuint 1.27 s
push into the cut: cubic-bezier(0.28, 0.03, 0.83, 0.25)

Seen in: TROOVY 0:00.40, Jupiter 0:01.41

Scale punch

Open a reveal: a word larger than the frame lands at reading size.

Scale
about 7x -> 1x
Curve
outExpo 0.9 s
Blur
small, gone as it lands
outExpo: cubic-bezier(0.16, 1, 0.3, 1)

Seen in: TROOVY 0:03.23, Polymarket 0:00.00

Rolling word list

Lists: chains, currencies, use cases. The fixed prefix does the talking.

Step
every 0.72 s (can shrink 0.44 -> 0.06 s)
Roll
outQuart 0.42 s
Neighbours
size and opacity by distance
outQuart: cubic-bezier(0.25, 1, 0.5, 1)

Seen in: TROOVY 0:13.13, Aside 1:03.46

Accent-trail type-on

A headline or an AI answer that the product seems to write live.

Rate
one glyph every 50 ms (14-27 per second)
Trail
#7ebade -> #108bc1 -> ink in 0.2 s, outQuad
Line
centred on its visible width
Caret
solid while typing, blinks 0.5 s only when idle
Edit
backspace 30 per second, then retype
colour blend: cubic-bezier(0.5, 1, 0.89, 1)

Seen in: Aside 0:01.30, Grainient (Figma Motion) 0:08.90

Macro click and payout stream

The climax of a demo: the one click that matters, very close, then the reward.

Button
about 0.6 W, crop the neighbour
Column
steps one line every 0.21 s
Step
most of it in 1 frame, settle 3-4 frames
Camera
slow push x1.2
step settle: cubic-bezier(0.19, 1, 0.22, 1)

Seen in: Polymarket 0:12.76, Creator Studio 0:43.43

Masking sweep

The benefit is a change of state: private, hidden, verified.

Before
the exposed cards pop in: 2 frames solid, then 0.13 s cross-fade
Trigger
logo pop outCirc 0.52 s, a press, a 0.27 s cyan flash
Mask
names 0.09 s per character, then amounts 0.067 s, 0.15 s pause at the space
Order
2 cards, 2 more at +0.13 s, the last at +0.9 s
Camera
pulls back x0.74, ease-in 2.3 s, hard cut at peak speed
pull-back (inCubic): cubic-bezier(0.32, 0, 0.67, 0)

Seen in: Umbra 0:09.07, Aside 1:17.64

One-take tilted tour

Many features in one UI, shown as one continuous take.

Move
S-curve, about 0.9 s
Stage
yaw and roll open an empty corner
Caption
all words in a fixed 0.90 s window
Hold
1.6-2.0 s, fade 0.5 s
sCurve: cubic-bezier(0.45, 0, 0.55, 1)

Seen in: Print 0:02.83

Orbit, then resolve

"The system is working": analysing, generating, matching. Better than a spinner.

Push
inOutCubic 0.79 s to the trigger
Orbit
4-6 inputs ride the ring about 3 s
Resolve
collapse, then the result
inOutCubic: cubic-bezier(0.65, 0, 0.35, 1)

Seen in: Pomelli 0:15.20, Lovable 0:01.40

Breadth wall and count-up

Prove "many": tokens, partners, templates, outputs.

Wall
rows move in opposite directions
Number
count-up outExpo about 1.2 s
Scrim
darken the centre for the number
outExpo: cubic-bezier(0.16, 1, 0.3, 1)

Seen in: Jupiter 0:14.13, Hunch 0:43.87

Word-per-cut sentence

A claim over changing footage, in a manifesto or a teaser.

Words
one every 5 frames (0.17 s)
Cuts
land with the words
Rate
update on twos: 15 images per second
stepped: cubic-bezier(0.25, 0.25, 0.75, 0.75)

Seen in: Whop 0:02.07, saviomartin 0:00.00

Scramble decode

Words about security or processing: encrypted, private, decoded.

Resolve
left to right, 0.045 s per character
Spin
about 7 wrong glyphs in 0.35 s
linear: cubic-bezier(0.25, 0.25, 0.75, 0.75)

Seen in: Aside 1:14.01, fomo 0:08.46

Chart draw-on and counter

One headline metric: the line draws and the number counts in the same time.

Line
draws with a glowing head
Counter
linear 24 frames, or decelerating (tau 1.92 s)
Tooltip
pops at the end
outCubic: cubic-bezier(0.33, 1, 0.68, 1)

Seen in: azatsol (omnipair) 0:05.63, Brim3nEdits 0:11.03

Card fan-out

Offers, perks, templates, plans: a set of items that belong together.

Rise
0.10 H, scale 0.84 -> 1
Curve
1.01 s, 73 % of travel in 0.20 s
Fan
-25 to +25 degrees, no overshoot
fan-out: cubic-bezier(0.17, 0.81, 0, 0.76)

Seen in: Jumper Pass 0:02.40

Motif to URL pill

The end of a film with a strong shape motif: the motif itself becomes the URL.

Arrive
two lenses and a droplet, outCubic 0.4 s
Neck
deepens to 55 % of H in 0.9 s
Contract
height 96 % -> 21 % of H, inOutCubic 0.92 s
Swap
claim to URL 0.39 s into the contraction
Rim
lime edge, teal band, dark centre
inOutCubic: cubic-bezier(0.65, 0, 0.35, 1)

Seen in: Jupiter 0:21.86

End card: mark slides, wordmark unmasks

The last 3-4 seconds: the brand, the address, and quiet.

Mark
lands 1.45x -> 1 in 0.3 s, holds 0.33 s
Slide
0.14 W in 0.98 s
Letters
unmask from behind it, tracking +40 % -> 0
Hold
1.9 s, music out
mark slide: cubic-bezier(0.26, 1.16, 0.75, 1)

Seen in: Jumper Pass 0:13.63, Husher × Axiom 0:18.13

CRT collapse to URL

A clean last beat after a busy sequence.

Flash
2 white frames, band, line
Collapse
line width halves every frame
URL
1 character per frame after 0.33 s of black
stepped: cubic-bezier(0.25, 0.25, 0.75, 0.75)

Seen in: Hunch 0:51.40

Measured motion

How long a move takes, and how it lands

Each dot is one move that an analyst tracked frame by frame and fitted with an easing curve (137 moves in 22 films). The tall tick in each row marks its median. Hover or focus a dot for the film, the move and the fitted curve.

ease-outease-in-outovershoot (spring or back)linear or othermedian
Measured move durations by move typeStrip plot of 137 measured moves: duration in seconds by move type, coloured by easing family.0.0 s0.5 s1.0 s1.5 s2.0 s2.5 s3.0 s3.5 sCamera move (push, pull, pan)42 moves · median 0.96 sUI or object arrives40 moves · median 0.70 sText arrives39 moves · median 0.73 sAccelerates into a cut or exit16 moves · median 0.66 s

Durations are fitted easing durations. Strong ease-outs spend their last 10-20 % of time on a travel that the eye barely sees, so the perceived arrival is about half the number shown.

Show all 137 measured moves as a table
Move typeFilmMoveDurationBest easingFitted curve
Accelerates into a cut or exitLovableKinetic word All: exit phase (bounding box, no template score)0.24 sinCubic
Accelerates into a cut or exitGoogle AI Studiopush-in phase A: form pan accelerates into cut 10.41 sinCubiccubic-bezier(0.68, -0.03, 0.88, 0.38)
Accelerates into a cut or exitUmbrachain list scroll accelerates into the cut0.41 sinCubiccubic-bezier(0.38, 0.00, 0.83, 0.20) 0.42 s
Accelerates into a cut or exitazatsol (omnipair)Title words part as the light line appears (first word, leftward)0.42 sinCubiccubic-bezier(0.22, 0.04, 0.73, 0.14) 0.42 s
Accelerates into a cut or exitCreator StudioModal reframe pull-back0.46 sinCubiccubic-bezier(0.75, 0.00, 0.62, 1.00)
Accelerates into a cut or exitLovableApp wall bursts past the camera0.53 sinOutSinecubic-bezier(0.61, -0.01, 0.68, 0.74)
Accelerates into a cut or exitfomoField whip right into the cut0.59 sinCubic
Accelerates into a cut or exitFigma canvas agentMacro redline zoom-out accelerating into the cut0.64 sinCubic
Accelerates into a cut or exitLovableIcon burst pull-back (camera)0.67 soutQuintcubic-bezier(0.38, 0.89, 0.23, 0.78)
Accelerates into a cut or exitPrintC17 screen drops out of frame (exit)0.76 sinOutCubicnot usable (fit gives y2 = 1.60)
Accelerates into a cut or exitGrainient (Figma Motion)3D collection grid exits upward (whip)0.82 sinQuart
Accelerates into a cut or exitCreator StudioExit slide of the last window0.82 sinCubiccubic-bezier(0.44, 0.02, 0.77, 0.40)
Accelerates into a cut or exitPomelliAccelerating push-in into the status card (zoom-through, signature)0.84 sinQuintcubic-bezier(0.92, -0.01, 0.81, 0.02) 1.42 s
Accelerates into a cut or exitTROOVYOpening text push-in that accelerates into the cut0.99 sinCubiccubic-bezier(0.28, 0.03, 0.83, 0.25) 1.00 s
Accelerates into a cut or exitUmbratitle tilt accelerates into the cloud wipe1.04 sinCubiccubic-bezier(0.65, 0.00, 0.90, 0.41) 1.30 s
Accelerates into a cut or exitTROOVYSecond text push-in into the cut1.45 sinOutQuadcubic-bezier(0.36, 0.27, 0.83, 0.26) 0.95 s
Camera move (push, pull, pan)Creator StudioFastest chat message push0.16 soutQuintcubic-bezier(0.17, 0.24, 0.04, 0.96)
Camera move (push, pull, pan)AsideHook pan across the app icons, step 20.32 sinOutCubiccubic-bezier(0.66, 0.15, 0.00, 0.99) 0.42 s
Camera move (push, pull, pan)AsideOpening camera push-in on the search field0.35 sinOutCubiccubic-bezier(1.00, -0.25, 0.12, 1.08) 0.99 s
Camera move (push, pull, pan)AsideHook pan across the app icons, step 10.40 sinOutCubiccubic-bezier(0.87, -0.04, 0.16, 1.00) 0.65 s
Camera move (push, pull, pan)PolymarketPush-in onto the order panel0.43 soutQuadcubic-bezier(0.47, 0.00, 0.29, 0.72)
Camera move (push, pull, pan)Umbrapush-in on the QR deposit modal0.51 sinOutCubiccubic-bezier(0.75, 0.15, 0.01, 0.94) 0.66 s (rms
Camera move (push, pull, pan)Creator StudioFirst chat message push0.53 soutExpocubic-bezier(0.13, 0.66, 0.15, 1.00)
Camera move (push, pull, pan)PolymarketPan down to the Buy button0.63 soutCubiccubic-bezier(0.33, 0.72, 0.28, 1.01)
Camera move (push, pull, pan)Figma canvas agentPush-in from the canvas to one screen0.65 sinOutCubiccubic-bezier(0.67, 0.67, 0.00, 0.83)
Camera move (push, pull, pan)AsideCamera push-in onto the prompt field (UI isolates)0.68 sinOutCubiccubic-bezier(0.92, 0.00, 0.20, 1.00) 1.03 s
Camera move (push, pull, pan)Google AI Studiopull-out as 'Available' appears0.70 sinOutQuadcubic-bezier(0.55, 0.14, 0.23, 0.83) 0.84 s
Camera move (push, pull, pan)HunchTab-to-table pull-out0.74 sinOutQuadcubic-bezier(0.59, 0.29, 0.21, 1.00) over 0.95 s
Camera move (push, pull, pan)PomelliPush-in to the Yes chip before the click0.79 sinOutCubiccubic-bezier(0.71, 0.27, 0.16, 1.07) 0.91 s
Camera move (push, pull, pan)HunchDeposit modal push-and-rise0.79 soutSinecubic-bezier(0.19, 0.24, 0.73, 0.91) over 0.66 s
Camera move (push, pull, pan)PrintC2 push-in to import controls (signature S-curve)0.80 sinOutQuadcubic-bezier(0.85, 0.25, 0.39, 0.82) 0.84 s
Camera move (push, pull, pan)PolymarketPull-out after the buy0.84 soutQuartcubic-bezier(0.40, 1.04, 0.67, 0.92)
Camera move (push, pull, pan)Figma canvas agentSnap reframe to the left toolbar0.87 soutQuartcubic-bezier(0.40, 0.18, 0.00, 1.00)
Camera move (push, pull, pan)Google AI Studiopush-in phase D: zoom settles after cut 20.91 soutCirccubic-bezier(0.21, 0.90, 1.00, 0.82) 0.60 s
Camera move (push, pull, pan)Google AI Studiopull-out from the published card to the full window (chained two tracks)0.93 sinOutQuadcubic-bezier(0.80, 0.08, 0.08, 0.48) 1.13 s
Camera move (push, pull, pan)Creator StudioPush to New Livestream pill0.93 sinOutQuadcubic-bezier(0.63, 0.32, 0.30, 0.83)
Camera move (push, pull, pan)Figma canvas agentOpening macro pull-out, texture to Figma window (signature)0.95 soutQuartcubic-bezier(0.35, 0.82, 0.00, 0.91)
Camera move (push, pull, pan)Creator StudioPush into the player before the countdown0.97 sinOutCubiccubic-bezier(0.94, 0.20, 0.26, 0.85)
Camera move (push, pull, pan)PrintC14 short pull-back0.99 soutCubiccubic-bezier(0.47, 0.58, 0.21, 0.89) 0.94 s
Camera move (push, pull, pan)LovableResult 1 pull-back from chart card to full dashboard1.04 soutExpocubic-bezier(0.77, -0.02, 0.00, 0.91)
Camera move (push, pull, pan)Creator StudioPush to Next button (camera, signature)1.07 sinOutCubiccubic-bezier(0.48, 0.04, 0.08, 1.18)
Camera move (push, pull, pan)Grainient (Figma Motion)Field-to-card shrink, tail (zoom tool)1.11 soutQuartcubic-bezier(0.31, 1.04, 1.00, 0.97)
Camera move (push, pull, pan)Creator StudioPush to Schedule pill1.11 sinOutCubiccubic-bezier(0.82, 0.31, 0.29, 1.00)
Camera move (push, pull, pan)Google AI Studiopush-in phase B: isolated field drifts and decelerates after cut 11.12 soutQuartcubic-bezier(0.08, 0.33, 0.32, 0.80) 0.67 s
Camera move (push, pull, pan)LovableCycle 3 giant-type pull-back into the card (camera)1.16 sinOutExpocubic-bezier(0.99, 0.00, 0.26, 0.79)
Camera move (push, pull, pan)Google AI Studiocamera follows the typing caret1.20 sinOutQuad
Camera move (push, pull, pan)TROOVYOne-word card zooms down after the cut (signature landing)1.27 soutQuintcubic-bezier(0.25, 0.80, 0.54, 0.86) 0.70 s
Camera move (push, pull, pan)HunchTrader-card truck1.41 sinOutQuadcubic-bezier(0.63, -0.07, 0.32, 1.11) over 2.29
Camera move (push, pull, pan)PrintC13 long pull-back to split-buy modal1.41 sinOutQuadcubic-bezier(0.72, 0.33, 0.38, 0.87) 1.45 s
Camera move (push, pull, pan)LovableResult 4 window rises with a slow push1.45 soutQuartcubic-bezier(0.21, 0.94, 0.85, 0.91)
Camera move (push, pull, pan)azatsol (omnipair)Pan-up to lower cards: scale component1.66 sinOutQuadcubic-bezier(0.75, -0.05, 0.41, 1.00) 2.40 s
Camera move (push, pull, pan)Creator StudioSidebar push with pan1.67 soutCubiccubic-bezier(0.49, 0.22, 0.05, 0.98)
Camera move (push, pull, pan)azatsol (omnipair)Logo mark shrink (zoom-through)1.68 soutExpo
Camera move (push, pull, pan)Creator StudioCalendar scroll (pan across UI)1.73 soutQuintcubic-bezier(0.20, 0.17, 0.07, 0.80)
Camera move (push, pull, pan)Figma canvas agentZoom-out continuing after the matched cut2.08 soutQuartcubic-bezier(0.00, 0.24, 0.32, 1.01)
Camera move (push, pull, pan)Figma canvas agentFinal pull-out after the colour change2.11 soutQuintcubic-bezier(0.00, 0.16, 0.30, 0.99)
Camera move (push, pull, pan)azatsol (omnipair)Pan-up to lower cards: vertical travel2.81 soutCubiccubic-bezier(0.68, 0.00, 0.00, 0.24) 2.57 s
Camera move (push, pull, pan)Brim3nEditsURL end-card slow pull-back3.46 soutCirccubic-bezier(0.00, 0.51, 0.58, 0.80) 2.37 s
Text arrivesBrim3nEditsFounder photos blur out under the new line0.30 sinOutCubiccubic-bezier(0.57, 0.96, 0.00, 0.94) 0.36 s
Text arrivesCreator StudioTitle line 1 opacity (progress proxy on flat black)0.31 slinearcubic-bezier(0.46, 0.48, 1.00, 0.98)
Text arrivesJupiterWord 'liquid' rises into place0.33 soutCirccubic-bezier(0.06, 0.33, 0.26, 1.00)
Text arrivesPolymarketHeadline re-centre step 1 (word 'Crypto', x)0.33 soutQuintcubic-bezier(0.40, 0.01, 0.01, 0.93)
Text arrivesLovableKinetic word All: arrival phase (bounding box on the gradient, no template score)0.38 soutCubic
Text arrivesPrintTitle word fade-in (Introducing)0.38 slinearcubic-bezier(0.40, 0.39, 1.00, 0.88) 0.37 s
Text arrivesfomoTitle line 1 and ETH diamond slide in from the left0.40 soutQuad
Text arrivesGrainient (Figma Motion)Inline orb opens a gap in the sentence (word gap)0.42 sinOutCubiccubic-bezier(1.00, 0.00, 0.15, 0.81)
Text arrivesPolymarketHeadline re-centre step 20.44 soutExpocubic-bezier(0.16, 1.15, 0.73, 0.90)
Text arrivesAsideSignature: end-card flanking words spread to the edges0.49 sinOutExpocubic-bezier(0.96, -0.01, 0.06, 1.00) 0.56 s
Text arrivesJupiterWord 'Now' rises into place0.53 soutQuint
Text arrivessaviomartincaption fade-in on the interview clip0.58 sinOutSinecubic-bezier(0.69, 1.07, 0.55, 0.98) 0.64 s
Text arrivesPolymarketDollar glyph scale-down (height)0.59 soutCirccubic-bezier(0.08, 0.91, 0.40, 0.92)
Text arrivesAsideText arrival: 'across' rises into place0.60 soutCirccubic-bezier(0.13, 1.03, 1.00, 0.90) 0.51 s
Text arrivesPolymarketHeadline re-centre step 30.63 soutExpocubic-bezier(0.09, 1.13, 0.53, 0.95)
Text arrivesLovableOpening logo grows (borderline score)0.66 soutExpocubic-bezier(0.00, 0.96, 0.52, 0.92)
Text arrivesHusher × AxiomTitle 1 grow-in (scale)0.66 soutCirccubic-bezier(0.05, 0.71, 0.56, 1.18) over 0.90 s
Text arrivesUmbranew title decelerates after the cloud wipe0.66 soutCubiccubic-bezier(0.29, 0.64, 0.65, 0.91) 0.47 s
Text arrivesJumper PassLogo letters slide right (letter R)0.67 soutCirccubic-bezier(0.16, 1.17, 0.67, 1.00)
Text arrivesJumper PassBenefit card scale settle 'Higher levels' (text width)0.73 soutCirccubic-bezier(0.16, 1.00, 0.91, 0.96)
Text arrivesBrim3nEditsHandwritten line write-on0.80 slinear
Text arrivesHusher × AxiomTitle 3 slam-in (scale)0.82 soutExpocubic-bezier(0.20, 1.19, 1.00, 0.91) over 0.51 s
Text arrivesAsideTitle reveal: 'Aside' scale-up behind reeded glass0.86 soutExpocubic-bezier(0.31, 0.70, 0.00, 0.89) 0.64 s
Text arrivesPrintCaption fade-out (Send funds block)0.89 sinOutSinecubic-bezier(0.39, 0.10, 0.66, 1.00) 0.86 s
Text arrivesHusher × AxiomTitle 2 slam-in (scale)0.92 soutExpocubic-bezier(0.19, 1.20, 0.86, 0.85) over 0.59 s
Text arrivesazatsol (omnipair)Logo mark slides left as wordmark writes on1.07 sinOutQuadcubic-bezier(0.53, 0.32, 0.00, 0.94) 1.07 s (rms
Text arrivesGrainient (Figma Motion)Type-on of the first line (typed width)1.08 soutQuintcubic-bezier(0.30, 0.35, 0.13, 0.89)
Text arrivesJumper PassIntro line re-centres left (word 'The', x)1.09 soutQuintcubic-bezier(0.24, 0.37, 0.15, 1.00)
Text arrivesPomelliHeadline settle drift after the bloom1.11 soutCubiccubic-bezier(0.49, 1.02, 1.00, 0.81) 0.71 s
Text arrivesJumperHeadline line drifts to centre while words fade in (left-edge probe; the tracker failed with min_score 0.33 because the 1.14 soutQuintcubic-bezier(0.22, 0.50, 0.26, 0.87) 0.68 s
Text arrivesLovableApp wall converges into a cluster (borderline score)1.16 sinOutSinecubic-bezier(0.44, 0.00, 0.68, 1.00)
Text arrivesJumperEnd card: URL word converges as the word spacing closes1.20 soutQuintcubic-bezier(0.16, 0.37, 0.26, 0.89) 0.71 s
Text arrivesTROOVYEnd brand mark slides left for the wordmark1.21 soutExpocubic-bezier(0.68, 0.00, 0.00, 0.85) 1.02 s
Text arrivesJumper PassBenefit card scale settle 'Jumper perks' (text width)1.31 soutQuintcubic-bezier(0.24, 1.13, 0.99, 0.95)
Text arrivesGrainient (Figma Motion)Type-on of the proof line (typed width)1.63 soutExpocubic-bezier(0.15, 0.19, 0.04, 1.00)
Text arrivesGrainient (Figma Motion)Logo mark slides left while the wordmark types (signature)1.79 soutQuintcubic-bezier(0.28, 0.08, 0.00, 1.01)
Text arrivesCreator StudioEnd card line 1 rise (row centroid on flat black, no template score)1.82 soutExpocubic-bezier(0.17, 0.63, 0.09, 1.00)
Text arrivesCreator StudioTitle line 1 rise (row centroid on flat black, no template score)1.84 soutExpo
Text arrivesTROOVYVertical word list rolls up2.75 soutQuintcubic-bezier(0.16, 0.52, 0.29, 0.90) 1.70 s
UI or object arrivesGoogle AI StudioPublish button press-down0.14 soutSine
UI or object arrivesfomoToken icon arrives in a set swap (fox icon)0.27 soutSinecubic-bezier(0.32, 0.45, 0.52, 1.00)
UI or object arrivesHusher × AxiomChain shot settle (SOL)0.32 soutCirccubic-bezier(0.26, 1.09, 1.00, 0.93) over 0.29 s
UI or object arrivesHunchAsterisk logo shrink (signature)0.32 sinOutSinecubic-bezier(0.58, 0.09, 0.82, 1.00) over 0.30 s
UI or object arrivesGrainient (Figma Motion)Wipe slider sweeps left0.35 soutSinecubic-bezier(0.56, 0.00, 0.04, 0.94)
UI or object arrivesAsideLaptop with the app on screen snaps up into frame (edge probe, no template score)0.37 sinOutCubiccubic-bezier(0.65, 0.19, 0.04, 1.06) 0.48 s
UI or object arrivesGoogle AI StudioPublish button release0.39 sinOutCubiccubic-bezier(1.00, 0.48, 0.00, 0.20) 0.27 s
UI or object arrivesfomoField wind-up (anticipation) before the whip0.40 sinOutSinecubic-bezier(0.48, 0.09, 0.64, 1.03)
UI or object arrivesGrainient (Figma Motion)Wipe slider returns right0.44 sinOutCubiccubic-bezier(0.86, 0.00, 0.16, 1.03)
UI or object arrivesPrintC1 screen rises from below (entry)0.44 soutQuadcubic-bezier(0.30, 0.36, 0.30, 1.01) 0.54 s
UI or object arrivesPump.funHero token settles after the reel whip0.50 soutCirccubic-bezier(0.09, 0.49, 0.30, 0.96) 0.51 s
UI or object arrivesUmbralogo tile pops and scales up0.52 soutCirccubic-bezier(0.09, 0.39, 0.15, 0.90) 0.54 s
UI or object arrivesPump.funSwap pill shrinks into the card header0.53 soutSinecubic-bezier(0.54, 0.02, 0.23, 0.55) 0.59 s
UI or object arrivesAsideKinetic type: 'locally,' slides left before the scramble0.53 sinOutQuintcubic-bezier(0.79, 0.00, 0.00, 1.17) 0.75 s
UI or object arrivesWhopNewspaper stack drop (stepped)0.57 soutCirc
UI or object arrivesPomelliChat panel slides right while the dashboard frame draws in0.62 sinOutQuadcubic-bezier(0.70, 0.00, 0.34, 0.82) 0.77 s
UI or object arrivesAsideUI arrival: 'Credit card' menu header snaps up as the list opens0.62 sinOutExpocubic-bezier(1.00, 0.00, 0.02, 1.05) 0.84 s
UI or object arrivesGoogle AI Studiofield slides left for the domain suffix0.65 sinOutQuadcubic-bezier(0.50, 0.18, 0.17, 0.98) 0.80 s
UI or object arrivesHusher × AxiomEnd-card mark slide0.65 soutCirccubic-bezier(0.00, 0.18, 0.10, 0.99) over 0.70 s
UI or object arrivesGrainient (Figma Motion)Field-to-card shrink, full curve (square card side)0.70 sinOutQuadcubic-bezier(0.79, -0.02, 0.03, 0.97)
UI or object arrivesWhopTorn-paper counter (stepped linear)0.70 slinear
UI or object arrivesBrim3nEditsCount-up 0 -> 10,0000.80 slinear
UI or object arrivesCreator StudioChat panel arrival after a hard cut (panel rises and sharpens)0.83 soutExpocubic-bezier(0.10, 1.07, 0.42, 0.94)
UI or object arrivesPomelliCursor glide to the Create Website button0.90 soutQuintcubic-bezier(0.27, 1.04, 0.80, 1.00) 0.61 s
UI or object arrivesLovableResult 3 window rises after the hard cut0.93 soutQuartcubic-bezier(0.15, 0.73, 0.48, 1.10)
UI or object arrivesazatsol (omnipair)History panel settles after the pill morph0.93 soutBackcubic-bezier(0.00, 0.60, 0.32, 1.38) 0.91 s
UI or object arrivesPump.funQuick-amount row focuses in after the defocus cut0.96 soutQuart
UI or object arrivesJumper PassLogo mark slides left (signature)0.99 soutQuartcubic-bezier(0.26, 1.16, 0.75, 1.00)
UI or object arrivesGrainient (Figma Motion)End logo mark shrinks (diameter)1.00 soutCirccubic-bezier(0.03, 0.53, 0.49, 1.14)
UI or object arrivesLovableResult 5 window rises after the hard cut1.01 soutCirccubic-bezier(0.01, 0.29, 0.13, 1.17)
UI or object arrivesJupiterCurved carousel entry (watch card)1.01 soutQuart
UI or object arrivesLovablePrompt card opens, cycles 1 and 2 identical (dark-edge measure on the gradient, no template score)1.11 soutCirccubic-bezier(0.04, 0.89, 0.86, 1.11)
UI or object arrivesLovableEnd logo grows1.18 soutExpocubic-bezier(0.20, 0.68, 0.00, 0.92)
UI or object arrivesJumper'Now' slide, shorter window (entry part)1.28 soutCirccubic-bezier(0.09, 0.42, 0.12, 1.07) 1.77 s
UI or object arrivesJumper PassPerk cards fan out of the folder (Checkpoint card, y)1.39 soutExpocubic-bezier(0.17, 0.81, 0.00, 0.76)
UI or object arrivesUmbra3D coins rise and decelerate after the cut1.40 soutCubiccubic-bezier(0.17, 0.45, 0.51, 0.81) 0.93 s
UI or object arrivesPump.funCTA phone rises from below (signature end move)1.65 soutExpocubic-bezier(0.07, 0.36, 0.21, 1.00) 1.04 s
UI or object arrivesJumper'Now' slides in from the right with blur, then keeps drifting1.65 soutCirccubic-bezier(0.21, 1.05, 0.74, 0.79) 1.42 s
UI or object arrivesPomelliFloating brand pieces drift up after the tilt (fast settle, then constant drift about 0.086 W/s)1.70 slinearcubic-bezier(0.13, 0.50, 0.42, 0.16) 1.53 s
UI or object arrivesJumper Pass3D card wall glides down and forward (y)3.05 soutExpocubic-bezier(0.17, 0.19, 0.06, 0.97)
PresetCurveDurationUse it forEvidence
arrivecubic-bezier(0.16, 1, 0.3, 1)0.6-1.1 sText and UI arrivalstext median 0.73 s, UI 0.70 s
movecubic-bezier(0.65, 0, 0.35, 1)0.9-1.1 sPush to a target, reframecamera median 0.96 s; Creator Studio pushes 0.93-1.11 s
snapcubic-bezier(0.88, 0, 0.12, 1)0.55-0.85 sKinetic slides and editorial pushesAside, Grainient, Jupiter, Creator Studio
sCurvecubic-bezier(0.45, 0, 0.55, 1)about 0.9 sCamera in a one-take tourPrint: median 0.93 s
pull-back tailoutQuart / outQuint1.3-2.1 sLong reveals of contextFigma 2.08-2.11 s
into the cutinCubic0.5-0.8 sAccelerate into a cut or off frame16 moves, median 0.66 s
passcubic-bezier(0.34, 0.67, 0.72, 0.28)about 0.87 sPass over a detail, cut at peak speedJupiter macro pass
press0.90 outSine 0.14 s + hold 0.17 s + inOutCubic 0.39 s0.70 sA clickGoogle AI Studio
stagger-0.08-0.13 s per wordWord-by-word buildsTROOVY 0.133 s, Jupiter 0.10 s

Film structures

Three shapes that work

Medians of the job shares in each length group. The bars below turn them into seconds for our three standard lengths.

hookproblemrevealdemoproofcall to action and logo

Teaser

15 s · from 7 films of 8-21 s
hook
reveal
demo
proof
end
  1. 0.0-1.7 s An object, a motif, or tension; no logo yet.
  2. 1.7-4.5 s The name and one claim (scale punch or blur-in statement).
  3. 4.5-7.0 s One interaction at macro scale, or the benefit as one object change.
  4. 7.0-12.5 s Two or three short claims, a slot swap, or a breadth wall.
  5. 12.5-15.0 s Mark slides, wordmark unmasks, URL; the music drops out.

Feature film

30 s · from 5 films of 22-30 s
hook
reveal
demo
proof
end
  1. 0.0-3.0 s Tension or the motif.
  2. 3.0-5.0 s Name and promise; the drop lands here.
  3. 5.0-15.0 s One demo unit, two or three times, or a short one-take.
  4. 15.0-23.0 s Numbers, breadth, social proof.
  5. 23.0-30.0 s Claim recap, mark and URL, a hold of 3 s or more.

Full launch

60 s · from 8 films of 40-61 s
hook
reveal
demo
proof and payoff
end
  1. 0.0-3.0 s Provocation, problem, or a macro pull-out.
  2. 3.0-5.0 s The name, built from the product.
  3. 5.0-38.0 s A one-take tour with target push-ins, or a loop of 4-5 cycles that varies its framing from the third.
  4. 38.0-52.0 s The reward beat on the sound, a breadth wall, social proof.
  5. 52.0-60.0 s Mark and URL in quiet, 4 s or more.

The set

The 22 films, and what each teaches best

Cut rates come from a frame-difference cut detector checked by eye. Links open the original posts on X.

#FilmLengthFormatCuts / minBest reference for
1Pomelli · a new chapterB prompt-to-result loop + A one-take UI tour60.2 s16:94.0Best reference for linking a long UI tour without cuts: shared-object morphs, push-ins to each decision, and bloom-in serif titles that emphasise by timing.
2Lovable · Google connectorsB prompt-to-result loop + C brand-motif kinetic type46.2 s16:935.1Best reference for a prompt-to-result loop with a fixed internal clock (card open outCirc 1.11 s, chip at +1.10 s, result cut at +3.13 s) and theme-and-variation framing across five cycles.
3Jupiter · OfferbookC brand-motif kinetic type25.7 s16:944.3The best reference for one glowing lens motif that carries every transition, and for cutting a dark fintech film on audio events.
4Pump.fun · USDC tradingF 3D and object led + E kinetic-type led20.0 s16:93.0Best reference for an object thread at 60 fps (icon to toggle to 3D coins to headline) and for the word-swap slot line that lands on a hero token.
5Aside · a new way to browseG problem-to-solution story + E kinetic-type led87.5 s16:95.5The best reference for an editor-style kinetic-type close (type, delete, swap, icon insert) held together by one snap curve, one type size and one accent colour.
6Google AI Studio · pretty URLsA one-take UI tour + E kinetic-type led41.6 s16:95.8The best reference in the set for isolating and magnifying one UI element: a x5.8 push-in with two punch-in cuts at peak speed, then one centred object that carries every state of the payoff.
7saviomartin · internet business launchD manifesto montage + E kinetic-type led25.1 s4:3114.6The best reference for a type-led manifesto teaser: one fixed serif line over a 12.5 Hz strobe montage, then white/black statement cards cut on audio attacks.
8azatsol (omnipair) · full videoA one-take UI tour + C brand-motif kinetic type28.5 s16:90.0Best reference for cut-free scene changes built from one brand material: line-to-pill-to-card morphs, light-sweep chart swaps and a logo zoom-through.
9Grainient (Figma Motion) · VeduBoiE kinetic-type led + C brand-motif kinetic type77.3 s16:921.7Best reference for caret-driven kinetic type that stitches many product vignettes, and for shape-based match cuts (field to card, orb, ring to logo).
10Figma canvas agent · canvas agentB prompt-to-result loop61.0 s16:919.7The best reference for a prompt-to-result product film where zoom-based camera moves and one accent colour (agent blue) carry the story without narration.
11Whop · payment infrastructureD manifesto montage19.1 s16:9153.9Best reference for on-twos collage editing: a 2-frame cut grid, stepped paper motion, and word-per-cut copy over archive footage.
12Jumper · private swaps on BaseF 3D and object led + E kinetic-type led8.6 s16:90.0A compact reference for a one-object privacy metaphor (coin scanned into a dot hologram) followed by blur-slide giant type and a converging URL end card.
13Creator Studio · live streamingA one-take UI tour52.4 s1:19.2Best reference for a one-take UI camera: measured push-ins (1.85-3.74x, inOutCubic about 1.0 s) that land on each click target, with a countdown-to-live payoff and an accelerating chat flood.
14Polymarket · five-minute marketsA one-take UI tour + E kinetic-type led20.6 s16:920.3Best reference for a one-take UI trade demo where the camera follows the user's intent (push-in, pan, pull-out) and ends on a reward beat.
15Husher × AxiomA one-take UI tour + E kinetic-type led22.7 s16:937.1Best reference for a repeatable chapter-title template (2x slam-in, 26 frames) and for title-to-UI match cuts inside a real-capture UI tour.
16fomo · Ethereum mainnetF 3D and object led + C brand-motif kinetic type18.0 s1:113.3The best reference for mixing a live-action hand with flat-colour motion graphics, and for a wind-up-and-whip 'slide' transition that continues across the cut.
17Umbra · private payrollG problem-to-solution story + F 3D and object led50.6 s16:916.6The best reference for turning a privacy benefit into one motion: salary names and amounts masking into asterisks one character at a time, set up by an accelerating notification flood.
18Hunch · trading terminalA one-take UI tour57.0 s16:921.1Best reference for a logo sting built out of the product UI and for long one-take UI camera paths (pull-outs, trucks, dips to black) with motion blur.
19Brim3nEdits · pacing studyD manifesto montage + E kinetic-type led23.6 s16:981.5Best reference for pacing: still frames and single-frame changes locked to a sixteenth-note grid, with a 3-sixteenth default pulse and scale jumps instead of animation.
20Print · multi-wallet managerA one-take UI tour51.4 s16:90.0Best reference for a one-take 3D-screen tour: symmetric S-curve camera moves (~0.9 s) that land on music onsets, each followed by a fixed-window caption in the space the tilt creates.
21TROOVY · Hanta VirusE kinetic-type led19.1 s16:928.3Best reference for a compact SaaS kinetic-type kit: scale-matched hard cuts on low-end hits and a different entrance for every card.
22Jumper Pass · new perksE kinetic-type led + F 3D and object led16.2 s16:914.8Best reference for cutting on low-end hits and for velocity-matched text swaps that end in a logo that comes out from behind its mark.

Before we animate

The checklist for our next product film