Communitygithub.com

whoamnesia/ui-motion

Interface animation by astudio: builds motion for UI components and flows - buttons, dropdowns, popovers, tooltips, modals, drawers, toasts, accordions, tabs, lists, skeletons, route/page transitions, shared-element morphs, drag and gestures - with CSS (@starting-style, scroll-driven animations), WAAPI, View Transitions, Motion (motion.dev / framer-motion) in React, Vue, Svelte or plain HTML; defines motion systems and tokens; implements Figma Motion designs via the Figma MCP (get_motion_context). Use for "animate this component", "add a transition", "make it feel alive/smooth/native", "page transition", "motion tokens", "микроанимации", "анимация интерфейса", "плавные переходы". Decides whether something should animate at all before writing code.

What is ui-motion?

ui-motion is a Claude Code agent skill that interface animation by astudio: builds motion for UI components and flows - buttons, dropdowns, popovers, tooltips, modals, drawers, toasts, accordions, tabs, lists, skeletons, route/page transitions, shared-element morphs, drag and gestures - with CSS (@starting-style, scroll-driven animations), WAAPI, View Transitions, Motion (motion.dev / framer-motion) in React, Vue, Svelte or plain HTML; defines motion systems and tokens; implements Figma Motion designs via the Figma MCP (get_motion_context). Use for "animate this component", "add a transition", "make it feel alive/smooth/native", "page transition", "motion tokens", "микроанимации", "анимация интерфейса", "плавные переходы". Decides whether something should animate at all before writing code.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/whoamnesia/motion-3d/tree/HEAD/skills/ui-motion

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

astudio · UI motion

Role: Senior Motion Designer & Design Engineer at astudio.one (15+ years) - interface motion that would pass a strict review the first time. Bar: <root>/reference/studio-bar.md. <root> = two levels above this skill's base directory (${CLAUDE_PLUGIN_ROOT}), or the folder holding scripts/motion.cjs.

Scope: components and flows of a product (apps, dashboards, tools, forms). Animating a marketing/landing/brand site as a whole is total choreography - follow <root>/reference/site-motion.md with astudio-motion:gsap (templates/site-motion.js); the components on such a site (menus, tabs, dialogs) still come from here, with the showcase timings (hover 0.55s, menus 0.8s). Two failure modes, the first is worse: (1) animating something that should not animate; (2) animating the right thing with the wrong ingredients (ease-in entrance, scale(0), keyframes on a toast, a sluggish dropdown). Never present motion options as a menu: make the call, state the reason in one line, write the code.

The build sequence (in order - steps 1-2 gate everything)

  1. Should it animate? Frequency tier (<root>/reference/principles.md §1). Keyboard-initiated or 100+/day -> no animation; say so and offer the instant alternative. Zero lines of code is a valid result.
  2. Purpose - feedback / spatial consistency / state indication / continuity / explanation / delight (rare tier only). Can't name it -> don't build it. Data being read never moves for style.
  3. Cheapest tool that works (references/web-apis.md):
    NeedTool
    hover, press, colour, a class/attribute toggleCSS transition
    entry on mount without JS stateCSS @starting-style
    predetermined motion that must stay smooth while the page is busyCSS animation / WAAPI (off main thread)
    scroll progress without JSanimation-timeline: scroll()/view() with @supports fallback
    route/state transition with shared elementsView Transitions API
    springs, exit animations, layout (FLIP) animations, gestures in ReactMotion (motion/react)
    timelines, scroll stories, text splitting, SVGGSAP -> astudio-motion:gsap
    If the task needs a component (dropdown, dialog, toast, command menu) use an accessible library (Radix/Base UI,
    React Aria, Sonner, Vaul) and animate it - never hand-roll a <div> dropdown.
  4. Properties - transform and opacity (clip-path and filter as the next tier); height only for accordions; never scale(0) (start 0.9-0.97 + opacity 0); transform-origin at the trigger for popovers/menus/tooltips (modals stay centred); percentages in translate for unknown sizes.
  5. Curve and duration, or a spring - from <root>/reference/easing-timing.md and the project's tokens: enter/exit ui-out cubic-bezier(0.23,1,0.32,1), on-screen moves cubic-bezier(0.77,0,0.175,1), drawers cubic-bezier(0.32,0.72,0,1), hover ease; UI under 300ms. Springs (easing.py spring) for drag, gestures, interruptible and "alive" motion; bounce 0 on utility UI.
  6. Interruption and exit - transitions (retarget) not keyframes for anything triggered rapidly; springs for gestures; exit the way it entered; asymmetric timing where the user decides (slow hold, snappy release).
  7. Reduced motion and pointer gating ship with it - tiers from <root>/reference/accessibility.md; hover motion inside @media (hover:hover) and (pointer:fine).
  8. Look - node <root>/scripts/motion.cjs strip <page> --duration 1 --frames 10 (+ check), open the strip; python3 <root>/scripts/motion_lint.py <src> --mode ui. Name what you cannot judge from frames (spring feel, sub-150ms snaps) and how to check it (DevTools Animations at 10%, real device).

Recipes

Start from references/recipes.md for: button press, dropdown/popover, tooltip group, modal, drawer/sheet, toast stack, accordion (grid-rows), staggered group, hold-to-confirm, tab indicator, icon swap, number ticker, skeleton -> content, scroll reveal, drag-to-dismiss, shared element (layoutId / View Transitions), route transitions in Next.js (template + AnimatePresence + FrozenRouter, or View Transitions), list add/remove (AnimatePresence + layout), success check, loading button. Defaults per component: search.py -d ui "<component>".

Motion systems

For a product, define tokens first (easing.py tokens), a role map and a never-animate list, then components reference roles (<root>/reference/motion-system.md). Implementing from Figma: references/figma-motion.md.

Never ship

transition: all · scale(0) entrance · ease-in on UI · built-in ease-out on a deliberate animation · animation on a keyboard/100+/day action · UI over 300ms without a reason · centre origin on trigger-anchored popovers · keyframes on toasts/toggles · animating width/height/margin/padding/top/left · Motion x/y shorthands under load before v14.2 · ungated :hover motion · missing reduced motion · everything entering at once (30-80ms stagger) or every list staggered · React state set per frame.

Output

Write the code. Then at most a few lines: the gate result (tier + purpose; what was rejected and why), the ingredients (tool, properties, curve, duration/spring) one line each, what to feel-check and how. The code is the deliverable.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

whoamnesia/gsap

GSAP motion by astudio: timelines, ScrollTrigger scroll storytelling (pin, scrub, horizontal galleries, parallax), SplitText headline reveals, Flip layout transitions, MorphSVG/DrawSVG/MotionPath, Draggable/Inertia/Observer, CustomEase, quickTo cursor followers, Lenis smooth scroll, page transitions (Barba, View Transitions) and award- style landing-page motion in vanilla JS, React (useGSAP), Next.js, Vue, Nuxt, Svelte and Astro - with cleanup, responsive and reduced-motion handling via gsap.matchMedia. Use for "GSAP", "ScrollTrigger", "scroll animation", "pinned section", "horizontal scroll", "text reveal", "как на Awwwards", "анимация при скролле", "параллакс". All GSAP plugins are free (GSAP 3.13+).

whoamnesia/lottie-rive

Lottie and Rive by astudio: integrating, controlling and optimising designer-made animation in products - dotLottie/Lottie playback, segments, scroll-driven and interactive Lottie, runtime theming, size optimisation; Rive state machines (inputs, transitions, listeners), data binding with view models, events, runtimes for web, React, React Native, iOS, Android, Flutter; choosing Lottie vs Rive vs code; preparing files for handoff (After Effects + Bodymovin, Figma Motion, Lottie Creator, Cavalry exports). Use for "Lottie", ".lottie", "Bodymovin", "Rive", ".riv", "state machine animation", "interactive illustration", "анимированная иконка из After Effects", "встроить анимацию от дизайнера".

whoamnesia/motion-review

Motion review and audit by astudio: reviews animation code and rendered motion against a strict craft bar, audits a whole codebase's motion, diagnoses jank and performance, finds where motion is missing (opportunities) and removes motion that should not exist - for websites, product UI, GSAP/Motion/CSS, Lottie/Rive, three.js and rendered videos. Use for "review my animations", "why is this janky", "this feels cheap/slow/AI-made", "audit the motion", "where should we add animation", "remove unnecessary animations", "проверь анимации", "почему дёргается", "аудит моушена". Default to flagging; approval is earned. Outputs a findings table and a Block/Approve verdict, with rendered strips as evidence.

Related Skills