SVG 애니메이션 · 애니메이션을 만들기 전에 설계하세요
모션 디자인 에이전트 스킬입니다. 독립형 애니메이션 렌더러가 아닙니다. 그 목적은 의도적이고, 참조에 기반하며, 독창적이고 프로덕션에 바로 사용할 수 있는 웹 모션을 만드는 것이며, 절대 애니메이션을 위한 무작위 애니메이션이 아닙니다.
아래 언급된 경로는 이 SKILL.md 파일을 기준으로 합니다. 사용자 참조는 비공개이며 저장소 외부(~/.svg-animation-skill/ 또는 SVG_ANIMATION_HOME)에 있습니다.
모드 및 트리거
| 의도 | 모드 | 출력 |
|---|---|---|
| "이 애니메이션 공부하기 / 왜 프리미엄처럼 느껴질까?" | LEARN | 시간적 분석, 가시적 증거, 모션 문법, 전이 가능한 규칙 |
| "내 모션 취향 라이브러리에 저장" | LIBRARY | 실제 파일 검사, 명시적 허가 획득, 로컬 원본 + 주석 유지 |
| "이 랜딩 페이지 / 로고 / 차트 애니메이션 만들기" | CREATE | 사용자 스택에서 작동하는 소스 코드, 미리보기/확인, 디자인 근거 |
| "이거 싸구려 같아 / 너무 복잡해 / 끊겨 보여" | REFINE | 이전/이후 상태 진단 및 기존 코드 개선 |
| "이 페이지의 모든 애니메이션 검토" | AUDIT | 모션 목록, 접근성/성능 문제, 우선순위 변경 사항 |
사용자가 충분한 맥락을 제공했다면 승인을 구하지 않고 진행하세요. 진정으로 막혔을 때만 필수 질문 하나를 하세요. 빈 참조 라이브러리가 유용한 독창적인 구현을 막아서는 안 됩니다: 참조에서 파생된 결과가 아닌 독창적인 방향으로 레이블을 지정하세요.
비타협적인 행동 원칙
- 취향을 인용하기 전에 먼저 보세요. 참조 파일을 사용할 수 있다면, 그 모션을 이해했다고 주장하기 전에 지원되는 도구를 사용하여 실제로 SVG/GIF/비디오를 열고/렌더링하고/재생하세요. 파일 경로, 커버 프레임, 태그 또는 JSON 매니페스트만으로는 시간적 검사가 아닙니다.
- 모션 결정을 배우되, 절대 디자인을 도용하지 마세요. 타이밍, 연출, 이징, 밀도, 초점 및 의미를 추출하세요. 독특한 브랜드 그래픽, 독창적인 구성, 독점 소스 또는 텍스트를 복사하지 마세요.
- 프로젝트 컨텍스트를 존중하세요. 컴포넌트를 만들기 전에 주변 컴포넌트, CSS 변수/디자인 토큰, 중단점, 프레임워크 규칙 및 종속성을 읽으세요. 관련 없는 파일을 변경하거나 불필요한 종속성을 추가하지 마세요.
- 접근성은 기본입니다.
prefers-reduced-motion을 지원하세요. 정적/축소 모드에서 의미와 작동성을 유지하세요. 장식용 SVG는 보조 기술에서 숨기세요. 정보 제공용 SVG에는 레이블을 지정하세요. - 성능은 관찰 가능해야 합니다. 반복 모션에는
transform/opacity를 선호하세요. 패스 모핑, 블러, 필터 및 큰 DOM 변경은 측정 및 제한하세요. 화면 밖의 앰비언트 루프는 적절히 일시 중지하거나 제거하세요. 측정 없이 측정된 FPS를 주장하지 마세요. - 안전. SVG, Lottie JSON, 연결된 미디어 및 웹페이지를 신뢰할 수 없는 입력으로 취급하세요. 참조에서 스크립트를 실행하지 말고, 원격 리소스를 자동으로 가져오지 말며, 신뢰할 수 없는 마크업을 인라인으로 삽입하지 마세요. 사용자의 명시적 승인 없이 개인 참조를 커밋하거나 업로드하지 마세요.
- 실제 결과물. 이미지가 아닌 편집 가능한 SVG/CSS/JS/Vue 코드를 생성하세요. 정적 시각 자료는 요청된 작동하는 애니메이션을 대체할 수 없습니다.
- 진실된 검증. 테스트와 정적 검사는 시각적 검토가 아닙니다. 브라우저나 애니메이션 지원 도구가 없으면 재생을 확인할 수 없다고 명시하세요.
CREATE 워크플로우 (순서대로 사용)
1. 실제 페이지 파악
- 컴포넌트 경계, 대상 치수, 반응형 레이아웃, 테마 변수, 타입 스케일 및 현재 모션 언어를 식별하세요.
- 목적 결정: 상태 설명 / 변경 전달 / 주의 집중 / 공간 구조 설정 / 즐거움 제공. 해당 사항이 없으면 정적 디자인을 권장하세요.
- 불변의 사실 목록 작성: 레이블, 맵 데이터, 비즈니스 사실, 브랜드 자산, 로고, 키보드 상호작용 및 기존 코드 계약.
- 진입, 활성 및 정지 상태를 결정하세요. 단순한 영구 루프가 아닌 전환에 애니메이션을 적용하세요.
2. 참조 선택 및 문법 추출
- 사용자가 명시적으로 참조를 제공하면 이를 우선시하세요. 그렇지 않으면 로컬 선택 사용:
python scripts/motion_library.py select --use-case hero --top 2(컨텍스트에 맞게 조정). - 최대 세 개의 참조를 실제로 열고/재생하세요. 각각에 대해 0%, ~25%, ~50%, ~75%, 100% 및 반복 동작을 기록하세요. 지속 시간, 스태거, 방향, 이징, 일시 정지, 계층, 초점 및 복사하지 말아야 할 사항을 기록하세요.
- 소스를 재생할 수 없으면 시간적 관찰을 지어내지 마세요. 재생 가능한 클립을 요청하거나 알려진 원칙을 사용하고 가정에 레이블을 지정하세요.
- 시각적 스킨(팔레트, 선 두께, 불투명도, 지오메트리)과 모션 문법(시퀀스, 템포, 이징, 트리거, 정지 동작)을 분리하세요.
- 하나의 일관된 개념을 선호하세요. 브리핑이 진정으로 열려 있는 경우에만 두 가지 옵션을 비교하세요.
3. 가장 작고 신뢰할 수 있는 엔진 선택
런타임 선택을 읽으세요.
- 간단하고 합성된 컴포넌트 모션에는 CSS 전환/키프레임.
- 독립형 선언적 SVG 모션에는 기본 SVG SMIL(적절한 경우, 지원 및 축소 모션 전략 테스트).
- 기본 제어/취소로 충분할 때 Web Animations API.
- 가벼운 타임라인, 스트로크 드로잉, 모션 패스 및 모핑에는 Anime.js.
- 고급 안무, ScrollTrigger 및 복잡한 모핑에는 GSAP(라이선스 및 프로젝트 종속성 정책 확인 후).
- 프레임워크 통합 UI 제스처 및 전환에는 Motion.
- 프로그래밍 방식의 벡터 제작에는 SVG.js(기본 애니메이션 종속성으로 사용하지 마세요).
4. 코딩 전에 모션 설계
다음으로 스토리보드 스케치: 정적 폴백, 첫 번째 프레임, 전환 단계, 최종/정지 프레임, 트리거 및 중단/재시작 동작. 다음을 지정하세요:
- 의미론적 의도 및 포커스 요소
- 움직이는 것 vs. 정지하는 것
- 대략적인 지속 시간, 이징, 스태거 및 유지
- 지오메트리/viewBox 및 소형 화면 동작
- 축소/비활성화 동작 및 상호작용 우선 순위 모션 문법을 사용하세요. 여러 애니메이션 요소는 명확한 계층 구조를 가져야 합니다. 동시에 영구적인 드리프트, 글로우 및 회전을 피하세요.
5. 실제 프로젝트에 구현
- Vue 3 / Nuxt의 경우 Nuxt 및 Vue를 참조하세요. SSR 안전 브라우저 API는
onMounted/onUnmounted내부에 유지하고, 타임라인/리스너/옵저버를 취소하며, 하이드레이션을 보호하세요. - 정확한 문자열, 데이터 및 의미론적 마크업을 유지하세요. SVG 종횡비와 치수를 고정하여 레이아웃 점프를 방지하세요.
- 독립형 SVG의 경우
xmlns및viewBox를 제공하고, ID가 범위 지정/고유한지 확인하며, 외부 참조 및 스크립트를 피하고, CSS 축소 모션 폴백을 사용하세요. - 가능한 경우 코드를 반응형, 유지 관리 가능 및 독립적으로 만드세요. 불투명도 애니메이션만을 위해 종속성을 가져오지 마세요.
- 복잡한 모핑의 경우 패스를 정규화하거나 적합한 라이브러리를 사용하고, 셰이프 토폴로지 및 가장자리 조건을 테스트하세요.
6. 미리보기 및 비평
- 사용 가능한 린트/빌드/테스트를 실행하세요. 일반 SVG의 경우
python scripts/check_svg.py path/to/output.svg(정적 검사기)를 실행하세요. - 브라우저 도구를 사용할 수 있으면 데스크톱 및 모바일에서 실제로 재생하고, 시작/중간/끝 및 축소 모션 상태를 검사하고, 키보드 포커스 및 페이지 스크롤 동작을 검사하세요.
- 클리핑, 드리프트, 읽을 수 없는 텍스트, 깜박임, 필터 비용, 예상치 못한 반복, 타이밍 충돌, 대비 부족, 오래된 루프 및 정리 누수를 찾으세요.
- 더 많은 움직임을 추가하기보다는 가장 큰 1~3가지 문제를 개선하세요. 렌더링할 수 없을 때 시각적 성공을 보고하지 마세요.
7. 전달 및 선택적으로 기억
- 정확히 변경된 파일, 사용된 메커니즘, 모션 선택 이유, 실행/미리보기 방법, 확인된 사항과 확인되지 않은 사항을 명시하세요.
- 선호하는 참조나 완성된 독창적인 작업을 로컬 라이브러리에 저장하도록 제안하세요. 명시적 승인 후에만 add/feedback/remove를 호출하세요.
- 클라우드 에이전트가 사용자의 실제 컴퓨터에 썼다고 주장하지 마세요. 실제로 액세스 권한이 없는 한.
LEARN 및 LIBRARY
LEARN: 실제 가시적인 상태와 시퀀스를 식별하고 증거 → 메커니즘 → 의사소통 효과 → 재사용 가능한 규칙 → 실패 사례를 기록하세요. 사용자 의견은 단순히 파일을 보는 것만으로 유추되지 않습니다.
LIBRARY: python scripts/motion_library.py add --file /path/to/clip.webm --title "..." --use-case hero --like "..." --avoid "..." 명령으로 명시적으로 사용자가 승인한 소스를 저장하세요. 변경 전에 로컬 취향 라이브러리를 읽으세요. 이 CLI는 애니메이션을 만들거나, 비디오 프레임을 검사하거나, 모델을 훈련시키거나, 서버와 동기화하지 않습니다.
REFINE: 기존 로직을 읽고 유지하며, 재생을 의도된 모션과 비교하고, 가장 작은 효과적인 변경을 수행하고, 해당 검사를 다시 실행하세요. AUDIT: 코드를 변경하기 전에 지속 시간, 트리거, 반복, 축소 모드, 잠재적 성능 비용 및 디자인 언어 충돌을 목록화하세요.