agentleFS
JoaoEquerJoaoEquer/Oficina/skills/motion-dictionary/SKILL.md

motion-dictionary

Skill2 starsChanged 24 days agoMITView on GitHub

Named vocabulary for motion - 25 effects (entrances, impact, easing curves, text, shapes, scene transitions, and the animation principles: anticipation, squash & stretch, follow-through, echo trail, count-up, iris) with default duration, easing and parameters; fx.js, a dependency-free deterministic implementation; and 5 fill-in prompt templates (app launch, showreel, product spot, personal intro, App Store style promo); plus web.md, scroll choreography for landing pages (line mask reveals, picture unveils, one pinned scrub section, smooth scroll, reduced-motion levels) with the patterns owners rejected as amateur. Use whenever writing or reviewing a motion spec, a beat table, a prompt asking an AI for an animated video, animation code (HTML-to-video, GSAP, Remotion, CSS, Framer Motion), or the motion of a web page, and when the user says an animation looks generic, "AI-made", "junior", or asks "how do I ask for this motion".

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every animated element gets a dictionary name.

    line 38
  2. Distinctive:

    Do overshoots land once, small?

    line 150

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

motion-dictionary

"Make a nice video" fails because nothing in it can be checked. A motion spec names the effect, the element, the time and the curve, so the result can be compared against it frame by frame.

The spec grammar

One line per element, in this order:

<element> <effect> [direction/amount] em <duration> com <easing> [, stagger <gap>] [, no beat <n> / em <t> ms]

Example (the "peça assim" pattern):

Title enters with slide in from the left in 0.4 s, ease out. Benefits revealed with stagger 0.15 s. Ends with a punch zoom on the product.

Rules when writing a spec or a beat table:

  • Every animated element gets a dictionary name. If no name fits, describe start state, end state, duration and curve explicitly, never "smooth" or "dynamic".
  • One focus per beat. Three new effects on the same beat is a crowded beat.
  • Vary the curve. One easing and one speed for the whole piece is the most common "AI video" tell.
  • Fade in alone is the default of every generator. Pair it (fade + slide, fade + blur) or replace it.

The dictionary

Defaults are starting values, not measurements. fx.js uses the same names and defaults.

Entradas suaves (soft entrances)

EffectWhat happensDefaultUse / avoid
Fade inopacity 0 to 10.4 s, outCubicsecondary text, backgrounds. Never alone on the hero
Slide intravels from an offset to rest0.4 s, outExpo, 80 to 160 pxtitles, cards, list items. State the direction
Blur inblurry to sharp, with opacity0.5 s, 24 px blurcalm reveals, numbers. Expensive on large layers in live UI

Entradas com impacto (impact entrances)

EffectWhat happensDefaultUse / avoid
Pop insmall scale jump past 1 and back0.45 s, from 0.6, outBack s=1.7one hero element, icons, badges. Not for whole lists
Scale upgrows to final size, no overshoot0.6 s, from 0.2, outExpologos, charts, containers
Staggersame entrance, items start one after anothergap 0.08 to 0.2 s (0.15 default)lists, grids, words. Over ~8 items, shrink the gap or group them

O ritmo do movimento (curves)

EffectWhat happensDefaultUse / avoid
Ease in-outslow start, accelerates, brakesinOutCubicmoves between two on-screen positions, camera pans
Overshootpasses the target and returnsoutBack s=1.70158 (~10 %)landings with character. One overshoot, small
Bouncebounces before restingoutBounce, 0.9 splayful drops. Rarely fits tech/serious content

Entrances generally want ease out (fast start, soft landing). Ease in is for exits. Linear is only for continuous motion (scroll, rotation, progress) that never starts or stops on screen.

Texto em movimento (text)

EffectWhat happensDefaultUse / avoid
Typewriterletters appear one by one with a caret18 chars/scommands, code, short prompts. Long text: too slow to read
Word revealwords appear in sequence0.18 s between words, 0.3 s eachheadlines, captions synced to speech
Text swapone word replaced by another in the same slot0.35 s, old leaves up, new enters from below"X becomes Y", rotating keywords. Slot needs overflow hidden

Formas que mudam (shapes)

EffectWhat happensDefaultUse / avoid
Draw-ona stroke draws itself0.8 s, inOutCubic, stroke-dashoffsetarrows, underlines, paths, diagrams
Morphone shape becomes another0.6 s, inOutCubiccircle to rounded square, button to panel. Paths need equal point counts
Bar growa bar fills to its value0.8 s, outExporeal numbers only. Bar and label from the same curve

Transicoes de cena (scene transitions)

EffectWhat happensDefaultUse / avoid
Mask reveala mask opens to show the content0.6 s, inOutExpo, letterbox from the middlescene openings, image reveals
Wipea moving edge replaces scene A with B0.5 s, inOutCubic, accent bar on the seambefore/after, A vs B
Punch zoomvery fast push-in on the subject0.18 s to 1.35x, outExpo, hit sound on the same frameemphasis on a product, a number, a punchline. Max once per 5 to 10 s

Principios de animacao (extension)

EffectWhat happensDefaultUse / avoid
Anticipationpulls back before the move15 % of the move, first 35 % of 0.6 sbuttons, jumps, a dial before it fills. Makes the move readable
Squash & stretchstretches falling, squashes on contact, keeps volume30 %, 0.25 s dampedanything that hits a surface. Origin at the contact point
Follow-throughsecondary parts arrive after the lead, overshooting morelag 0.05 s per partgrids of dots, hair, cables, a group settling
Echo trailfading ghost copies behind a fast move4 copies, 0.04 s apartfast transitions instead of a hard cut. Not on text that must be read
Motion blurblur along the movement directionrenderer subframes, or 4 to 12 px directional blurfast pushes and whips. Frame renderers: average subframes, do not fake with CSS blur
Count-upnumber rolls to its value1.2 s, outExpo, locale-formattedmetrics, stars, money. Real numbers only, same source as the voice-over
Iriscircular mask opens or closes on a point0.6 s inOutCubicphoto reveals, scene ends on the subject

Prompt templates

prompts.md has 5 fill-in templates (app presentation, motion showreel, App Store style launch, product spot, personal intro), rewritten with dictionary names, durations and a beat order. Start from one when the user wants a whole video, then adjust the beats; never send a template with the placeholders still in it.

Motion on a web page

For a landing page or any scroll-driven page, read web.md before writing code. It covers the accepted choreography: smooth scroll, line mask reveals, picture unveils, one pinned scrub section, and a header that hides on scroll. It also lists what owners rejected as amateur: cursor followers, magnetic buttons, mouse tilt, velocity skew, rainbow accents and glow. Finally, it explains why motion can look absent on a machine with reduced motion turned on. fx.js is for clock-driven video; on a page, use GSAP ScrollTrigger as described there.

fx.js

fx.js (next to this file) implements every entry as a pure function of time, no dependencies:

<script src="fx.js"></script>
<script>
  window.__seek = (ms) => {
    const t = ms / 1000;
    FX.apply(title, FX.slideIn(t, 0.2, { from: [-140, 0] }));
    items.forEach((el, i) => FX.apply(el, FX.slideIn(t, FX.stagger(0.8, i, 0.15), { from: [0, 60] })));
    FX.apply(product, FX.punchZoom(t, 2.4));
  };
</script>

Contract: effect(t, t0, opts) with t, t0 in seconds returns numbers (x, y, scale, opacity, blur, clipPath, scaleX/scaleY...). FX.apply(el, ...parts) writes them, multiplying opacities. Because nothing reads a clock, any single frame renders alone and identically, which is what a frame-by-frame renderer needs and what makes a frame checkable.

Other stacks: the defaults translate one to one. CSS: cubic-bezier(0.16, 1, 0.3, 1) for outExpo, cubic-bezier(0.34, 1.56, 0.64, 1) for outBack. Framer Motion: transition={{ duration: 0.4, ease: [0.16, 1, 0.3, 1] }}, staggerChildren: 0.15. Remotion: call the fx.js functions with frame / fps.

Reviewing motion against the dictionary

For a rendered piece, sample frames at each beat (a contact sheet) and check:

  • Can every movement be named? Unnamed motion is usually drift without intent.
  • Does each entrance have a direction and a curve with character, or is everything fading in together?
  • Do overshoots land once, small? Bounce on serious content?
  • Is text readable at phone size at the moment it is still (blur and swaps finish before the read)?
  • Does every punch zoom and hard cut have a sound on the same frame?

Source

Vocabulary organised from the carousel "Dicionario de efeitos Motion" by @omatheusdaia (Instagram). Prompt templates adapted from the carousel "Prompts para criar motion graphics com o Claude" (Instagram; author handle not visible in the copy reviewed). Defaults, the spec grammar, the rewritten templates and fx.js are this skill's own. The block structure (inputs/direction/structure/build/gotchas/start) and the banned list in prompts.md follow the patterns collected on prompt-motion.com (gallery of Claude motion prompts curated by @p4nthera_), read 2026-11-05. Easing formulas are the standard Penner curves.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.