rive-animations — Claude Code skill: Disney's 12 principles in Rive
A skill that walks your agent through building Rive animations on Disney's 12 principles: state machines, inputs, timing, React hooks.
npx skills add dylantarre/animation-principles --skill rive-animations -a claude-codeWhat rive-animations does
The skill maps Disney's 12 animation principles onto Rive. Each section tells you what to set up in the editor and what to call at runtime: squash and stretch with an inverse scaleX/scaleY relationship, anticipation as an Idle → Anticipate → Action chain, follow through by delaying child bones, slow in and slow out through Graph Editor curves.
Code samples are JavaScript. You get rive.play('squash_stretch'), speed control with { speed: 0.5 }, reading state machine inputs, and listening for statechange. A React section covers useRive and useStateMachineInput from @rive-app/react-canvas for hover and press handling. There is also a rundown of Rive features: blend states, constraints, bones and meshes, the runtime API.
The skill assumes you work in the Rive editor. Curves, timelines and state machines are built by hand there, and the code only drives the result. Without a .riv file that already has a state machine, none of the snippets have anything to run against, so build the artboard first.
What it helps with
- build squash and stretch on bones with inverse scale
- wire an Idle → Anticipate → Action state chain
- add follow through by offsetting child bone keys
- connect state machine inputs to mouse events in React
- pick easing curves in the Graph Editor for the right tempo
Example prompts for the agent
- Help me set up a Rive state machine for a jump: Idle, Anticipate, Action
- How do I subscribe to the isHovering input from Rive in React?
- Add follow through to the child bones with a delay
How to install rive-animations
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill rive-animations -a claude-code2Manually: put the files in place
~/.claude/skills/rive-animations/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/rive-animations/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill rive-animations -a codex2Manually: put the files in place
.agents/skills/rive-animations/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill rive-animations -a cursor2Manually: put the files in place
.cursor/skills/rive-animations/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles rive-animations2Manually: put the files in place
.github/skills/rive-animations/SKILL.md1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill rive-animations -a gemini-cli2Platform CLI
gemini skills install https://github.com/dylantarre/animation-principles --path skills/09-by-tool-framework/rive-animationsManually: put the files in place
.devin/skills/rive-animations/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill rive-animations -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 rive-animations
How do I install rive-animations in Claude?
Run npx skills add dylantarre/animation-principles --skill rive-animations -a claude-code. The skill file then sits at ~/.claude/skills/rive-animations/SKILL.md.
What does rive-animations do?
It shows the agent how to implement Disney's 12 animation principles in Rive, covering both editor setup and the runtime calls.
What do I need before the examples work?
A .riv file with a state machine, plus @rive-app/react-canvas for the React part. Several steps happen in the Rive editor rather than in code.
Source text
SKILL.md · MIT
---
name: rive-animations
description: Use when implementing Disney's 12 animation principles with Rive interactive animations
---
# Rive Animation Principles
Implement all 12 Disney animation principles using Rive's state machine and interactive animations.
## 1. Squash and Stretch
In Rive Editor:
- Create shape with bones
- Animate scale X/Y with inverse relationship
- Key: `scaleX: 1.2` when `scaleY: 0.8`
```javascript
// Trigger from code
rive.play('squash_stretch');
```
## 2. Anticipation
State Machine Setup:
1. Create "Idle" state
2. Create "Anticipate" state (wind-up pose)
3. Create "Action" state
4. Connect: Idle → Anticipate → Action
```javascript
const inputs = rive.stateMachineInputs('State Machine');
const trigger = inputs.find(i => i.name === 'jump');
trigger.fire(); // Plays anticipate → action sequence
```
## 3. Staging
In Rive:
- Use artboard layers for depth
- Apply blur/opacity to background layers
- Use nested artboards for complex scenes
```javascript
// Control visibility
const bgOpacity = inputs.find(i => i.name === 'bgOpacity');
bgOpacity.value = 0.6;
```
## 4. Straight Ahead / Pose to Pose
Pose to Pose in Rive:
- Set key poses on timeline
- Rive interpolates between
- Use easing curves in Graph Editor
## 5. Follow Through and Overlapping Action
In Rive Editor:
- Use bone hierarchy with constraints
- Apply "delay" or "lag" to child bones
- Or offset keyframes by 2-4 frames
- Use spring constraints for natural follow-through
## 6. Slow In and Slow Out
In Rive Graph Editor:
- Select keyframes
- Apply easing: Cubic, Quad, Bounce
- Adjust bezier handles for custom curves
```javascript
// Runtime speed control
rive.play('animation', { speed: 0.5 });
```
## 7. Arc
In Rive:
- Use IK (Inverse Kinematics) for natural arcs
- Apply path constraints
- Animate position with curved interpolation
## 8. Secondary Action
State Machine approach:
```javascript
// Listen for state changes
rive.on('statechange', (event) => {
if (event.data.includes('button_press')) {
// Secondary animations auto-trigger via state machine
}
});
// Or blend multiple animations
rive.play(['main_action', 'secondary_particles']);
```
## 9. Timing
```javascript
// Fast - snappy feedback
rive.play('click', { speed: 1.5 });
// Normal
rive.play('hover');
// Slow - dramatic reveal
rive.play('reveal', { speed: 0.5 });
```
In Rive Editor:
- Adjust animation duration
- Use work area to fine-tune timing
- Graph Editor for precise control
## 10. Exaggeration
In Rive:
- Push bone rotations beyond natural limits
- Exaggerate scale transformations
- Use elastic/bounce interpolation
- Overshoot in Graph Editor curves
## 11. Solid Drawing
In Rive:
- Use multiple bones for volume preservation
- Apply constraints to maintain form
- Use clipping for depth illusion
- Layer shapes for 3D effect
## 12. Appeal
Design in Rive:
- Smooth bezier curves on shapes
- Consistent stroke weights
- Pleasing color palette
- Clean bone structure
```javascript
// Smooth hover interactions
const hover = inputs.find(i => i.name === 'isHovering');
element.addEventListener('mouseenter', () => hover.value = true);
element.addEventListener('mouseleave', () => hover.value = false);
```
## React Implementation
```jsx
import { useRive, useStateMachineInput } from '@rive-app/react-canvas';
function AnimatedButton() {
const { rive, RiveComponent } = useRive({
src: 'button.riv',
stateMachines: 'Button',
autoplay: true
});
const hoverInput = useStateMachineInput(rive, 'Button', 'isHovering');
return (
<RiveComponent
onMouseEnter={() => hoverInput.value = true}
onMouseLeave={() => hoverInput.value = false}
/>
);
}
```
## Key Rive Features
- **State Machines** - Logic-driven animation flow
- **Inputs** - Boolean, Number, Trigger types
- **Blend States** - Mix multiple animations
- **Listeners** - Pointer events in editor
- **Constraints** - IK, path, distance, rotation
- **Bones & Meshes** - Skeletal animation
- **Runtime API** - Full control from code
- **Tiny file size** - Optimized binary format
© dylantarre · MIT · dylantarre/animation-principles