Communitygithub.com

video-lite

Crie vídeos curtos narrados com animações gráficas reais (títulos animados, texto cinético, símbolos desenhados, geometria sagrada, diagramas, grades de ícones, transições, partículas) usando Python + pycairo + ffmpeg + espeak-ng — sem Node, sem navegador, sem GPU. Feito para máquinas antigas 32 bits (i686, 2 GB de RAM). Use para vídeos explicativos, histórias, listas, promoções ou demonstrações em MP4 com narração, trilha musical e efeitos sonoros.

O que é video-lite?

O Video Lite v2 é uma ferramenta de IA projetada para criar vídeos MP4 narrados e animados inteiramente em hardware antigo e de baixo custo (i686, 2 GB de RAM), eliminando a necessidade de Node.js, navegador, GPU ou modelos de IA. Ele funciona a partir de um storyboard JSON simples onde o usuário define o tema, a voz (espeak-ng/MBROLA para português e inglês), as cenas e o texto da narração — cada cena é renderizada como arte vetorial usando pycairo (antialiasing, texto, símbolos, geometria, partículas) e codificada com ffmpeg. A ferramenta sincroniza automaticamente os elementos visuais com a narração, aplica transições e uma trilha sonora processual suave que se adapta à voz, com efeitos sonoros em cortes e revelações. É ideal para criadores de conteúdo que precisam de vídeos explicativos, promocionais ou de demonstração sem depender de serviços em nuvem ou hardware moderno. Suporta Windows (WSL), Linux e macOS e inclui scripts de verificação e teste para garantir que o vídeo final esteja correto.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jazzautomations/video-lite/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

Video Lite v2

Um MP4 finalizado a partir de um pequeno storyboard JSON. Cada quadro é arte vetorial desenhada com cairo (texto com antialiasing, símbolos, geometria, brilhos, partículas, movimentos de câmera, transições de cena) e codificado com ffmpeg; a voz é espeak-ng/MBROLA (pt-BR e inglês) sobre uma suave trilha musical processual que abaixa sob a voz, com efeitos sonoros de whoosh/pop em cortes e revelações. Roda em um Pentium M antigo: ~90 s de vídeo 720p em cerca de 7–8 min (rascunho 480p: ~4 min). Sem Node, Chromium, GPU, modelos ou rede.

<skill-dir> abaixo é a pasta deste SKILL.md. Execute todos os comandos a partir da pasta do projeto do usuário; as saídas vão para lá.

Caminho dourado — faça exatamente isso, em ordem

# 1. Verifique a máquina UMA VEZ (também mede sua velocidade, ~1 min). Ele diz o que está faltando e como corrigir.
python3 <skill-dir>/scripts/doctor.py
#    Sem voz? No Debian/Ubuntu/antiX isso instala espeak-ng + MBROLA pt-BR em ~/.local, sem root:
bash <skill-dir>/scripts/setup_voice.sh

# 2. Comece com um FORMATO (o trabalho) e um TEMA (a sensação):
python3 <skill-dir>/scripts/compose.py formats   # explainer-motion / story / listicle / explainer / promo / demo
python3 <skill-dir>/scripts/compose.py themes    # mystic, neon, terminal-green, sunset, ocean, paper, mono
python3 <skill-dir>/scripts/compose.py new --format explainer-motion --theme neon --out storyboard.json
#    Em seguida, edite storyboard.json: TODOS os placeholders "TROQUE:" devem se tornar conteúdo real para ESTE
#    vídeo (a renderização recusa sobras). Você pode adicionar, remover ou reordenar cenas livremente.
#    Ritmo da narração: cerca de 14 caracteres por segundo. Uma ideia por cena, 1–2 frases.

# 3. Renderize. Bloqueia até que o MP4 seja escrito. --draft = 480p, mais rápido: use primeiro em máquinas antigas.
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --draft
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4
#    Opcional: veja UM quadro antes de uma renderização longa (escreve video.png):
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --still 12.5

# 4. Verifique o arquivo real (duração, fluxos de vídeo+áudio) e VEJA o PNG da folha de contato.
python3 <skill-dir>/scripts/verify.py video.mp4 --require-audio

NÃO escreva pipelines ffmpeg manualmente nem desenhe quadros você mesmo: render.py é dono do layout, ajuste de texto, animação, temporização e sincronia. Se uma etapa falhar, leia sua mensagem — ela diz o que mudar. Máquina lenta e com pressa? render.py ... --fast (menos partículas, sem movimento de câmera).

Storyboard

{
  "theme": "mystic",
  "voice": "mb-br3",
  "scenes": [
    {"kind": "title", "title": "O Caibalion", "subtitle": "os sete princípios herméticos", "symbol": "☿",
     "narration": "Conheça o Caibalion e seus sete princípios."},
    {"kind": "kinetic", "text": "O Todo é *Mente*",
     "narration": "O primeiro princípio diz: o Todo é mente."},
    {"kind": "bullets", "title": "Na prática", "bullets": ["observe seus pensamentos", "mude o foco", "repita"],
     "narration": ["Observe seus pensamentos.", "Mude o foco.", "E repita todo dia."]},
    {"kind": "wheel", "title": "Os sete princípios", "center": "☿",
     "nodes": ["Mentalismo", "Correspondência", "Vibração", "Polaridade", "Ritmo", "Causa e Efeito", "Gênero"],
     "narration": "Mentalismo, correspondência, vibração, polaridade, ritmo, causa e efeito e gênero."},
    {"kind": "cta", "title": "Leia o livro", "subtitle": "domínio público desde 1908",
     "narration": "Leia e tire suas conclusões."}
  ]
}

Nível superior: theme, voice (pt-br, en-us, es… ou MBROLA mb-br3 / mb-br1 / mb-br4, muito menos robótico; com pt-br, mb-br3 é usado quando instalado; "none" = silencioso). A velocidade de fala é definida por render.py (~14 caracteres/s); "speed": 0.9–1.15 ajusta (rate da v1 é ignorado). Opcional: transition para cada cena, "music": false (sem base de acordes suave sob a voz), "sfx": false (sem whoosh/pop/riser), "captions": true (mostrar a narração como legendas; desligado por padrão — a tela mostra as palavras-chave, a voz conta o resto).

Cada cena: kind (abaixo), narration, opcional seconds (padrão: a narração + uma pequena pausa; só pode tornar uma cena mais longa), opcional transition (fade | slide | zoom | wipe | iris | cut; padrão: a rotação do próprio tema), opcional camera (auto zoom/pan lento, ou none).

Sincronize itens com a voz: narration pode ser uma lista de frases. Quando uma cena bullets, wheel, icons ou split tem N itens e a narração tem N frases (ou N+1: uma introdução primeiro), o item k aparece exatamente quando a frase k começa:

{"kind": "bullets", "title": "Por quê", "bullets": ["roda em PC velho", "modelos grátis", "testa tudo"],
 "narration": ["Três motivos.", "Roda em computador velho.", "Usa modelos grátis.", "E testa antes de dizer pronto."]}

Não coloque links, e-mails ou caminhos de arquivo em narration (a renderização recusa): mostre-os na tela (legenda cta). Mantenha cada frase com menos de ~110 caracteres.

Tipos de cena (compose.py kinds imprime esta lista)

kindo que você vêcampos
titletítulo grande palavra por palavra, sublinhado desenhado, símbolo opcional no topotitle, subtitle, symbol (opc.)
bulletstítulo + itens um por um, cada um com um íconetitle, bullets: ["texto", {"text": "…", "icon": "fa-rocket"}]
terminaljanela de terminal digitandolines: ["$ comando", "saída"]
quotegrande marca de citação, palavras aparecem gradualmente, autor deslizatitle (a citação), subtitle (autor)
ctachamada final: título explode, legenda em um botão brilhantetitle, subtitle, symbol (opc.)
symbolUM símbolo enorme desenhado traço por traço, depois preenchido + brilho, anel de halosymbol, title, subtitle, spin (true/false)
geometrygeometria sagrada desenhada progressivamente, depois brilhashape (um nome ou uma lista), title, subtitle, labels (apenas para arrows)
wheelN nós (2–12) em um círculo revelados um por um com linhas para o centro; o atual brilhatitle, nodes: ["a", {"label": "b", "icon": "fa-cog"}], center (palavra ou símbolo), active (1..N: destaca esse nó)
iconsgrade de 1–8 ícones com rótulos aparecendotitle, items: [{"icon": "fa-cogs", "label": "motor"}]
kineticpalavras grandes aparecem em sincronia com a voz; *palavra* = cor de destaque + brilhotext
splitcoluna de texto + ilustração no outro ladotitle, text ou bullets, e symbol OU shape, side (right/left: onde a arte vai)

Nomes de shape: circle, triangle, triangle-down, square, hexagon, hexagram, pentagram, flower (flor da vida), seed (semente da vida), vesica, spiral (áurea), eye (olho no triângulo), ouroboros, wave (vibração), pendulum (ritmo), arrows (causa → efeito; use "labels": ["causa", "efeito", "causa"]). Combine: "shape": ["circle", "hexagram"].

symbol / icon / center aceitam (compose.py symbols lista todos os nomes):

  • um caractere: "☿", "☤", "☯", "✡", "⚖", "∞", "🜂" (alquimia), "♀", "☉", "☽"…
  • um nome do Font Awesome 4: "fa-cogs", "fa-book", "fa-rocket", "fa-lightbulb-o", "fa-globe", "fa-terminal"…
  • um símbolo nomeado: "mercurio", "caduceu", "yin-yang", "balanca", "fogo", "agua", "olho"…
  • um emoji: "🔥", "🚀", "💡" (colorido; mostrado com um pop, não desenhado traço por traço).

Um exemplo completo de ~90 s (hermetismo, tema mystic, todo tipo de ilustração): <skill-dir>/examples/caibalion.json.

Bom gosto, rapidamente

  • Varie os tipos: nunca 3 cenas do mesmo tipo seguidas; alterne entre com muito texto (bullets, split) e visual (symbol, geometry, kinetic, wheel).
  • Títulos curtos (≤ 5 palavras), subtítulos ≤ 10 palavras, bullets ≤ 6 palavras cada, no máximo 5 bullets.
  • Uma lista de N coisas: uma visão geral wheel, depois uma cena por item (symbol/geometry), ou wheel novamente com "active": k.
  • Temas: mystic (índigo/dourado, serifada, estrelas), neon (magenta/ciano, grade synth), terminal-green (código), sunset, ocean, paper (claro, serifada), mono.

Testes

python3 <skill-dir>/scripts/selftest.py renderiza cada tipo por um momento em rascunho e verifica o MP4 com ffprobe (saída 0 = ok). --voice também testa espeak + legendas.

Habilidades Relacionadas