Skip to main content
skill CX Codex

motion-one — Claude Code skill: 12 animation principles on Motion One

A skill that walks through Disney's 12 animation principles as Motion One code — squash and stretch, anticipation, stagger, scroll effects.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add dylantarre/animation-principles --skill motion-one -a claude-code
Open on GitHub

What motion-one does

Each principle comes with a JavaScript snippet. Squash and stretch uses scaleX and scaleY keyframes, anticipation and follow through build on timeline() with at offsets, arcs run through offsetDistance, exaggeration leans on spring() with overshoot. The rest of the file covers stagger(), scroll() and inView() for lists, parallax and section reveals.

Motion One wraps the Web Animations API, so the animations it produces are hardware accelerated. That matters when a page has several moving parts at once and you would rather not fight layout thrash by hand.

The snippets import from the motion package, so it has to be in the project before any of this runs. For 3D transforms like rotateX and rotateY, perspective is set in CSS — skip that and the rotation reads flat.

What it helps with

  • make a character crouch before it jumps
  • stagger a list of items into view
  • tie a background parallax to page scroll
  • animate a card on hover
  • swap linear easing for spring physics

Example prompts for the agent

  • show me squash and stretch for a bouncing ball with Motion One
  • build a timeline with follow through for the hair and cape
  • stagger the cards in when the section enters the viewport

How to install motion-one

1Skills CLI (Vercel)

npx skills add dylantarre/animation-principles --skill motion-one -a claude-code

2Manually: put the files in place

~/.claude/skills/motion-one/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/motion-one/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about motion-one

How do I install motion-one in Claude?

Run npx skills add dylantarre/animation-principles --skill motion-one -a claude-code. The skill file lands at ~/.claude/skills/motion-one/SKILL.md.

What does motion-one do?

It maps Disney's 12 animation principles onto Motion One code samples. The agent pulls ready calls to animate(), timeline() and spring() from it.

Does it work outside Claude?

Yes, there are install paths for Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode. Copilot uses a different command: gh skill install dylantarre/animation-principles motion-one.

Source text

SKILL.md · MIT
---
name: motion-one
description: Use when implementing Disney's 12 animation principles with Motion One (modern, lightweight animation library)
---

# Motion One Animation Principles

Implement all 12 Disney animation principles using Motion One's performant Web Animations API wrapper.

## 1. Squash and Stretch

```javascript
import { animate } from "motion";

animate(".ball",
  { scaleX: [1, 1.2, 1], scaleY: [1, 0.8, 1] },
  { duration: 0.3, easing: "ease-in-out" }
);
```

## 2. Anticipation

```javascript
import { timeline } from "motion";

timeline([
  [".character", { y: 10, scaleY: 0.9 }, { duration: 0.2 }],
  [".character", { y: -200 }, { duration: 0.4, easing: "ease-out" }]
]);
```

## 3. Staging

```javascript
animate(".background", { filter: "blur(3px)", opacity: 0.6 });
animate(".hero", { scale: 1.1 });
```

## 4. Straight Ahead / Pose to Pose

```javascript
animate(".element", {
  x: [0, 100, 200, 300],
  y: [0, -50, 0, -30]
}, { duration: 1 });
```

## 5. Follow Through and Overlapping Action

```javascript
timeline([
  [".body", { x: 200 }, { duration: 0.5 }],
  [".hair", { x: 200 }, { duration: 0.5, at: "-0.45" }],
  [".cape", { x: 200 }, { duration: 0.6, at: "-0.5" }]
]);
```

## 6. Slow In and Slow Out

```javascript
animate(".element", { x: 300 }, {
  duration: 0.6,
  easing: [0.42, 0, 0.58, 1] // cubic-bezier ease-in-out
});
// Or: "ease-in", "ease-out", "ease-in-out"
// Or spring: { easing: spring({ stiffness: 100, damping: 15 }) }
```

## 7. Arc

```javascript
animate(".ball", {
  x: [0, 100, 200],
  y: [0, -100, 0]
}, { duration: 1, easing: "ease-in-out" });

// Or with offset path
animate(".element", {
  offsetDistance: ["0%", "100%"]
}, { duration: 1 });
// CSS: offset-path: path('M0,100 Q100,0 200,100');
```

## 8. Secondary Action

```javascript
const button = document.querySelector(".button");
button.addEventListener("mouseenter", () => {
  animate(button, { scale: 1.05 }, { duration: 0.2 });
  animate(".icon", { rotate: 15 }, { duration: 0.15 });
});
```

## 9. Timing

```javascript
import { spring } from "motion";

// Fast snap
animate(".fast", { x: 100 }, { duration: 0.15 });

// Spring physics
animate(".spring", { x: 100 }, {
  easing: spring({ stiffness: 300, damping: 20 })
});

// Slow dramatic
animate(".slow", { x: 100 }, { duration: 0.8, easing: "ease-out" });
```

## 10. Exaggeration

```javascript
import { spring } from "motion";

animate(".element", { scale: 1.5, rotate: 720 }, {
  easing: spring({ stiffness: 200, damping: 10 }) // overshoot
});
```

## 11. Solid Drawing

```javascript
animate(".box", {
  rotateX: 45,
  rotateY: 30
}, { duration: 0.5 });
// Set perspective in CSS: perspective: 1000px;
```

## 12. Appeal

```javascript
animate(".card", {
  scale: 1.02,
  boxShadow: "0 20px 40px rgba(0,0,0,0.2)"
}, { duration: 0.3, easing: "ease-out" });
```

## Stagger Animation

```javascript
import { stagger } from "motion";

animate(".item",
  { opacity: [0, 1], y: [20, 0] },
  { delay: stagger(0.1) }
);
```

## Scroll Animations

```javascript
import { scroll, animate } from "motion";

scroll(
  animate(".parallax", { y: [0, 100] }),
  { target: document.querySelector(".container") }
);
```

## In-View Animations

```javascript
import { inView } from "motion";

inView(".section", ({ target }) => {
  animate(target, { opacity: 1, y: 0 }, { duration: 0.5 });
});
```

## Key Motion One Features

- `animate()` - Single animation
- `timeline()` - Sequence with `at` positioning
- `stagger()` - Offset delays
- `spring()` - Physics-based easing
- `scroll()` - Scroll-linked animations
- `inView()` - Intersection observer wrapper
- Uses Web Animations API (hardware accelerated)
- Tiny bundle size (~3kb)

© dylantarre · MIT · dylantarre/animation-principles

Similar skills

Everything for Frontend and UI →

From the same set86

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor