motion-canvas

Create programmatic vector animations with TypeScript using the Motion Canvas library. Use when building animated explainer videos, tutorials, data visualizations, or presentations with synchronized audio; when the user asks about Motion Canvas, makeScene2D, scenes and generators, signals and tweening, 2D components (LaTeX, Code, Txt, Circle, Rect, Layout, Img, Video, SVG), the editor, exporting video or image sequences, or plugin authoring. Covers technique guides (code-block, compositing, shaders, 3D, parallax) and package/component docs.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "motion-canvas" with this command: npx skills add udnisap/skills/udnisap-skills-motion-canvas

Motion Canvas

TypeScript library for creating animated videos programmatically using generator functions.

Project Setup

npm init @motion-canvas@latest    # Create new project
npm install && npm start          # Run dev server at localhost:9000

Project structure:

my-project/
├── src/
│   ├── project.ts         # Main project config
│   └── scenes/            # Animation scenes
├── vite.config.ts
└── package.json

Core Concepts

1. Project Configuration

// src/project.ts
import {makeProject} from '@motion-canvas/core';
import scene1 from './scenes/scene1?scene';  // Note: ?scene suffix required

export default makeProject({
  scenes: [scene1],
  // audio: audioFile,  // Optional: sync animations to voiceover
});

2. Scenes

Scenes use generator functions - yield* pauses to render frames:

import {makeScene2D, Circle, Rect, Txt} from '@motion-canvas/2d';
import {createRef, all, waitFor, waitUntil} from '@motion-canvas/core';

export default makeScene2D(function* (view) {
  const circle = createRef<Circle>();

  view.add(<Circle ref={circle} size={100} fill="#e13238" />);

  yield* circle().position.x(300, 1);  // Move right over 1 second
  yield* waitFor(0.5);                  // Pause 0.5 seconds
  yield* circle().position.x(0, 1);    // Move back
});

3. Nodes (Visual Elements)

// Shapes
<Circle size={100} fill="#e13238" />
<Rect width={200} height={100} fill="blue" radius={10} />
<Line points={[[0,0], [100,100]]} stroke="white" lineWidth={4} />

// Text
<Txt text="Hello" fontSize={48} fill="white" fontFamily="Arial" />

// Media
<Img src={imagePath} width={400} />
<Video ref={videoRef} src={videoPath} />

// Code blocks with syntax highlighting
<Code code={`const x = 1;`} fontSize={24} />

4. References

Store node references for animation:

const circle = createRef<Circle>();
view.add(<Circle ref={circle} />);
yield* circle().scale(2, 1);  // Call with () to access node

5. Signals (Reactive Values)

const radius = createSignal(3);
const area = createSignal(() => Math.PI * radius() * radius());  // Computed

// Animate signal
yield* radius(5, 2);  // Change from 3 to 5 over 2 seconds
// area() automatically updates

6. Animation Patterns

Sequential:

yield* animation1();
yield* animation2();

Parallel:

yield* all(
  circle().position(100, 1),
  circle().fill('red', 1),
);

Staggered:

yield* sequence(0.1, anim1(), anim2(), anim3());  // 0.1s delay between each

Looping:

yield* loop(5, i => circle().rotation(360, 1));

7. Time Events (Audio Sync)

yield* waitUntil('intro-end');     // Pause until marker in editor timeline
yield* circle().scale(2, useDuration('grow'));  // Duration from timeline

8. Layouts (Flexbox)

<Layout layout direction="row" gap={20} alignItems="center">
  <Circle size={50} />
  <Rect width={100} height={50} />
</Layout>

9. Scene Transitions

yield* slideTransition(Direction.Left);
yield* fadeTransition(0.5);
yield* zoomInTransition();

10. Code Animations

const codeRef = createRef<Code>();
view.add(<Code ref={codeRef} code={initialCode} />);

yield* codeRef().code('new code', 1);                    // Replace all
yield* codeRef().code.replace(range, 'replacement', 1); // Replace range
yield* codeRef().selection(codeRef().findFirstRange('text'), 0.5);  // Highlight

Common Easing Functions

import {easeInOutCubic, easeOutBack, linear} from '@motion-canvas/core';
yield* node().scale(2, 1, easeOutBack);  // Overshoot effect

Rendering

Click RENDER in editor UI. Configure in Video Settings tab:

  • Resolution, frame rate, background color
  • Frame range, color space
  • FFmpeg plugin for video output

References

Documentation

Two entry points: use technique docs for deep how-to and runnable snippets; use topic index for package/component map and short guides.

Technique-based (docs/)

Task-specific technique guides with "When to use", import maps, and runnable snippets.

  • docs/index.md — Technique index (technique → doc), dependency diagram, "For AI agents" notes. Use to find which doc covers a topic (e.g. code highlighting → 07, compositing → 09).
  • docs/agent-quickref.md — "I need to do X" lookup: task → doc + 1-line snippet. Load the linked doc for full imports and snippets.
DocWhen to read
docs/01-setup-and-project.mdProject, Vite, scenes, audio
docs/02-scenes-and-flow.mdScenes, waitUntil, all/chain/loop, cancel/join
docs/03-signals-and-refs.mdcreateSignal, createComputed, createRef, makeRef
docs/04-2d-components.mdShapes, Line, Txt, Img, Path, Grid, Ray
docs/05-layouts.mdLayout, direction, grow, gap
docs/06-code-block.mdCodeBlock: edit, insert, selection
docs/07-code-highlighting.mdCode, LezerHighlighter, CODE, append/prepend
docs/08-transitions-and-easing.mdslideTransition, zoomIn/Out, ease, map/arcLerp
docs/09-compositing-and-masking.mdcompositeOperation, clip, cache, blur
docs/10-images-and-media.mdImg, Gradient, video, SVG, Path
docs/11-custom-shaders.mdCustom GLSL, fragment shaders, uniforms
docs/12-three-and-3d.mdThree.js / WebGL in scene
docs/13-parallax-and-camera.mdParallax, FOV, zoomInTransition(BBox)
docs/14-deferred-and-buffers.mdGBuffer, LBuffer, multiply/lighter
docs/15-advanced-patterns.mdcreateRefMap/Array, Ray, CubicBezier, tween(fn), reparent

Topic-based (docs/topics/)

Package list, component list, and feature guides (getting started, scenes, signals, editor, rendering, plugin, examples). Byte-size topic files.

  • docs/topics/index.md — Package table, component table, feature guide links. Use for package/component lookup and short reads.

Repos (runnable examples)

Runnable examples and optional docs site are included as git submodules under repos/ (e.g. repos/examples). See docs/topics/examples.md for how to run them. Clone the skill with git clone --recurse-submodules or run git submodule update --init --recursive after clone to populate repos/.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

maths

No summary provided by upstream source.

Repository SourceNeeds Review
General

remotion-best-practices

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.

Repository SourceNeeds Review
160.7K94.2Kanthropics
Coding

remotion-best-practices

Use this skills whenever you are dealing with Remotion code to obtain the domain-specific knowledge.

Repository SourceNeeds Review
148.2K2.1Kremotion-dev