Communitygithub.com

MoreiraTv/vibe-video

Pipeline de produção para animações matemáticas e técnicas usando Manim Community Edition. Cria vídeos explicativos no estilo 3Blue1Brown, visualizações de algoritmos, derivações de equações, diagramas de arquitetura e histórias com dados. Use quando os usuários solicitarem: explicações animadas, animações matemáticas, visualizações de conceitos, demonstrações passo a passo de algoritmos, vídeos explicativos técnicos, vídeos estilo 3Blue1Brown ou qualquer animação programática com conteúdo geométrico/matemático. NOTA: Se o usuário estiver iniciando um novo vídeo, pergunte se ele quer usar o recurso de rastreamento de falante (track_speaker.py) para centralizar pessoas, e se será para Câmera PTZ (Palco) ou Corte seco (Podcast).

O que é vibe-video?

O MoreiraTv/vibe-video é um pipeline de produção profissional para criar animações matemáticas e técnicas educacionais de alto nível, inspiradas no estilo 3Blue1Brown, utilizando o Manim Community Edition. Ele fornece um fluxo de trabalho completo que guia o desenvolvedor ou criador de conteúdo desde o planejamento narrativo até a renderização final, com ênfase em excelência visual, coerência estética e ritmo pedagógico. O pipeline suporta diversos modos de criação, como explicadores de conceitos, derivações de equações, visualizações de algoritmos, histórias com dados, diagramas de arquitetura e explicações de artigos científicos. Ele é executado inteiramente em Python, sem necessidade de navegador, Node.js ou GPU, e integra LaTeX para renderização de equações e ffmpeg para edição de vídeo e áudio. O repositório inclui referências detalhadas para animações, design visual, câmeras 3D, resolução de problemas e muito mais, garantindo que o usuário possa criar vídeos coesos e impactantes com o mínimo de iterações.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MoreiraTv/vibe-video/tree/HEAD/skills/manim-video

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Pipeline de Produção de Vídeo com Manim

Padrão Criativo

Isso é cinema educacional. Cada quadro ensina. Cada animação revela estrutura.

Antes de escrever uma única linha de código, articule o arco narrativo. Que equívoco isso corrige? Qual é o "momento aha"? Que história visual leva o espectador da confusão ao entendimento? 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.

A 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 confuso, 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() depois dela. 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 chave nunca é desperdiçada.

Linguagem visual coesa. Todas as cenas compartilham uma paleta de cores, tamanhos de tipografia consistentes, velocidades de animação compatíveis. 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. Documentação de referência testada contra Manim CE v0.20.1.

Modos

ModoEntradaSaídaReferência
Explicador de conceitoTópico/conceitoExplicação animada com intuição geométricareferences/scene-planning.md
Derivação de equaçãoExpressões matemáticasProva animada passo a passoreferences/equations.md
Visualização de algoritmoDescrição do algoritmoExecução passo a passo com estruturas de dadosreferences/graphs-and-data.md
História com dadosDados/métricasGráficos animados, comparações, contadoresreferences/graphs-and-data.md
Diagrama de arquiteturaDescrição do sistemaComponentes se construindo com conexõesreferences/mobjects.md
Explicador de artigoArtigo de pesquisaDescobertas e métodos principais animadosreferences/scene-planning.md
Visualização 3DConceito 3DSuperfícies rotativas, curvas paramétricas, geometria espacialreferences/camera-and-3d.md

Stack

Um único script Python por projeto. Sem navegador, sem Node.js, sem GPU necessária.

CamadaFerramentaPropósito
NúcleoManim Community EditionRenderização de cenas, motor de animação
MatemáticaLaTeX (texlive/MiKTeX)Renderização de equações via MathTex
E/S de vídeoffmpegJunção de cenas, conversão de formato, multiplexação de áudio
TTSElevenLabs / Qwen3-TTS (opcional)Narração de locução

Pipeline

PLANEJAR --> CODIFICAR --> RENDERIZAR --> JUNTAR --> ÁUDIO (opcional) --> REVISAR
  1. PLANEJAR — Escreva plan.md com o arco narrativo, lista de cenas, elementos visuais, paleta de cores, roteiro de locução
  2. CODIFICAR — Escreva script.py com uma classe por cena, cada uma renderizável independentemente
  3. RENDERIZAR — manim -ql script.py Cena1 Cena2 ... para rascunho, -qh para produção
  4. JUNTAR — Concatenação com ffmpeg dos clipes das cenas em final.mp4
  5. ÁUDIO (opcional) — Adicione locução e/ou música de fundo via ffmpeg. Veja references/rendering.md
  6. REVISAR — Renderize imagens 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 unida
  media/                 # Gerado automaticamente pelo Manim
    videos/script/480p15/

Direção Criativa

Paletas de Cores

PaletaFundoPrimáriaSecundáriaDestaqueCaso de uso
3B1B Clássico#1C1C1C#58C4DD (AZUL)#83C167 (VERDE)#FFFF00 (AMARELO)Matemática/CC geral
Acadêmico acolhedor#2D2B55#FF6B6B#FFD93D#6BCB77Acessível
Tecnológico neon#0A0A0A#00F5FF#FF00FF#39FF14Sistemas, arquitetura
Monocromático#1A1A2E#EAEAEA#888888#FFFFFFMinimalista

Velocidade de Animação

Contextorun_timeself.wait() após
Aparição do título/intro1.5s1.0s
Revelação de equação chave2.0s2.0s
Transformação/metamorfose1.5s1.5s
Rótulo de suporte0.8s0.5s
Limpeza com FadeOut0.5s0.3s
Revelação do "momento aha"2.5s3.0s

Escala Tipográfica

FunçãoTamanho da fonteUso
Título48Títulos de cena, texto de abertura
Cabeçalho36Cabeçalhos de seção dentro de uma cena
Corpo30Texto explicativo
Rótulo24Anotações, rótulos de eixos
Legenda20Subtítulos, 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("Série de Fourier", 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)

Tamanho mínimo font_size=18 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 tudo sempre
  • Entrada de animação diferente — varie entre Write, FadeIn, GrowFromCenter, Create
  • Peso visual diferente — algumas cenas densas, outras esparsas

Fluxo de Trabalho

Etapa 1: Planejar (plan.md)

Antes de qualquer código, escreva plan.md. Veja references/scene-planning.md para o modelo abrangente.

Etapa 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:

  • Subtítulos em cada animação: self.add_subcaption("texto", duration=N) ou subcaption="texto" em self.play()
  • Constantes de cor compartilhadas no topo do arquivo para consistência entre cenas
  • self.camera.background_color definido em cada cena
  • Saídas limpas — FadeOut em todos os mobjects ao final da cena: self.play(FadeOut(Group(*self.mobjects)))

Etapa 3: Renderizar

manim -ql script.py Cena1_Introducao Cena2_ConceitoCentral  # rascunho
manim -qh script.py Cena1_Introducao Cena2_ConceitoCentral  # produção

Etapa 4: Juntar

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

Etapa 5: Revisar

manim -ql --format=png -s script.py Cena2_ConceitoCentral  # imagem de pré-visualização

Notas Críticas de Implementação

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 Anime Mobjects Não Adicionados

self.play(Create(circulo))  # deve adicionar primeiro
self.play(circulo.animate.set_color(RED))  # depois anime

Metas de Performance

QualidadeResoluçãoFPSVelocidade
-ql (rascunho)854x480155-15s/cena
-qm (médio)1280x7203015-60s/cena
-qh (produção)1920x10806030-120s/cena

Sempre itere em -ql. Só renderize em -qh para a saída final.

Referências

ArquivoConteúdo
references/animations.mdAnimações principais, funções de taxa, composição, sintaxe .animate, padrões de temporização
references/mobjects.mdTexto, formas, VGroup/Group, posicionamento, estilização, mobjects personalizados
references/visual-design.md12 princípios de design, camadas de opacidade, modelos de layout, paletas de cores
references/equations.mdLaTeX no Manim, TransformMatchingTex, padrões de derivação
references/graphs-and-data.mdEixos, plotagem, BarChart, dados animados, visualização de algoritmos
references/camera-and-3d.mdMovingCameraScene, ThreeDScene, superfícies 3D, controle de câmera
references/scene-planning.mdArcos narrativos, modelos de layout, transições de cena, modelo de planejamento
references/rendering.mdReferência de CLI, predefinições de qualidade, ffmpeg, fluxo de locução, exportação de GIF
references/troubleshooting.mdErros de LaTeX, erros de animação, erros comuns, depuração
references/animation-design-thinking.mdQuando animar vs. mostrar estático, decomposição, ritmo, sincronização de narração
references/updaters-and-trackers.mdValueTracker, add_updater, always_redraw, updaters baseados em tempo, padrões
references/paper-explainer.mdTransformar artigos de pesquisa em animações — fluxo de trabalho, modelos, padrões de domínio
references/decorations.mdSurroundingRectangle, Brace, setas, DashedLine, Angle, ciclo de vida de anotações
references/production-quality.mdListas 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 pense nela ANTES de projetar a animação.

  • SCAMPER — quando o usuário quiser uma nova abordagem para uma explicação padrão
  • Inversão de Suposições — quando o usuário quiser desafiar como algo é tipicamente ensinado

Transformação SCAMPER

Pegue uma visualização matemática/técnica padrão e transforme-a:

  • Substituir: troque a metáfora visual padrão (reta numérica → caminho sinuoso, matriz → grade de cidade)
  • Combinar: mescle duas abordagens de explicação (algébrica + geométrica simultaneamente)
  • Reverter: derive ao contrário — comece do 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 através de animação e relações espaciais

Inversão de Suposições

  1. Liste o que é "padrão" sobre como este tópico é visualizado (da esquerda para a direita, 2D, etapas discretas, notação formal)
  2. Escolha a suposição mais fundamental
  3. Inverta-a (derivação da direita para a esquerda, incorporação 3D de um conceito 2D, metamorfose contínua em vez de etapas, zero notação)
  4. Explore o que a inversão revela que a abordagem padrão esconde

Habilidades Relacionadas