Pipeline de Produção de Vídeos Manim
Quando usar
Use quando os usuários solicitarem: explicações animadas, animações matemáticas, visualizações de conceitos, passo a passo de algoritmos, vídeos explicativos técnicos, vídeos no estilo 3Blue1Brown ou qualquer animação programática com conteúdo geométrico/matemático. Cria vídeos explicativos no estilo 3Blue1Brown, visualizações de algoritmos, derivações de equações, diagramas de arquitetura e histórias de dados usando Manim Community Edition.
Padrão Criativo
Isto é cinema educativo. Cada quadro ensina. Cada animação revela estrutura.
Antes de escrever uma única linha de código, articule o arco narrativo. Que equívoco isto corrige? Qual é o "momento de insight"? Qual história visual leva o espectador da confusão à compreensão? O prompt do usuário é um ponto de partida — interprete-o com ambição pedagógica.
Geometria antes da álgebra. Mostre a forma primeiro, a equação depois. A memória visual codifica mais rápido que a memória simbólica. Quando o espectador vê o padrão geométrico antes da fórmula, a equação parece merecida.
Excelência na primeira renderização é inegociável. A saída deve ser visualmente clara e esteticamente coesa sem rodadas de revisão. Se algo parecer desordenado, mal cronometrado ou como "slides gerados por IA", está errado.
Camadas de opacidade direcionam a atenção. Nunca mostre tudo com brilho máximo. Elementos primários em 1.0, elementos contextuais em 0.4, elementos estruturais (eixos, grades) em 0.15. O cérebro processa a saliência visual em camadas.
Espaço para respirar. Toda animação precisa de self.wait() após ela. O espectador precisa de tempo para absorver o que acabou de aparecer. Nunca se apresse de uma animação para a próxima. Uma pausa de 2 segundos após uma revelação importante nunca é desperdiçada.
Linguagem visual coesa. Todas as cenas compartilham uma paleta de cores, tamanhos de tipografia consistentes e velocidades de animação correspondentes. Um vídeo tecnicamente correto onde cada cena usa cores aleatórias diferentes é um fracasso estético.
Pré-requisitos
Execute scripts/setup.sh para verificar todas as dependências. Requer: Python 3.10+, Manim Community Edition v0.20+ (pip install manim), LaTeX (texlive-full no Linux, mactex no macOS) e ffmpeg. A documentação de referência foi testada com Manim CE v0.20.1.
Modos
| Modo | Entrada | Saída | Referência |
|---|---|---|---|
| Explicador de conceito | Tópico/conceito | Explicação animada com intuição geométrica | references/scene-planning.md |
| Derivação de equação | Expressões matemáticas | Prova animada passo a passo | references/equations.md |
| Visualização de algoritmo | Descrição do algoritmo | Execução passo a passo com estruturas de dados | references/graphs-and-data.md |
| História de dados | Dados/métricas | Gráficos animados, comparações, contadores | references/graphs-and-data.md |
| Diagrama de arquitetura | Descrição do sistema | Componentes se construindo com conexões | references/mobjects.md |
| Explicador de artigo | Artigo de pesquisa | Principais descobertas e métodos animados | references/scene-planning.md |
| Visualização 3D | Conceito 3D | Superfícies rotativas, curvas paramétricas, geometria espacial | references/camera-and-3d.md |
Stack
Um único script Python por projeto. Sem navegador, sem Node.js, sem GPU necessária.
| Camada | Ferramenta | Propósito |
|---|---|---|
| Core | Manim Community Edition | Renderização de cenas, motor de animação |
| Matemática | LaTeX (texlive/MiKTeX) | Renderização de equações via MathTex |
| Vídeo I/O | ffmpeg | Costura de cenas, conversão de formato, multiplexação de áudio |
| TTS | ElevenLabs / Qwen3-TTS (opcional) | Narração |
Pipeline
PLANEJAR --> CODIFICAR --> RENDERIZAR --> COSTURAR --> ÁUDIO (opcional) --> REVISAR
- PLANEJAR — Escreva
plan.mdcom arco narrativo, lista de cenas, elementos visuais, paleta de cores, roteiro de narração - CODIFICAR — Escreva
script.pycom uma classe por cena, cada uma renderizável independentemente - RENDERIZAR —
manim -ql script.py Cena1 Cena2 ...para rascunho,-qhpara produção - COSTURAR — ffmpeg concatena os clipes das cenas em
final.mp4 - ÁUDIO (opcional) — Adicione narração e/ou música de fundo via ffmpeg. Veja
references/rendering.md - REVISAR — Renderize stills de pré-visualização, verifique em relação ao plano, ajuste
Estrutura do Projeto
nome-do-projeto/
plan.md # Arco narrativo, detalhamento das cenas
script.py # Todas as cenas em um arquivo
concat.txt # Lista de cenas para ffmpeg
final.mp4 # Saída costurada
media/ # Gerado automaticamente pelo Manim
videos/script/480p15/
Direção Criativa
Paletas de Cores
| Paleta | Fundo | Primária | Secundária | Destaque | Caso de uso |
|---|---|---|---|---|---|
| Clássico 3B1B | #1C1C1C | #58C4DD (AZUL) | #83C167 (VERDE) | #FFFF00 (AMARELO) | Matemática/CC geral |
| Acadêmico caloroso | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Acessível |
| Tecnológico neon | #0A0A0A | #00F5FF | #FF00FF | #39FF14 | Sistemas, arquitetura |
| Monocromático | #1A1A2E | #EAEAEA | #888888 | #FFFFFF | Minimalista |
Velocidade de Animação
| Contexto | run_time | self.wait() após |
|---|---|---|
| Título/intro aparece | 1,5s | 1,0s |
| Revelação de equação chave | 2,0s | 2,0s |
| Transformar/morfar | 1,5s | 1,5s |
| Rótulo de suporte | 0,8s | 0,5s |
| Limpeza FadeOut | 0,5s | 0,3s |
| Revelação do "momento de insight" | 2,5s | 3,0s |
Escala de Tipografia
| Função | Tamanho da fonte | Uso |
|---|---|---|
| Título | 48 | Títulos de cena, texto de abertura |
| Cabeçalho | 36 | Cabeçalhos de seção dentro de uma cena |
| Corpo | 30 | Texto explicativo |
| Rótulo | 24 | Anotações, rótulos de eixos |
| Legenda | 20 | Legendas, letras miúdas |
Fontes
Use fontes monoespaçadas para todo o texto. O renderizador Pango do Manim produz kerning quebrado com fontes proporcionais em todos os tamanhos. Veja references/visual-design.md para recomendações completas.
MONO = "Menlo" # defina uma vez no topo do arquivo
Text("Fourier Series", font_size=48, font=MONO, weight=BOLD) # títulos
Text("n=1: sin(x)", font_size=20, font=MONO) # rótulos
MathTex(r"\nabla L") # matemática (usa LaTeX)
font_size=18 mínimo para legibilidade.
Variação por Cena
Nunca use configuração idêntica para todas as cenas. Para cada cena:
- Cor dominante diferente da paleta
- Layout diferente — não centralize sempre tudo
- Entrada de animação diferente — varie entre Write, FadeIn, GrowFromCenter, Create
- Peso visual diferente — algumas cenas densas, outras esparsas
Fluxo de Trabalho
Passo 1: Planejar (plan.md)
Antes de qualquer código, escreva plan.md. Veja references/scene-planning.md para o modelo abrangente.
Passo 2: Codificar (script.py)
Uma classe por cena. Cada cena é renderizável independentemente.
from manim import *
BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"
class Cena1_Introducao(Scene):
def construct(self):
self.camera.background_color = BG
title = Text("Por Que Isso Funciona?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
self.add_subcaption("Por que isso funciona?", duration=2)
self.play(Write(title), run_time=1.5)
self.wait(1.0)
self.play(FadeOut(title), run_time=0.5)
Padrões-chave:
- Legendas em cada animação:
self.add_subcaption("texto", duration=N)ousubcaption="texto"emself.play() - Constantes de cor compartilhadas no topo do arquivo para consistência entre cenas
self.camera.background_colordefinido em cada cena- Saídas limpas — FadeOut em todos os mobjects ao final da cena:
self.play(FadeOut(Group(*self.mobjects)))
Passo 3: Renderizar
manim -ql script.py Cena1_Introducao Cena2_ConceitoCentral # rascunho
manim -qh script.py Cena1_Introducao Cena2_ConceitoCentral # produção
Passo 4: Costurar
cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Cena1_Introducao.mp4'
file 'media/videos/script/480p15/Cena2_ConceitoCentral.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4
Passo 5: Revisar
manim -ql --format=png -s script.py Cena2_ConceitoCentral # still de pré-visualização
Notas de Implementação Críticas
Strings Raw para LaTeX
# ERRADO: MathTex("\frac{1}{2}")
# CERTO:
MathTex(r"\frac{1}{2}")
buff >= 0.5 para Texto nas Bordas
label.to_edge(DOWN, buff=0.5) # nunca < 0.5
FadeOut Antes de Substituir Texto
self.play(ReplacementTransform(nota1, nota2)) # não Write(nota2) por cima
Nunca Animar Mobjects Não Adicionados
self.play(Create(circle)) # deve adicionar primeiro
self.play(circle.animate.set_color(RED)) # depois animar
Metas de Desempenho
| Qualidade | Resolução | FPS | Velocidade |
|---|---|---|---|
-ql (rascunho) | 854x480 | 15 | 5-15s/cena |
-qm (médio) | 1280x720 | 30 | 15-60s/cena |
-qh (produção) | 1920x1080 | 60 | 30-120s/cena |
Sempre itere com -ql. Renderize em -qh apenas para a saída final.
Referências
| Arquivo | Conteúdo |
|---|---|
references/animations.md | Animações principais, funções de taxa, composição, sintaxe .animate, padrões de temporização |
references/mobjects.md | Texto, formas, VGroup/Group, posicionamento, estilo, mobjects personalizados |
references/visual-design.md | 12 princípios de design, camadas de opacidade, modelos de layout, paletas de cores |
references/equations.md | LaTeX no Manim, TransformMatchingTex, padrões de derivação |
references/graphs-and-data.md | Eixos, plotagem, BarChart, dados animados, visualização de algoritmos |
references/camera-and-3d.md | MovingCameraScene, ThreeDScene, superfícies 3D, controle de câmera |
references/scene-planning.md | Arcos narrativos, modelos de layout, transições de cena, modelo de planejamento |
references/rendering.md | Referência de CLI, predefinições de qualidade, ffmpeg, fluxo de narração, exportação de GIF |
references/troubleshooting.md | Erros de LaTeX, erros de animação, erros comuns, depuração |
references/animation-design-thinking.md | Quando animar vs. mostrar estático, decomposição, ritmo, sincronia de narração |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, updaters baseados em tempo, padrões |
references/paper-explainer.md | Transformar artigos de pesquisa em animações — fluxo de trabalho, modelos, padrões de domínio |
references/decorations.md | SurroundingRectangle, Brace, setas, DashedLine, Angle, ciclo de vida de anotações |
references/production-quality.md | Listas de verificação pré-código, pré-renderização e pós-renderização, layout espacial, cor, tempo |
Divergência Criativa (use apenas quando o usuário solicitar saída experimental/criativa/única)
Se o usuário pedir abordagens explicativas criativas, experimentais ou não convencionais, selecione uma estratégia e raciocine sobre ela ANTES de projetar a animação.
- SCAMPER — quando o usuário quer uma nova visão de uma explicação padrão
- Inversão de Premissas — quando o usuário quer desafiar como algo é tipicamente ensinado
Transformação SCAMPER
Pegue uma visualização matemática/técnica padrão e transforme-a:
- Substituir: substitua a metáfora visual padrão (reta numérica → caminho sinuoso, matriz → grade urbana)
- Combinar: mescle duas abordagens de explicação (algébrica + geométrica simultaneamente)
- Reverter: derive de trás para frente — comece pelo resultado e desconstrua até os axiomas
- Modificar: exagere um parâmetro para mostrar por que ele importa (10x a taxa de aprendizado, 1000x o tamanho da amostra)
- Eliminar: remova toda a notação — explique puramente por meio de animação e relações espaciais
Inversão de Premissas
- Liste o que é "padrão" sobre como este tópico é visualizado (esquerda para direita, 2D, passos discretos, notação formal)
- Escolha a premissa mais fundamental
- Inverta-a (derivação da direita para a esquerda, incorporação 3D de um conceito 2D, transformação contínua em vez de passos, notação zero)
- Explore o que a inversão revela que a abordagem padrão esconde