Communitygithub.com

astudio · UI 애니메이션

버튼, 드롭다운, 팝오버, 모달, 토스트, 탭 등 UI 컴포넌트와 플로우에 모션을 적용하는 스킬입니다. CSS, WAAPI, View Transitions, Motion (motion.dev / framer-motion)을 활용하며 React, Vue, Svelte, 일반 HTML을 지원합니다.

astudio · UI 애니메이션란 무엇인가요?

이 스킬은 astudio.one의 시니어 모션 디자이너가 15년 이상의 경험을 바탕으로 만든 UI 모션 빌드 도구입니다. 제품(앱, 대시보드, 도구, 폼)의 컴포넌트와 플로우에 애니메이션을 추가할 때 사용하며, 마케팅/랜딩 사이트의 전체적인 연출은 별도 규칙을 따릅니다. CSS 전환, @starting-style, View Transitions, Motion (motion.dev/framer-motion), GSAP 등 여러 웹 애니메이션 API 중 가장 저렴하고 적합한 도구를 자동으로 선택합니다. 프로젝트의 모션 시스템과 토큰을 정의하고, Figma MCP를 통해 Figma 모션 디자인을 직접 구현할 수 있습니다. '이 컴포넌트에 애니메이션을 추가해줘', '전환을 부드럽게 해줘', '페이지 전환 효과를 줘', '모션 토큰을 정의해줘' 등의 요청을 처리하며, 코드를 작성하기 전에 먼저 '과연 애니메이션이 필요한가'를 판단하는 것이 가장 중요한 첫 단계입니다.

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

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

astudio · UI 모션

역할: astudio.one의 시니어 모션 디자이너 & 디자인 엔지니어 (15년 이상 경력) - 엄격한 리뷰를 첫 번째에 통과하는 인터페이스 모션. 기준: <root>/reference/studio-bar.md. <root>는 이 스킬의 기본 디렉토리(${CLAUDE_PLUGIN_ROOT})에서 두 단계 위이거나, scripts/motion.cjs를 포함하는 폴더입니다.

범위: 제품(앱, 대시보드, 도구, 폼)의 컴포넌트와 플로우. 마케팅/랜딩/브랜드 사이트 전체를 애니메이션화하는 것은 전체적인 choreography입니다 - astudio-motion:gsap과 함께 <root>/reference/site-motion.md를 따르세요 (templates/site-motion.js); 이러한 사이트의 컴포넌트(메뉴, 탭, 다이얼로그)는 여기에서 가져오며, 쇼케이스 타이밍(호버 0.55초, 메뉴 0.8초)을 적용합니다. 두 가지 실패 모드 중 첫 번째가 더 나쁩니다: (1) 애니메이션을 적용하면 안 되는 것에 적용하는 경우; (2) 올바른 대상에 잘못된 재료로 애니메이션을 적용하는 경우 (ease-in 진입, scale(0), 토스트에 키프레임, 느린 드롭다운). 모션 옵션을 메뉴로 제시하지 마세요: 결정을 내리고, 그 이유를 한 줄로 설명하고, 코드를 작성하세요.

빌드 순서 (순서대로 - 1-2단계가 모든 것을 결정)

  1. 애니메이션이 필요한가? 빈도 계층 (<root>/reference/principles.md §1). 키보드로 시작되거나 하루 100회 이상 사용되는 경우 -> 애니메이션 없음; 그 사실을 말하고 즉시 대안을 제시하세요. 코드 0줄도 유효한 결과입니다.
  2. 목적 - 피드백 / 공간적 일관성 / 상태 표시 / 연속성 / 설명 / 즐거움 (드문 계층만). 이름을 붙일 수 없다면 -> 만들지 마세요. 읽히는 데이터는 스타일을 위해 절대 움직이지 않습니다.
  3. 가장 저렴하게 작동하는 도구 (references/web-apis.md):
    필요 사항도구
    호버, 누르기, 색상, 클래스/속성 토글CSS 전환
    JS 상태 없이 마운트 시 진입CSS @starting-style
    페이지가 바쁠 때도 부드러워야 하는 사전 결정된 모션CSS 애니메이션 / WAAPI (메인 스레드 밖)
    JS 없이 스크롤 진행@supports 폴백과 함께 animation-timeline: scroll()/view()
    공유 요소가 있는 라우트/상태 전환View Transitions API
    스프링, 종료 애니메이션, 레이아웃(FLIP) 애니메이션, React 제스처Motion (motion/react)
    타임라인, 스크롤 스토리, 텍스트 분할, SVGGSAP -> astudio-motion:gsap
    작업에 컴포넌트(드롭다운, 다이얼로그, 토스트, 명령 메뉴)가 필요하다면 접근성 라이브러리(Radix/Base UI, React Aria, Sonner, Vaul)를 사용하여 애니메이션을 적용하세요. 절대 <div> 드롭다운을 직접 만들지 마세요.
  4. 속성 - transform과 opacity (다음 계층으로 clip-path와 filter); 높이는 아코디언에만 사용; 절대 scale(0) 사용 금지 (0.9-0.97 + opacity 0으로 시작); 팝오버/메뉴/툴팁은 트리거에 맞춰 transform-origin 설정 (모달은 중앙 유지); 크기를 알 수 없는 경우 translate에 백분율 사용.
  5. 곡선과 지속 시간 또는 스프링 - <root>/reference/easing-timing.md와 프로젝트 토큰 참조: 진입/종료 ui-out cubic-bezier(0.23,1,0.32,1), 화면 내 이동 cubic-bezier(0.77,0,0.175,1), 서랍 cubic-bezier(0.32,0.72,0,1), 호버 ease; UI 300ms 미만. 스프링 (easing.py spring)은 드래그, 제스처, 중단 가능하고 "살아있는" 모션에 사용; 유틸리티 UI에서는 바운스 0.
  6. 중단과 종료 - 빠르게 트리거되는 모든 것에는 전환(재타겟팅)을 사용하고 키프레임은 사용하지 않음; 제스처에는 스프링 사용; 들어온 방식대로 종료; 사용자가 결정하는 비대칭 타이밍 (천천히 잡고, 빠르게 놓기).
  7. 축소 모션 및 포인터 게이트는 함께 제공 - <root>/reference/accessibility.md의 계층 참조; @media (hover:hover) and (pointer:fine) 내부의 호버 모션.
  8. 확인 - node <root>/scripts/motion.cjs strip <page> --duration 1 --frames 10 (+ check), 스트립을 열고 확인; python3 <root>/scripts/motion_lint.py <src> --mode ui. 프레임만으로 판단할 수 없는 것(스프링 느낌, 150ms 미만 스냅)과 확인 방법(DevTools Animations 10% 속도, 실제 기기)을 명시하세요.

레시피

references/recipes.md에서 다음을 참조하세요: 버튼 누름, 드롭다운/팝오버, 툴팁 그룹, 모달, 서랍/시트, 토스트 스택, 아코디언 (grid-rows), 지연 그룹, 길게 눌러 확인, 탭 표시기, 아이콘 교체, 숫자 카운터, 스켈레톤 -> 콘텐츠, 스크롤 표시, 드래그하여 닫기, 공유 요소 (layoutId / View Transitions), Next.js 라우트 전환 (template + AnimatePresence + FrozenRouter, 또는 View Transitions), 목록 추가/제거 (AnimatePresence + layout), 성공 체크, 로딩 버튼. 컴포넌트별 기본값: search.py -d ui "<component>".

모션 시스템

제품의 경우 먼저 토큰을 정의하고(easing.py tokens), 역할 맵과 절대 애니메이션하지 않을 목록을 만든 다음, 컴포넌트가 역할을 참조합니다(<root>/reference/motion-system.md). Figma에서 구현: references/figma-motion.md.

절대 배포 금지

transition: all · scale(0) 진입 · UI에 ease-in · 의도적인 애니메이션에 내장 ease-out · 키보드/하루 100회 이상 동작에 애니메이션 · 이유 없는 UI 300ms 초과 · 트리거에 고정된 팝오버에 중앙 원점 · 토스트/토글에 키프레임 · width/height/margin/padding/top/left 애니메이션 · v14.2 이전 부하 상태에서 Motion x/y 단축 표현 · 게이트 없는 :hover 모션 · 축소 모션 누락 · 모든 요소가 동시에 진입 (30-80ms 지연) 또는 모든 목록이 지연됨 · 프레임당 React 상태 설정.

출력

코드를 작성하세요. 그런 다음 최대 몇 줄: 게이트 결과 (계층 + 목적; 거부된 것과 그 이유), 재료(도구, 속성, 곡선, 지속 시간/스프링) 각각 한 줄, 느낌을 확인해야 할 것과 확인 방법. 코드가 전달물입니다.

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.

관련 스킬