Moves

A move is a named piece of motion to copy into a page, with a CSS or Web Animations snippet and a one-second clip.

A moveA move is a named, copyable piece of motion, such as mask-rise or whip-pan, with its CSS and Web Animations code, notes, a sound line and a clip. is a named piece of motion that you copy into your pageA page is one HTML file, films/<name>/page.html, that describes a whole film.. Each move is one markdown file in prompts/moves/ with a snippet of 10 to 40 lines, a Sound: line and a one-second clip. The library has 130 moves in seven groups.

Why they exist

An agent that writes motion from memory writes the same few moves: a fade up, a scale in, a slide. A move gives the page a proven version. Its curve is an EASE name from core/motion/presets.js, never a hand-fitted cubic-bezier(). Choose a move from its clip, not from its name.

A move is copied, not imported. The page owns the numbers after the copy.

Use a move in a page

Open the gallery at vawe.dev/video-components. Each card plays the clip. Pick the move whose clip shows the job you need.

Read the move file prompts/moves/<move>.md. Its first paragraph starts with “Use when”.

Copy the snippet into the page and keep its numbers. The snippet delays start at 0, so add the start of your beatA beat is one part of the story with one idea, such as the hook, a feature or the end. to each delay. Name each beat time once, for example --beat-2: 1.60s.

Copy the Sound: line too. It names a voiceA voice is one of the built-in synth sounds, such as pluck or whoosh, chosen with data-synth="<voice>". and the second to cue it, or says “none”.

Draft only the seconds you changed. See Draft.

bin/vawe dev films/<name>/page.html --from 2 --to 6

Each clip comes from prompts/moves/demo/<move>.html. The snippets name classes from demo/demo.css: copy the classes that you use.

Two rules the snippets already follow

Keep both when you change a snippet.

  • An exit keyframe has no from. A from fills backwards over the entrance and hides it.
  • var() never goes inside the animation shorthand. Write the longhands. Chromium drops the whole declaration otherwise.

The seven groups

prompts/moves/README.md lists every move in seven groups, and a “Pick by job” table.

groupmovesthe job
Reveal a title25Type enters the frame.
Change between shots38The seam between two beats.
Point the eye7One word or one UI part gets attention.
Move the camera16The camera, focus and exposure of a world.
End a film10The last beat.
Product moments21A product does one real thing.
Grounds13A living ground, plus a few loops and photo effects.

The gallery shows five moves first: marquee-along-path, lens, counter-dive, ticker-takeover and shape-trace-morph. A featured clip has a median blind score of 8 or more from three reviewers.

The moves

Each name links to its clip and notes on the site.

Reveal a title

Type enters the frame: a title, a command, a caption or a changing word.

movewhat it does
mask-riseA line rises from under an invisible edge.
tracking-collapseLetters converge from wide spacing while the word sharpens.
caret-typingA command or name is typed, and the caret becomes the next element.
letter-staggerA word lands letter by letter, 45 ms apart.
scale-punchThe hero word hits from 1.4x and recoils.
flap-resolveEach letter is a tile that flips through glyphs and locks.
word-swap-slotOne word in a held sentence rolls through values and lands.
blur-word-cascadeCopy resolves word by word from blur, with no mask.
text-as-maskThe type is a window onto a moving picture.
outline-fillA word arrives as an outline, then an accent fills each letter.
strikethrough-replaceAn old value is struck out and the new value rises beside it.
grid-stagger-waveA title arrives with a wave of tiles around it.
text-scramble-decodeA line of wrong glyphs locks, left to right, into the name.
ticker-takeoverThe real answer crashes in over a cycling line.
anchor-cycleOne phrase stays pinned while a tape of words cuts beside it.
lower-thirdA name plate and a role line for a person on screen.
liquid-displaceA title bent by moving water settles to sharp type.
echo-trailOne element flies in with five fading copies behind it.
caption-karaokeThe spoken word lifts to full ink and a pill glides along.
caption-editorialKey words in an italic serif, with one caption replacing the last.
variable-weight-waveWeight and width of a variable face crest letter by letter.
text-on-pathA line of words rides an SVG path.
vertical-cut-revealCharacters, words or lines rise from under hard clip edges.
letter-swapA word rolls letter by letter, forward, back or in random order.
letter-3d-swapEach character is a cube that turns to the next face.

Change between shots

The seam between two beats. Each move names what carries the eye across the cut.

movewhat it does
cut-on-motionA moving shape carries the eye across a hard cut.
push-blurA panel pushes in with a blur that follows its speed.
exit-fastArrive fast and land soft; leave faster and shorter.
chain-beatsBeats overlap and one element hands off.
whip-panA fast sideways pan hides the seam in blur.
match-cutOne shape crosses the cut and changes meaning.
iris-wipeA circle closes on the mark and uncovers the next world.
stack-coverThe next panel slides over the last one.
split-revealTwo halves part like doors onto the next shot.
slice-shiftBands slide off in turn and uncover the next shot.
type-fill-transitionA word scales into one letter and its colour becomes the next ground.
color-block-wipeA brand-colour block sweeps across the cut.
zoom-throughThe camera dives into a UI part and the next shot comes out.
speed-ramp-freezeStory time slows to a near hold before a change.
speed-rampBoth sides of a cut move at the same speed.
liquid-wipeA gooey edge floods the frame onto the next shot.
grid-tile-flipA wall of tiles flips in a wave to the next shot.
luma-matte-dissolveThe next shot arrives through its own brightness.
smear-stretchShot A stretches into streaks and shot B snaps back.
shape-morph-wipeThe next shot grows out of a shape on screen.
spin-transitionA 90 degree camera roll carries the cut.
swipe-continuesA card swipe continues as the next world arrives.
drop-and-landAn action in world A lands in world B.
spin-rotationA loading spinner hands over to the loaded screen.
counter-diveThe camera enters a title through the hole of an o.
thumbnail-gridThe world shrinks into a thumbnail that is the next world.
light-leak-transitionWarm light layers swell over the cut.
type-match-cutOne word holds its place while the frame cuts around it.
cursor-spotlightA click opens the next screen inside a growing circle.
toggle-horizonA toggle track stretches into the horizon of the next world.
progress-timelineA progress bar stands up into the scrubber of a timeline.
avatar-worldA round avatar grows until its art is the next ground.
glow-recordAn alert badge floods the frame and becomes a live state.
highlight-sweepA highlight grows into the ground of the next panel.
shadow-handoffA card shadow darkens into the ground of the next world.
word-portalA typed word grows and the next world shows through its letters.
underline-roadA headline underline bends down and becomes a route on a map.
caret-doorThe caret grows into a door that turns open on the next screen.

Point the eye

One word or one part of a UI gets the viewer’s attention.

movewhat it does
word-sweepThe accent runs word by word and stays on the target.
weight-morphOne word gets heavier on a real variable-font axis.
marker-highlightA highlighter bar wipes behind one phrase.
underline-drawA line draws under the key word.
bracket-calloutCorner brackets snap onto a word or a UI part.
spotlight-dimThe frame dims around one target.
hand-drawn-notesMargin notes: a circle, an arrow and an underline, drawn on.

Move the camera

The camera, the focus and the exposure of a whole world.

movewhat it does
ui-focus-zoomZoom onto one part of a captured UI.
caret-followThe camera trails the typing caret on a soft spring.
pull-back-revealOpen tight on a detail and pull back to the whole.
parallax-diveThe camera flies forward through layers at real depths.
exposure-flashA cut reads as over-exposure: three white frames.
lensA screen filmed as a real object. See Lens and effects.
camera-movesPush, pull and whip for a whole world as one wrapper.
depth-resolveFar words resolve as the camera arrives.
scale-throughFly into a plain element and its colour is the next world.
direction-wipeA mask edge moves the way the last move went.
arrival-springA small overshoot on one arrival in three, a big one on the key arrival.
rack-focusFocus moves from one depth layer to another.
drift-holdThe line holds still while only the ground drifts.
gradient-mesh-fieldFour soft colour pools drift behind a title.
pan-stationsThe camera pans between stations on one wide canvas.
crash-zoomA 0.13 s slam to 2.6x with real zoom blur.

End a film

The last beat: a mark, a name, a call to action.

movewhat it does
logo-stingThe mark lands, a light band crosses it and the word opens.
wordmark-cascadeLetters fall onto a rail and the full stop lands last.
mark-traceA line mark draws itself with a riding tip.
shape-trace-morphAn outline draws on, fills and morphs into the brand mark.
calm-lockupLogo and line settle slowly while two lights drift.
cta-popThe call to action pops in under its line.
thanks-sweepA closing line sweeps in on a soft mask edge.
ui-strip-awayThe UI leaves layer by layer and the brand mark remains.
logo-wallThree lanes of logo cells slide in as proof.
cta-morph-pressOne plate becomes a button and a cursor presses it.

Product moments

A product doing one real thing: a click, a chart, an agent, a diff.

movewhat it does
clip-expandA panel grows out of one point.
cursor-clickA cursor travels to a control and presses it.
count-upDigit wheels roll to a number, then a delta chip and a sparkline.
card-assembleA UI card builds part by part.
notification-popA banner drops in, holds and leaves faster.
chart-buildGridlines draw, bars rise and the newest bar turns accent.
before-after-wipeOne card in two states with a scan line between them.
skeleton-revealGrey blocks shimmer, then resolve into real content.
ai-stream-responseA prompt is sent and the answer streams in chunks.
overwhelm-collapseA flood of cards collapses into one fix.
success-checkA button resolves into a drawn check.
integration-hubTool logos land on a ring around the product mark.
device-tilt-stageThe UI on a CSS 3D laptop that rises and settles.
command-palette-summonA Cmd+K palette drops in, a query types and Enter runs.
gooey-filterShapes that touch merge into one soft outline.
agent-progressAn agent works through steps that flip to checks.
panel-live-syncAn edit in a panel and its result in one frame.
terminal-runA coding agent works in a terminal that steps, never eases.
approval-gateThe agent asks before it acts.
model-pickerA pointer opens a model menu and picks one.
diff-cardA pull request diff builds and the badge becomes Merged.

Grounds

A living ground for a held frame. The group also holds a few loops and photo effects.

movewhat it does
aurora-driftThree soft bands of light fold slowly in one shader.
grain-fieldA tonal ground with film grain seeded from the seek time.
halftone-fieldA 45 degree dot screen whose dot size waves.
ink-warpMarbled ink flows behind short, large copy.
dot-grid-waveA plain SVG dot grid with one travelling wave.
light-poolOne soft pool of light wanders on a seeded path, in plain CSS.
marquee-along-pathTiles ride one SVG path at an even gap.
simple-marqueeThree rows of tiles slide for a whole beat.
circling-elementsEight tiles orbit one point.
css-boxA cube of type turns to another face on a stiff spring.
pixelate-svg-filterA photo breaks into blocks and clears again.
photo-particlesA photo is sampled into lit points that gather.
media-between-textA picture grows inside a line of type and the words part.

From a move to a film

A move is one second. A recipeA recipe is a chain of moves for one short film, with a table of beats, sound cues and transitions. joins moves into a short film. prompts/moves/RECIPES.md has fifteen recipes. See Recipes.

Render a clip again

The web copy of each clip is site/public/moves/<move>.mp4. The masters are not in git. To render the master of one move, run this command in a vawe checkout.

bin/vawe moves --only weight-morph

The verb renders the clip to prompts/moves/<move>.mp4 at 1280 px and 60 fps, and writes a 12-frame contact sheet to out/moves/<move>-sheet.png. Without --only, it renders the clips whose demo, demo/demo.css or imported core/ files changed. --all renders every clip.

Limits

  • A move does not check your page. The checks of dev do that.
  • Some moves are “once per film”: logo-sting, wordmark-cascade, mark-trace, shape-trace-morph, calm-lockup, thanks-sweep, chain-beats, rack-focus and skeleton-reveal. Each move file says so.

From the blogMotion graphics transitions: 12 types, 10 mistakes

On this page