Skip to content
Back to skills

Motion Canvas

ASecurity

Guia completo pronto para produção do Motion Canvas com workarounds ESM/CommonJS, templates de setup completo e troubleshooting para criação de vídeos programática usando TypeScript

  • 11 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
developmentjavascripttypescriptgojavabashreactnodegitapiperformance

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 4 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill motion-canvas --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Motion Canvas?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Motion Canvas
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/artubss-motion-canvas/badge)](https://www.skillsdirectory.com/skills/artubss-motion-canvas)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: motion-canvas
description: Guia completo pronto para produção do Motion Canvas com workarounds ESM/CommonJS, templates de setup completo e troubleshooting para criação de vídeos programática usando TypeScript
version: 2.0.0
author: motion-canvas
repo: https://github.com/motion-canvas/motion-canvas
license: MIT
tags: [Vídeo, TypeScript, Animação, Motion Canvas, Signals, Generators, Canvas API, Vetor, Sincronização de Áudio, Vite, ESM]
dependencies: [@motion-canvas/core>=3.0.0, @motion-canvas/2d>=3.0.0, @motion-canvas/ui>=3.0.0, @motion-canvas/vite-plugin>=3.0.0]
---

# Motion Canvas - Criação de Vídeos Pronto para Produção com TypeScript

Skill completo e pronto para produção para criar vídeos programáticos usando Motion Canvas, incluindo workarounds críticos ESM/CommonJS, templates de configuração completos e troubleshooting abrangente.

## ⚠️ CRÍTICO: Problema de Interoperabilidade ESM/CommonJS

**IMPORTANTE**: O pacote `@motion-canvas/vite-plugin` é distribuído como CommonJS, o que causa erros de importação em projetos ESM modernos. O padrão `import motionCanvas from '@motion-canvas/vite-plugin'` **NÃO FUNCIONARÁ**.

Você DEVE usar o workaround `createRequire` documentado na seção Setup abaixo.

## Quando usar

Use esta skill sempre que você estiver trabalhando com código Motion Canvas para obter conhecimento específico do domínio sobre:

- Criar vídeos animados usando TypeScript e generator functions
- Construir animações com signals e valores reativos
- Trabalhar com gráficos vetoriais e Canvas API
- Sincronizar animações com voice-overs e áudio
- Usar o editor de preview em tempo real para feedback instantâneo
- Implementar animações procedurais com controle de fluxo
- Criar visualizações e diagramas informativos
- Animar texto, formas e componentes customizados
- **Configurar projetos Motion Canvas do zero com configuração correta**
- **Troubleshoot erros comuns de setup e build**

## Conceitos Principais

Motion Canvas permite criar vídeos usando:
- **Generator Functions**: Descrever animações usando generators JavaScript com sintaxe `yield*`
- **Signals**: Valores reativos que atualizam automaticamente propriedades dependentes
- **Preview em Tempo Real**: Editor ao vivo com preview instantâneo powered por Vite
- **TypeScript-First**: Escrever animações em TypeScript com suporte completo a IDE
- **Canvas API**: Aproveitar Canvas 2D para rendering vetorial de alta performance
- **Sincronização de Áudio**: Sincronizar animações precisamente com voice-overs

## Guia Completo de Setup

### Passo 1: Inicializar Projeto

```bash
# Criar diretório do projeto
mkdir my-motion-canvas-project
cd my-motion-canvas-project

# Inicializar package.json
npm init -y
```

### Passo 2: Configurar package.json para ESM

**CRÍTICO**: Adicione `"type": "module"` para habilitar importações ESM.

```json
{
  "name": "my-motion-canvas-project",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  }
}
```

### Passo 3: Instalar TODAS as Dependências Requeridas

**CRÍTICO**: Deve incluir `@motion-canvas/ui` - o plugin falhará sem ele.

```bash
npm install --save-dev @motion-canvas/core @motion-canvas/2d @motion-canvas/vite-plugin @motion-canvas/ui vite typescript
```

### Passo 4: Criar Estrutura do Projeto

```
my-motion-canvas-project/
├── package.json          # "type": "module" obrigatório
├── vite.config.js        # Use .js NÃO .ts (ver Passo 5)
├── tsconfig.json         # Configuração TypeScript
├── index.html            # HTML entry point
└── src/
    ├── project.ts        # Configuração do projeto com cenas
    └── scenes/
        └── example.tsx   # Cena de animação
```

### Passo 5: Criar vite.config.js com Workaround ESM/CommonJS

**CRÍTICO**: Use `vite.config.js` (NÃO `.ts`) com o workaround `createRequire`.

**Arquivo: `vite.config.js`**
```javascript
import {defineConfig} from 'vite';
import {createRequire} from 'module';

// WORKAROUND: @motion-canvas/vite-plugin é CommonJS, deve usar require
const require = createRequire(import.meta.url);
const motionCanvasModule = require('@motion-canvas/vite-plugin');
const motionCanvas = motionCanvasModule.default || motionCanvasModule;

export default defineConfig({
  plugins: [
    motionCanvas({
      project: './src/project.ts',
    }),
  ],
});
```

**Por que .js em vez de .ts?**
- Vite config executa antes da compilação TypeScript
- O workaround `createRequire` funciona confiável em JavaScript puro
- Evita complexidade adicional de resolução de tipos

### Passo 6: Criar tsconfig.json

**CRÍTICO**: Inclua `esModuleInterop` e `allowSyntheticDefaultImports`.

**Arquivo: `tsconfig.json`**
```json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ES2020",
    "lib": ["ES2020", "DOM"],
    "jsx": "react-jsx",
    "jsxImportSource": "@motion-canvas/2d/lib",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "skipLibCheck": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}
```

### Passo 7: Criar index.html

**Arquivo: `index.html`**
```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Motion Canvas Project</title>
</head>
<body>
  <div id="root"></div>
  <script type="module" src="/src/project.ts"></script>
</body>
</html>
```

### Passo 8: Criar src/project.ts

**Arquivo: `src/project.ts`**
```typescript
import {makeProject} from '@motion-canvas/core';
import example from './scenes/example?scene';

export default makeProject({
  scenes: [example],
});
```

### Passo 9: Criar Primeira Cena de Animação

**Arquivo: `src/scenes/example.tsx`**
```typescript
import {makeScene2D} from '@motion-canvas/2d/lib/scenes';
import {Circle} from '@motion-canvas/2d/lib/components';
import {createRef} from '@motion-canvas/core/lib/utils';
import {all} from '@motion-canvas/core/lib/flow';

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

  view.add(
    <Circle
      ref={circleRef}
      size={70}
      fill="#e13238"
    />,
  );

  // Animar tamanho e posição do círculo
  yield* circleRef().size(140, 1);
  yield* circleRef().position.x(300, 1);
  yield* circleRef().fill('#e6a700', 1);

  // Animações paralelas
  yield* all(
    circleRef().scale(1.5, 0.5),
    circleRef().rotation(360, 1)
  );
});
```

### Passo 10: Executar Development Server

```bash
npm run dev
```

Abra o navegador em `http://localhost:5173` para ver o editor Motion Canvas.

## Troubleshooting

### Erro: `TypeError: motionCanvas is not a function`

**Causa**: Problema de interoperabilidade ESM/CommonJS com `@motion-canvas/vite-plugin`

**Solução**: Use o workaround `createRequire` em `vite.config.js` (veja Passo 5)

```javascript
// ❌ ERRADO - Não funcionará
import motionCanvas from '@motion-canvas/vite-plugin';

// ✅ CORRETO - Use createRequire
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
const motionCanvasModule = require('@motion-canvas/vite-plugin');
const motionCanvas = motionCanvasModule.default || motionCanvasModule;
```

### Erro: `Cannot find module '@motion-canvas/ui'`

**Causa**: Dependência requerida faltando

**Solução**: Instale o pacote UI:
```bash
npm install --save-dev @motion-canvas/ui
```

### Erro: `Property 'default' does not exist on type ...`

**Causa**: Configuração TypeScript sem configurações ESM interop

**Solução**: Adicione a `tsconfig.json`:
```json
{
  "compilerOptions": {
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}
```

### Aviso: `The CJS build of Vite's Node API is deprecated`

**Status**: Este é um aviso conhecido e pode ser ignorado com segurança. Ele aparece porque `@motion-canvas/vite-plugin` é CommonJS. O workaround garante funcionalidade apesar do aviso.

### Erro: `Failed to resolve import "*.tsx?scene"`

**Causa**: Plugin Vite não carregado ou configurado adequadamente

**Solução**:
1. Verifique se `vite.config.js` tem o workaround correto
2. Verifique se o path `project` aponta para o arquivo correto: `'./src/project.ts'`
3. Garanta que importações de cena usam o sufixo `?scene`: `import example from './scenes/example?scene';`

### Build falha com erros TypeScript

**Solução**:
1. Verifique se `tsconfig.json` inclui todas as opções requeridas (veja Passo 6)
2. Verifique se `jsxImportSource` está configurado para `@motion-canvas/2d/lib`
3. Garanta que todas as dependências estão instaladas

## Como usar

Leia arquivos de regras individuais para explicações detalhadas e exemplos de código:

### Conceitos Principais de Animação
- **[references/generators.md](references/generators.md)** - Generator functions para descrever animações
- **[references/signals.md](references/signals.md)** - Signals reativos para propriedades dinâmicas e dependências
- **[references/animations.md](references/animations.md)** - Tweening de propriedades e criação de animações suaves

Para tópicos adicionais como cenas, formas, renderização de texto, sincronização de áudio e funcionalidades avançadas, consulte a [documentação oficial do Motion Canvas](https://motioncanvas.io/docs).

## Exemplo Completo Funcional

Esta é uma estrutura de projeto completa e testada que funciona pronta para uso:

```
my-motion-canvas-project/
├── package.json
│   {
│     "name": "my-motion-canvas-project",
│     "type": "module",
│     "scripts": {
│       "dev": "vite",
│       "build": "vite build"
│     },
│     "devDependencies": {
│       "@motion-canvas/core": "^3.0.0",
│       "@motion-canvas/2d": "^3.0.0",
│       "@motion-canvas/vite-plugin": "^3.0.0",
│       "@motion-canvas/ui": "^3.0.0",
│       "vite": "^5.0.0",
│       "typescript": "^5.0.0"
│     }
│   }
│
├── vite.config.js (com workaround createRequire)
├── tsconfig.json (com esModuleInterop)
├── index.html
└── src/
    ├── project.ts (makeProject com array de cenas)
    └── scenes/
        └── example.tsx (makeScene2D com animações)
```

## Melhores Práticas

1. **Sempre use o workaround createRequire** - Não tente importações ESM padrão para o plugin Vite
2. **Use vite.config.js não .ts** - Evita complexidade adicional de compilação
3. **Inclua todas as dependências** - Não esqueça `@motion-canvas/ui`
4. **Use generator functions** - Todas as animações de cena devem usar sintaxe `function*` e `yield*`
5. **Aproveite signals** - Crie dependências reativas entre propriedades
6. **Pense em durações** - Especifique a duração da animação em segundos como segundo parâmetro
7. **Use refs para controle** - Crie referências a nós para controle de animação preciso
8. **Preview frequentemente** - Aproveite o editor em tempo real para feedback instantâneo
9. **Organize cenas** - Divida animações complexas em múltiplas cenas
10. **Type everything** - Use TypeScript para melhor suporte a IDE e menos erros

## Armadilhas Comuns a Evitar

1. ❌ Esquecer `"type": "module"` em package.json
2. ❌ Usar importação padrão para `@motion-canvas/vite-plugin`
3. ❌ Não instalar `@motion-canvas/ui`
4. ❌ Faltando `esModuleInterop` em tsconfig.json
5. ❌ Usar `vite.config.ts` em vez de `vite.config.js`
6. ❌ Esquecer sufixo `?scene` em importações de cena

## Recursos

- **Documentação**: https://motioncanvas.io/docs
- **Repositório**: https://github.com/motion-canvas/motion-canvas
- **Exemplos**: https://motioncanvas.io/docs/quickstart
- **Comunidade**: Discord e GitHub Discussions
- **Licença**: MIT

Files in this skill

  • SKILL.md11.7 KB
  • references/animations.md3.3 KB
  • references/generators.md2 KB
  • references/signals.md2.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…