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
Scanned 9/8/2026
Install to Claude Code
npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill motion-canvas --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Motion Canvas?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/artubss-motion-canvas)More formats (shields.io, HTML) on the badges page.
---
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**: MITIs this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!