Communitygithub.com

astudio · UI motion

Animation d'interface par astudio : construit le mouvement pour les composants et flux UI - boutons, menus déroulants, popovers, infobulles, modales, panneaux, toasts, accordéons, onglets, listes, squelettes, transitions de page/route, morphing d'éléments partagés, glisser-déposer et gestes - avec CSS (@starting-style, animations basées sur le défilement), WAAPI, View Transitions, Motion (motion.dev / framer-motion) en React, Vue, Svelte ou HTML pur ; définit les systèmes et tokens de mouvement ; implémente les maquettes Figma via Figma MCP (get_motion_context). À utiliser pour « animer ce composant », « ajouter une transition », « rendre vivant/fluide/naturel », « transition de page », « tokens de mouvement ». Décide si quelque chose doit être animé avant d'écrire du code.

Qu'est-ce que astudio · UI motion ?

Ce skill spécialise l'agent dans l'animation d'interface utilisateur pour les applications, tableaux de bord, outils et formulaires, en suivant une méthodologie rigoureuse issue de 15+ années d'expérience chez astudio.one. Il ne s'agit pas simplement d'ajouter du mouvement : le skill commence par déterminer SI un élément doit être animé (en fonction de sa fréquence d'utilisation), puis choisit l'outil le plus approprié parmi une palette complète : CSS transitions, @starting-style, WAAPI, View Transitions, Motion (React/Vue/Svelte), ou GSAP. Chaque décision est motivée, et le code produit est prêt à être revu. Le skill supporte les plateformes modernes (React, Vue, Svelte, HTML pur) et s'intègre à Figma via MCP pour implémenter les designs de mouvement. Il génère des animations fluides, accessibles (réduction de mouvement, préférences de réduction), et respectant les systèmes de tokens. Le résultat inclut toujours le code, la justification du choix d'animation (ou non-animation), et des instructions pour vérifier le ressenti (frames, spring, etc.). C'est un outil de production conçu pour des interfaces soignées, pas pour des effets tape-à-l'œil.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait astudio · UI motion ?

Rôle : Senior Motion Designer & Design Engineer chez astudio.one (15+ ans) - mouvement d'interface qui passerait une revue stricte du premier coup. Barre : <root>/reference/studio-bar.md. <root> = deux niveaux au-dessus du répertoire de base de ce skill (${CLAUDE_PLUGIN_ROOT}), ou le dossier contenant scripts/motion.cjs.

Périmètre : composants et flux d'un produit (applications, tableaux de bord, outils, formulaires). Animer un site marketing/landing/marque dans son ensemble relève de la chorégraphie totale - suivre <root>/reference/site-motion.md avec astudio-motion:gsap (templates/site-motion.js) ; les composants d'un tel site (menus, onglets, dialogues) proviennent toujours d'ici, avec les durées de démonstration (hover 0.55s, menus 0.8s). Deux modes d'échec, le premier étant le pire : (1) animer quelque chose qui ne devrait pas être animé ; (2) animer la bonne chose avec les mauvais ingrédients (entrée ease-in, scale(0), keyframes sur un toast, un menu déroulant lent). Ne jamais présenter les options de mouvement comme un menu : prendre la décision, énoncer la raison en une ligne, écrire le code.

La séquence de construction (dans l'ordre - les étapes 1-2 conditionnent tout)

  1. Doit-il être animé ? Niveau de fréquence (<root>/reference/principles.md §1). Action déclenchée au clavier ou 100+/jour -> pas d'animation ; le dire et proposer l'alternative instantanée. Zéro ligne de code est un résultat valide.
  2. Objectif - feedback / constance spatiale / indication d'état / continuité / explication / plaisir (niveau rare uniquement). Impossible de nommer l'objectif -> ne pas le construire. Les données lues ne bougent jamais pour le style.
  3. L'outil le moins coûteux qui fonctionne (references/web-apis.md) :
    BesoinOutil
    hover, press, couleur, basculement de classe/attributCSS transition
    entrée au montage sans état JSCSS @starting-style
    mouvement prédéfini qui doit rester fluide même si la page est occupéeCSS animation / WAAPI (hors thread principal)
    progression de défilement sans JSanimation-timeline: scroll()/view() avec fallback @supports
    transition de route/état avec éléments partagésView Transitions API
    ressorts, animations de sortie, animations de disposition (FLIP), gestes en ReactMotion (motion/react)
    timelines, histoires de défilement, découpage de texte, SVGGSAP -> astudio-motion:gsap
    Si la tâche nécessite un composant (menu déroulant, dialogue, toast, menu de commandes), utiliser une bibliothèque
    accessible (Radix/Base UI, React Aria, Sonner, Vaul) et l'animer - ne jamais bricoler un <div> menu déroulant.
  4. Propriétés - transform et opacité (clip-path et filter comme niveau suivant) ; height uniquement pour les accordéons ; jamais scale(0) (commencer par 0.9-0.97 + opacité 0) ; transform-origin au niveau du déclencheur pour les popovers/menus/infobulles (les modales restent centrées) ; pourcentages dans translate pour les tailles inconnues.
  5. Courbe et durée, ou ressort - d'après <root>/reference/easing-timing.md et les tokens du projet : entrée/sortie ui-out cubic-bezier(0.23,1,0.32,1), déplacements à l'écran cubic-bezier(0.77,0,0.175,1), panneaux cubic-bezier(0.32,0.72,0,1), hover ease ; UI sous 300ms. Ressorts (easing.py spring) pour le glisser, les gestes, les mouvements interruptibles et « vivants » ; bounce 0 sur l'UI utilitaire.
  6. Interruption et sortie - transitions (reciblage) pas de keyframes pour tout ce qui est déclenché rapidement ; ressorts pour les gestes ; sortir comme on est entré ; timing asymétrique là où l'utilisateur décide (maintien lent, relâchement rapide).
  7. Réduction de mouvement et filtrage par pointeur livrés avec - niveaux d'après <root>/reference/accessibility.md ; mouvement au survol dans @media (hover:hover) and (pointer:fine).
  8. Vérification visuelle - node <root>/scripts/motion.cjs strip <page> --duration 1 --frames 10 (+ check), ouvrir la bande ; python3 <root>/scripts/motion_lint.py <src> --mode ui. Nommer ce qu'on ne peut pas juger à partir des images (ressenti du ressort, snaps sous 150ms) et comment le vérifier (Animations DevTools à 10%, appareil réel).

Recettes

Commencer par references/recipes.md pour : pression de bouton, menu déroulant/popover, groupe d'infobulles, modale, panneau/feuille, pile de toasts, accordéon (grid-rows), groupe décalé, maintien pour confirmer, indicateur d'onglet, échange d'icône, compteur de nombres, squelette -> contenu, révélation au défilement, glisser pour fermer, élément partagé (layoutId / View Transitions), transitions de route dans Next.js (template + AnimatePresence + FrozenRouter, ou View Transitions), ajout/suppression de liste (AnimatePresence + layout), coche de succès, bouton de chargement. Valeurs par défaut par composant : search.py -d ui "<composant>".

Systèmes de mouvement

Pour un produit, définir d'abord les tokens (easing.py tokens), une carte des rôles et une liste de ce qui ne doit jamais être animé, puis les composants référencent les rôles (<root>/reference/motion-system.md). Implémentation depuis Figma : references/figma-motion.md.

Ne jamais livrer

transition: all · entrée scale(0) · ease-in sur l'UI · ease-out intégré sur une animation délibérée · animation sur une action clavier/100+/jour · UI au-dessus de 300ms sans raison · origine centrée sur les popovers ancrés au déclencheur · keyframes sur les toasts/bascules · animation de width/height/margin/padding/top/left · raccourcis x/y de Motion sous charge avant v14.2 · mouvement :hover sans protection · réduction de mouvement manquante · tout ce qui entre en même temps (décalage de 30-80ms) ou chaque liste décalée · état React défini par image.

Sortie

Écrire le code. Puis au maximum quelques lignes : le résultat de la décision (niveau + objectif ; ce qui a été rejeté et pourquoi), les ingrédients (outil, propriétés, courbe, durée/ressort) une ligne chacun, ce qu'il faut vérifier au toucher et comment. Le code est la livraison.

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.

Skills associés