universal-timing — Claude Code skill: animation timing rules
A skill about animation timing: rules that hold at 50ms and at 5000ms. Useful when you need to pick a duration and an easing curve instead of guessing.
npx skills add dylantarre/animation-principles --skill universal-timing -a claude-codeWhat universal-timing does
The skill covers animation principles that survive any duration. Squash and stretch scales proportionally — 5% at 100ms, 30% at 2000ms. Anticipation keeps a fixed share, 20–30% of the main action, no matter how long that action runs. Slow in and slow out stays mandatory, since linear motion reads as mechanical at every speed.
It also hands you ratios. Anticipation, action and follow-through split as 20% : 50% : 30%, which at 500ms means 100ms, 250ms and 150ms. Stagger delay runs 10–20% of an item's duration, so a 300ms item wants 30–60ms between items. A separate section explains when ease-in earns its place: under 150ms only ease-out fits, and a full ease-in-out becomes possible from 400ms. Ready-made cubic-bezier values for CSS are included.
A framework maps felt intent to duration, from instant through dramatic. Nothing here computes values for you or writes them into your code — you get the rules and the ratios, and your project's context decides the number. If your design system already locks animation tokens, expect to reconcile these ratios with it by hand.
What it helps with
- pick a duration that matches the intended feel
- work out anticipation and follow-through shares from total time
- set stagger delay for a list of items
- decide when ease-in is worth using
- stress-test an animation at extreme speeds
Example prompts for the agent
- Pick timing values for a card appearing over 300ms using the universal-timing principles
- Break a 500ms animation into anticipation, action and follow-through
- Which cubic-bezier should I use for a panel sliding in over 120ms?
How to install universal-timing
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill universal-timing -a claude-code2Manually: put the files in place
~/.claude/skills/universal-timing/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/universal-timing/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill universal-timing -a codex2Manually: put the files in place
.agents/skills/universal-timing/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill universal-timing -a cursor2Manually: put the files in place
.cursor/skills/universal-timing/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles universal-timing2Manually: put the files in place
.github/skills/universal-timing/SKILL.md1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill universal-timing -a gemini-cli2Platform CLI
gemini skills install https://github.com/dylantarre/animation-principles --path skills/10-by-time-scale/universal-timingManually: put the files in place
.devin/skills/universal-timing/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill universal-timing -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about universal-timing
How do I install universal-timing in Claude Code?
Run npx skills add dylantarre/animation-principles --skill universal-timing -a claude-code. The skill file lands at ~/.claude/skills/universal-timing/SKILL.md.
What does universal-timing do?
It lays out animation principles that do not depend on duration, plus ratios for phases, stagger and easing curves. The point is choosing timing deliberately rather than by eye.
Which platforms can run this skill?
Beyond Claude, it installs for Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode. GitHub Copilot uses a different command: gh skill install dylantarre/animation-principles universal-timing.
Source text
SKILL.md · MIT
---
name: universal-timing
description: Use when learning animation timing fundamentals - principles that apply regardless of duration, the foundational rules that scale across all time ranges
---
# Universal Timing Principles
Some animation truths **transcend duration**. These principles work at 50ms and 5000ms. Master these to make good timing decisions at any scale.
## Disney Principles - Universal Application
### Always True
**Squash & Stretch**: Scale proportionally - 5% at 100ms, 30% at 2000ms. Never eliminate, always proportional.
**Anticipation**: Ratio stays constant - anticipation is 20-30% of main action duration, regardless of total time.
**Staging**: One clear focus - whether instant or cinematic, only one thing should demand primary attention.
**Straight Ahead/Pose to Pose**: Complexity matches duration - short = straight ahead, long = pose to pose.
**Follow Through**: Present at all durations - even 100ms can have micro-overshoot. Scale matches duration.
**Slow In/Slow Out**: Always ease - linear motion looks mechanical at every duration.
**Arcs**: Natural paths scale - short animations = subtle curves, long animations = sweeping arcs.
**Secondary Action**: Supports, never competes - true at 50ms and 5000ms.
**Timing**: Duration determines perception - same motion reads differently at different speeds.
**Exaggeration**: Match duration and importance - longer duration allows more exaggeration.
**Solid Drawing**: Transforms must match - consistency matters regardless of speed.
**Appeal**: The goal - animation should enhance, not impede, at any duration.
## Universal Ratios
### The Golden Ratio of Animation Timing
```
Anticipation : Action : Follow-through
20% : 50% : 30%
Example at 500ms:
Anticipation: 100ms
Main action: 250ms
Follow-through: 150ms
```
### Stagger Ratio
```
Optimal stagger delay: 10-20% of item duration
Item duration: 300ms
Stagger delay: 30-60ms between items
```
### Easing Intensity vs Duration
```
Duration < 150ms: ease-out only (no time for ease-in)
Duration 150-400ms: ease-out or custom
Duration 400ms+: full ease-in-out possible
```
## Easing That Works Everywhere
```css
/* Universal ease-out - works at any duration */
transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
/* Universal natural motion */
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
/* Universal bounce - scale amplitude with duration */
transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
```
## Universal Laws
1. **Shorter distances = shorter durations** - motion should feel proportional to space.
2. **Bigger elements move slower** - perceived weight requires more time.
3. **Enter fast, exit faster** - users care about what's arriving, not leaving.
4. **Context determines tolerance** - first visit allows longer animation than repeat use.
5. **Attention is finite** - compete for it wisely, regardless of duration.
6. **Physics provides intuition** - match real-world expectations at any speed.
7. **Easing is mandatory** - linear motion looks wrong at every duration.
8. **Test at extremes** - if it works at 2x and 0.5x, it's robust.
## Duration Selection Framework
```
What should the user feel?
├── Instant (< 100ms)
│ └── Confirmation, responsiveness
├── Quick (100-300ms)
│ └── Efficiency, polish
├── Standard (300-500ms)
│ └── Clarity, communication
├── Deliberate (500-1000ms)
│ └── Importance, attention
└── Dramatic (> 1000ms)
└── Story, emotion, memory
```
## Key Insight
Duration is a **design decision**. It communicates importance, guides attention, and shapes emotion. The Disney principles are tools - timing is how you wield them. Master the principles, then let context determine duration.
© dylantarre · MIT · dylantarre/animation-principles