animation-principles

This skill should be used when the user asks to "make this animation feel natural", "fix motion that feels stiff/floaty/cheap", "my animation looks robotic", "choose an easing curve", "how do I use the Graph Editor", "add overshoot or bounce", "Easy Ease isn't enough", "make snappy motion", "pick a

By iart-ai · 794 installs

npx skills add iart-ai/motion-design-skills --skill animation-principles

Source repository · Upstream listing

Motion Principles Decide how something should move so it feels right — independent of the tool used to build it. This skill answers timing, easing, spacing, weight, and rhythm. It does not pick a tech stack; it produces concrete numbers (durations, cubic bezier curves, stagger offsets, spring configs) ready to hand to any implementation. When to use Motion feels stiff, floaty, mechanical, robotic, or cheap and needs diagnosis. Choosing a clip or transition's duration, easing curve, and stagger offset. Reviewing whether motion respects physics intuition (weight, follow through, arcs). Synchronizing keyframes to a musical beat or edit accent. Three pillars — settle these before any number Every piece of motion should answer three questions before you pick a duration or curve. Skip them and you get technically correct motion that feels like nothing. These are the shared vocabulary the rest of the collection refers back to. Pillar The question What it drives Emotional intent What should the viewer feel ? (joy, calm, urgency, trust, elegance) Easing, duration, amplitude/overshoot Visual narrative What's the micro story? Setup → action → resolution Sequencing, staging, what enters when Motion craft How do we make it believable? Physics, secondary motion, arcs, follow through Three motion layers — depth, not flatness Flat motion = only the main thing moves. Believable motion runs three layers at once: Primary — the main action the eye follows (the hero move). Secondary — supporting richness reacting to the primary (a shadow shifting, an icon nudging, a label settling late). Ambient — background life that never demands attention (slow gradient drift, a low contrast pulse). The judgment layer ( motion art direction ) calls these Hero / Support / Texture — same three layers, ranked for what earns motion . Primary≈Hero, Secondary≈Support, Ambient≈Texture. Core principles Easing is the single biggest lever Linear motion reads as robotic. Reserve linear for continuous loops (spinners, marquees, infinite scroll) only. Everything an eye perceives as a discrete event needs acceleration. Match the curve to the action: Enter / appear ease out (fast start, gentle settle). Object arrives with energy and decelerates into place. cubic bezier(0.16, 1, 0.3, 1) . Exit / disappear ease in (gentle start, fast end). Object accelerates away. cubic bezier(0.7, 0, 0.84, 0) . Move / reposition (stays on screen) ease in out (symmetric). cubic bezier(0.65, 0, 0.35, 1) . Playful / branded slight overshoot. cubic bezier(0.34, 1.56, 0.64, 1) (the 1.56 pushes past 1.0, creating an overshoot and settle that reads as "weight"). Rule of thumb: the eye forgives a slow start far less than a slow end. When in doubt, decelerate into rest. Hand shaping easing (After Effects). When keyframing by hand rather than supplying a curve, the same principles map to the Graph Editor: shape the Speed Graph so the ends flatten toward zero, and push deceleration influence to 80–90% for a snappy launch and smooth settle. F9 (Easy Ease) is only a 33% symmetric starting point — make it asymmetric. See references/easing graph editor.md for Graph Editor reading, handle/influence techniques, and step by step overshoot, anticipation, and bounce recipes (including a decaying bounce expression). Timing communicates weight and importance Element Duration Micro interaction (hover, toggle, tap feedback) 100 200ms UI transition (panel, modal, page region) 200 400ms Hero / large element / full screen 400 800ms Cinematic camera move 800 2000ms Distance and size scale duration. A small icon moving 20px and a full bleed panel moving 800px should NOT share a duration — the panel needs more time or it looks weightless. A practical scaling: keep perceived velocity roughly constant by adding ~30 50% duration when distance or area roughly doubles. Heavy objects start slowly and overshoot less; light objects snap and may bounce. Spacing and stagger create rhythm Never reveal a list, grid, or group all at once — it reads as a single flat event. Stagger each child's start. Lists / sequential items: 40 80ms between items. Dense grids: 20 40ms (more items, less per item delay, or the tail drags). Cap total reveal at roughly 600 800ms for a group; if count offset exceeds that, shrink the offset or switch to a distance based stagger (items further from an origin point start later). Stagger direction should follow the eye: top to bottom, or radiating from a focal point. The 1/3 Rule (two forms, both universal): Distance — no element travels more than ~1/3 of the screen without an intermediate keyframe or a scale/opacity change. Long unbroken slides read as "the template moved," not "something happened." Simultaneity — with 3+ elements, keep no more than ~1/3 in active motion at once. The rest hold or move as ambient. Everything moving together = noise with no focal point. Anticipation and follow through sell physical motion Anticipation : a tiny counter move before the main action (a button dips scale 0.95 before popping, a character crouches before jumping). 60 120ms is enough. Follow through / overlapping action : trailing parts keep moving after the main body stops (a hero card lands, then its shadow and label settle 40 80ms later). Stagger the settle of attached elements rather than stopping everything on the same frame. Arcs : natural movement curves; pure straight line translation of an organic object looks mechanical. Add a slight arc to x/y or animate a path. Beat sync and rhythm When motion accompanies audio, land impact keyframes (a hit, a cut, a reveal) on the beat, not between beats. At 120 BPM a beat is 500ms; an eighth note grid is 250ms. Quantize key moments to that grid. For edits without music, establish a visual pulse (e.g. one major event per ~500 800ms) so the piece breathes consistently. Spring vs. duration based motion Springs (mass / stiffness / damping) self determine duration and feel more physical for interactive, interruptible motion (drag release, gestures). Duration+easing is better for choreographed, timeline locked sequences (video, scroll tied reveals) where exact sync matters. A snappy default spring: stiffness 300, damping 30, mass 1 . See references/easing curves.md for a full spring table. Diagnosing common failures Feels stiff/robotic using linear or symmetric easing on an enter; switch to ease out. Feels floaty/sluggish duration too long or ease out too gentle; cut duration 30%, sharpen the curve. Feels cheap/janky everything appears at once (no stagger), or all elements share one duration regardless of size. Feels mechanical despite easing no anticipation, no follow through, straight line paths; add arcs and overlap. Quick reference Need Use Enter cubic bezier(0.16, 1, 0.3, 1) , 300 500ms Exit cubic bezier(0.7, 0, 0.84, 0) , 200 300ms Move cubic bezier(0.65, 0, 0.35, 1) , 300 400ms Branded pop cubic bezier(0.34, 1.56, 0.64, 1) , 400 600ms List stagger 40 80ms per item, cap ~700ms total Loop only linear Reference files references/easing curves.md — named cubic bezier library with exact values, spring configs (Framer/react spring/iOS), and per element type duration guidance. references/easing graph editor.md — After Effects Graph Editor craft: speed graph vs value graph, easing handles and influence/velocity numbers, and step by step snappy, overshoot, anticipation, and bounce recipes. references/twelve principles.md — all 12 Disney principles, each with a concrete, numeric motion graphics example.