popmotion — скилл для Claude Code: что делает и как установить
Скилл учит агента применять 12 принципов анимации Диснея с помощью библиотеки Popmotion. Пригодится для настройки плавной физики интерфейсов и ключевых кадров.
npx skills add dylantarre/animation-principles --skill popmotion -a claude-codeЧто делает popmotion
Скилл даёт готовые шаблоны кода для двенадцати правил анимации на Popmotion. В их числе сжатие и растяжение, упреждение, сценичность и сквозное движение. В примерах задействованы функции animate(), keyframes() и физика spring().
Код меняет стили элементов напрямую через transform и opacity. Библиотека не привязана к UI-фреймворкам, но сам пакет popmotion должен быть добавлен в проект, иначе примеры не запустятся.
Какие задачи решает
- Настроить физические пружинные анимации интерфейса через
spring() - Реализовать упреждение и отдачу для интерактивных кнопок
- Собрать многоэтапные перемещения элементов по траекториям с помощью
keyframes() - Создать эффект наложения и задержки для связанных деталей
Примеры запросов агенту
- Сделай анимацию карточки при клике с пружинным овершутом через Popmotion.
- Напиши цепочку keyframes для движения плашки по дуге.
- Добавь упреждение перед вылетом модального окна.
Как установить popmotion
1Через Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill popmotion -a claude-code2Вручную: положить файлы
~/.claude/skills/popmotion/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/popmotion/
1Через Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill popmotion -a codex2Вручную: положить файлы
.agents/skills/popmotion/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill popmotion -a cursor2Вручную: положить файлы
.cursor/skills/popmotion/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles popmotion2Вручную: положить файлы
.github/skills/popmotion/SKILL.md1Через Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill popmotion -a gemini-cli2Командой платформы
gemini skills install https://github.com/dylantarre/animation-principles --path skills/09-by-tool-framework/popmotionВручную: положить файлы
.devin/skills/popmotion/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill popmotion -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о popmotion
Как установить popmotion в Claude Code?
Выполните команду npx skills add dylantarre/animation-principles --skill popmotion -a claude-code.
Что делает скилл popmotion?
Он передаёт агенту примеры реализации 12 диснеевских принципов анимации с помощью функций animate, spring и keyframes.
Нужен ли React для работы этого скилла?
Нет, Popmotion работает без привязки к конкретному фреймворку. Все примеры меняют свойства DOM-элементов напрямую.
Исходный текст
SKILL.md · MIT
---
name: popmotion
description: Use when implementing Disney's 12 animation principles with Popmotion's functional animation library
---
# Popmotion Animation Principles
Implement all 12 Disney animation principles using Popmotion's composable animation functions.
## 1. Squash and Stretch
```javascript
import { animate } from "popmotion";
animate({
from: { scaleX: 1, scaleY: 1 },
to: { scaleX: 1.2, scaleY: 0.8 },
duration: 150,
onUpdate: ({ scaleX, scaleY }) => {
element.style.transform = `scaleX(${scaleX}) scaleY(${scaleY})`;
}
});
```
## 2. Anticipation
```javascript
// Wind up then action
animate({
from: 0,
to: 10,
duration: 200,
onUpdate: v => element.style.transform = `translateY(${v}px) scaleY(0.9)`,
onComplete: () => {
animate({
from: 10,
to: -200,
duration: 400,
ease: easeOut,
onUpdate: v => element.style.transform = `translateY(${v}px)`
});
}
});
```
## 3. Staging
```javascript
animate({
from: 1,
to: 0.6,
onUpdate: v => bg.style.opacity = v
});
animate({
from: 1,
to: 1.1,
onUpdate: v => hero.style.transform = `scale(${v})`
});
```
## 4. Straight Ahead / Pose to Pose
```javascript
import { keyframes } from "popmotion";
keyframes({
values: [
{ x: 0, y: 0 },
{ x: 100, y: -50 },
{ x: 200, y: 0 },
{ x: 300, y: -30 }
],
duration: 1000,
onUpdate: ({ x, y }) => {
element.style.transform = `translate(${x}px, ${y}px)`;
}
});
```
## 5. Follow Through and Overlapping Action
```javascript
animate({ from: 0, to: 200, duration: 500,
onUpdate: v => body.style.transform = `translateX(${v}px)` });
animate({ from: 0, to: 200, duration: 500, elapsed: -50, // delay
onUpdate: v => hair.style.transform = `translateX(${v}px)` });
animate({ from: 0, to: 200, duration: 600, elapsed: -100,
onUpdate: v => cape.style.transform = `translateX(${v}px)` });
```
## 6. Slow In and Slow Out
```javascript
import { animate, easeInOut, easeIn, easeOut } from "popmotion";
animate({
from: 0,
to: 300,
duration: 600,
ease: easeInOut,
onUpdate: v => element.style.transform = `translateX(${v}px)`
});
```
## 7. Arc
```javascript
keyframes({
values: [
{ x: 0, y: 0 },
{ x: 100, y: -100 },
{ x: 200, y: 0 }
],
duration: 1000,
ease: easeInOut,
onUpdate: ({ x, y }) => {
element.style.transform = `translate(${x}px, ${y}px)`;
}
});
```
## 8. Secondary Action
```javascript
// Primary action triggers secondary
animate({
from: 1, to: 1.1, duration: 200,
onUpdate: v => button.style.transform = `scale(${v})`,
onComplete: () => {
animate({
from: 0, to: 15, duration: 150,
onUpdate: v => icon.style.transform = `rotate(${v}deg)`
});
}
});
```
## 9. Timing
```javascript
import { spring } from "popmotion";
// Fast
animate({ from: 0, to: 100, duration: 150 });
// Spring physics
spring({
from: 0,
to: 100,
stiffness: 300,
damping: 20,
onUpdate: v => element.style.transform = `translateX(${v}px)`
});
// Slow
animate({ from: 0, to: 100, duration: 800, ease: easeOut });
```
## 10. Exaggeration
```javascript
spring({
from: { scale: 1, rotate: 0 },
to: { scale: 1.5, rotate: 720 },
stiffness: 200,
damping: 10, // low = overshoot
onUpdate: ({ scale, rotate }) => {
element.style.transform = `scale(${scale}) rotate(${rotate}deg)`;
}
});
```
## 11. Solid Drawing
```javascript
animate({
from: { rotateX: 0, rotateY: 0 },
to: { rotateX: 45, rotateY: 30 },
duration: 500,
onUpdate: ({ rotateX, rotateY }) => {
box.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
}
});
```
## 12. Appeal
```javascript
animate({
from: 1,
to: 1.02,
duration: 300,
ease: easeOut,
onUpdate: v => {
card.style.transform = `scale(${v})`;
card.style.boxShadow = `0 ${20*v}px 40px rgba(0,0,0,${0.2*v})`;
}
});
```
## Key Popmotion Features
- `animate()` - Tween animations
- `spring()` - Physics-based spring
- `keyframes()` - Multi-step animations
- `decay()` - Momentum/inertia
- `easeIn`, `easeOut`, `easeInOut` - Easing functions
- Composable functions - mix and pipe
- Framework agnostic
- Powers Framer Motion under the hood
© dylantarre · MIT · dylantarre/animation-principles