Rive Animations

dylantarre/animation-principles/skills/09-by-tool-framework/rive-animations

by dylantarre83597134ba8fNo license99 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 9 months ago

Use when implementing Disney's 12 animation principles with Rive interactive animations

Instructions onlyDesign & Creative
AI-generated overview

Guides implementing Disney's 12 animation principles in Rive interactive animations via state machines and runtime code.

What it does
This skill explains how to apply each of Disney's 12 animation principles using Rive's editor features and runtime API. It covers squash and stretch, anticipation, staging, timing, follow-through, arcs, exaggeration and appeal, with state machine setups, easing guidance and JavaScript or React snippets. It produces implementation guidance rather than files or scripts.
When to use it
Use it when building interactive Rive animations and wanting to apply classic animation principles. It suits work involving Rive state machines, inputs, triggers and runtime playback control in web or React projects.
Requirements
Requires familiarity with the Rive editor and its runtime API; the React example assumes the @rive-app/react-canvas package. No scripts ship with the skill.

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 coderive.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 visibilityconst 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 controlrive.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 changesrive.on('statechange', (event) => {  if (event.data.includes('button_press')) {    // Secondary animations auto-trigger via state machine  }});
// Or blend multiple animationsrive.play(['main_action', 'secondary_particles']);

9. Timing

javascript
// Fast - snappy feedbackrive.play('click', { speed: 1.5 });
// Normalrive.play('hover');
// Slow - dramatic revealrive.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 interactionsconst 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

Source and attribution

Source:dylantarre/animation-principlesinskills/09-by-tool-framework/rive-animationsat commit8359713

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal