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)
| kind | o que você vê | campos |
|---|---|---|
title | título grande palavra por palavra, sublinhado desenhado, símbolo opcional no topo | title, subtitle, symbol (opc.) |
bullets | título + itens um por um, cada um com um ícone | title, bullets: ["texto", {"text": "…", "icon": "fa-rocket"}] |
terminal | janela de terminal digitando | lines: ["$ comando", "saída"] |
quote | grande marca de citação, palavras aparecem gradualmente, autor desliza | title (a citação), subtitle (autor) |
cta | chamada final: título explode, legenda em um botão brilhante | title, subtitle, symbol (opc.) |
symbol | UM símbolo enorme desenhado traço por traço, depois preenchido + brilho, anel de halo | symbol, title, subtitle, spin (true/false) |
geometry | geometria sagrada desenhada progressivamente, depois brilha | shape (um nome ou uma lista), title, subtitle, labels (apenas para arrows) |
wheel | N nós (2–12) em um círculo revelados um por um com linhas para o centro; o atual brilha | title, nodes: ["a", {"label": "b", "icon": "fa-cog"}], center (palavra ou símbolo), active (1..N: destaca esse nó) |
icons | grade de 1–8 ícones com rótulos aparecendo | title, items: [{"icon": "fa-cogs", "label": "motor"}] |
kinetic | palavras grandes aparecem em sincronia com a voz; *palavra* = cor de destaque + brilho | text |
split | coluna de texto + ilustração no outro lado | title, 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), ouwheelnovamente 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.