home / skills / dylantarre / animation-principles / rive-animations

This skill helps you implement Disney's 12 animation principles in Rive with interactive state machines and scalable animations.

npx playbooks add skill dylantarre/animation-principles --skill rive-animations

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.0 KB
---
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

Overview

This skill teaches how to implement Disney's 12 principles of animation using Rive interactive animations and state machines. It provides practical patterns for squash & stretch, anticipation, timing, arcs, secondary actions, and other principles adapted to Rive’s tools. The guidance covers editor techniques, state machine setups, inputs, and runtime API snippets for web and React integrations.

How this skill works

The skill maps each animation principle to concrete Rive workflows: building bone rigs and meshes for squash & stretch, using state machines and triggers for anticipation and secondary actions, and applying Graph Editor easing for slow in/slow out and timing. It explains how to combine constraints (IK, spring, path) with layered artboards and blend states for staging, follow-through, and appeal. Example runtime calls and React patterns show how to wire inputs and control playback programmatically.

When to use it

  • When you need character or UI motion that follows classical animation rules for believable movement
  • When building interactive components with Rive state machines and input-driven behavior
  • When fine control of timing, easing, and follow-through is required for polish
  • When blending primary and secondary animations or adding reactive feedback to UI
  • When optimizing animations for small bundle size and performant playback

Best practices

  • Design key poses first (pose-to-pose) then refine with overlapping action and follow-through
  • Use bones and constraints to preserve volume for squash & stretch and solid drawing
  • Control timing with the Graph Editor; use easing curves and speed parameters at runtime
  • Keep state machines modular: separate primary actions from secondary/ambient states
  • Test interactivity in context: wire inputs for hover, click, and triggers to validate feel

Example use cases

  • Animated button that anticipates, overshoots, and settles using a state machine trigger
  • Character jump sequence: idle → anticipate wind-up → action → follow-through tails
  • UI reveal with slow in/slow out easing and layered background staging for depth
  • Cursor-driven arcs and IK-controlled limbs for natural motion in interactive scenes
  • Blended main animation with secondary particle or cloth animations for added appeal

FAQ

Can I trigger animations from JavaScript or React?

Yes. Use the Rive runtime API to play animations and control state machine inputs; React bindings provide useRive and useStateMachineInput hooks for clean integration.

How do I preserve volume during squash and stretch?

Animate inverse scale on orthogonal axes and use bones/meshes with constraints so overall mass and silhouette read correctly.