Video Lite v2
Un MP4 complet à partir d'un petit storyboard JSON. Chaque image est un art vectoriel dessiné avec cairo (texte anti-aliasé, symboles, géométrie, lueurs, particules, mouvements de caméra, transitions de scène) et encodé avec ffmpeg ; la voix est espeak-ng/MBROLA (pt-BR et anglais) sur un fond musical procédural doux qui s'atténue sous la voix, avec des effets sonores whoosh/pop sur les coupes et les révélations. Fonctionne sur un vieux Pentium M : ~90 s de vidéo 720p en environ 7 à 8 min (version draft 480p : ~4 min). Pas de Node, Chromium, GPU, modèles ou réseau.
<skill-dir> ci-dessous est le dossier de ce SKILL.md. Exécutez chaque commande depuis le dossier de projet
de l'utilisateur ; les sorties y sont placées.
Chemin doré — faites exactement ceci, dans l'ordre
# 1. Vérifiez la machine UNE FOIS (mesure aussi sa vitesse, ~1 min). Elle dit ce qui manque et comment le corriger.
python3 <skill-dir>/scripts/doctor.py
# Pas de voix ? Sur Debian/Ubuntu/antiX, cela installe espeak-ng + MBROLA pt-BR dans ~/.local, sans root :
bash <skill-dir>/scripts/setup_voice.sh
# 2. Commencez par un FORMAT (le travail) et un THÈME (l'ambiance) :
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
# Modifiez ensuite storyboard.json : chaque espace réservé "TROQUE :" doit devenir un contenu réel pour CETTE
# vidéo (le rendu refuse les restes). Vous pouvez librement ajouter, supprimer ou réorganiser les scènes.
# Rythme de narration : environ 14 caractères par seconde. Une idée par scène, 1–2 phrases.
# 3. Rendu. Bloque jusqu'à ce que le MP4 soit écrit. --draft = 480p, plus rapide : utilisez-le d'abord sur les vieilles machines.
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --draft
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4
# Optionnel : regardez UNE image avant un long rendu (écrit video.png) :
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --still 12.5
# 4. Vérifiez le fichier réel (durée, flux vidéo+audio) et REGARDEZ le PNG de la feuille de contact.
python3 <skill-dir>/scripts/verify.py video.mp4 --require-audio
N'écrivez PAS vous-même des pipelines ffmpeg ou ne dessinez pas les images : render.py gère la mise en page, l'ajustement du texte, l'animation, le timing et la synchronisation. Si une étape échoue, lisez son message — il dit quoi changer. Machine lente et pressé ? render.py ... --fast (moins de particules, pas de mouvement de caméra).
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."}
]
}
Niveau supérieur : theme, voice (pt-br, en-us, es… ou MBROLA mb-br3 / mb-br1 / mb-br4, bien
moins robotique ; avec pt-br, mb-br3 est utilisé quand il est installé ; "none" = silencieux). Le débit de parole est
défini par render.py (~14 caractères/s) ; "speed": 0.9–1.15 l'ajuste (rate de v1 est ignoré).
Optionnel : transition pour chaque scène, "music": false (pas de fond d'accords doux sous la voix),
"sfx": false (pas de whoosh/pop/riser), "captions": true (affiche la narration comme sous-titres ; désactivé par
défaut — l'écran montre les mots-clés, la voix dit le reste).
Chaque scène : kind (ci-dessous), narration, optionnel seconds (par défaut : la narration + une courte
pause ; ne peut qu'allonger une scène), optionnel transition (fade | slide | zoom | wipe |
iris | cut ; par défaut : la rotation propre au thème), optionnel camera (auto zoom/pano lent, ou none).
Synchronisez les éléments avec la voix : narration peut être une liste de phrases. Quand une scène bullets, wheel,
icons ou split a N éléments et que la narration a N phrases (ou N+1 : une intro d'abord),
l'élément k apparaît exactement quand la phrase k commence :
{"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."]}
Ne mettez pas de liens, d'e-mails ou de chemins de fichiers dans narration (le rendu refuse) : montrez-les à l'écran
(sous-titre cta). Gardez chaque phrase sous ~110 caractères.
Types de scènes (compose.py kinds affiche cette liste)
| kind | ce que vous voyez | champs |
|---|---|---|
title | grand titre mot par mot, trait souligné, symbole optionnel en haut | title, subtitle, symbol (opt.) |
bullets | titre + éléments un par un, chacun avec une icône | title, bullets: ["texte", {"text": "…", "icon": "fa-rocket"}] |
terminal | fenêtre de terminal qui tape | lines: ["$ commande", "sortie"] |
quote | grand guillemet, mots qui apparaissent, auteur qui glisse | title (la citation), subtitle (auteur) |
cta | appel final : titre qui surgit, sous-titre dans un bouton lumineux | title, subtitle, symbol (opt.) |
symbol | UN énorme symbole dessiné trait par trait, puis rempli + lueur, anneau de halo | symbol, title, subtitle, spin (vrai/faux) |
geometry | géométrie sacrée dessinée progressivement, puis lueurs | shape (un nom ou une liste), title, subtitle, labels (uniquement pour arrows) |
wheel | N nœuds (2–12) sur un cercle révélés un par un avec des lignes vers le centre ; le nœud actuel brille | title, nodes: ["a", {"label": "b", "icon": "fa-cog"}], center (mot ou symbole), active (1..N : surligne ce nœud) |
icons | grille de 1 à 8 icônes avec des étiquettes qui apparaissent | title, items: [{"icon": "fa-cogs", "label": "moteur"}] |
kinetic | grands mots qui apparaissent en synchronisation avec la voix ; *mot* = couleur d'accent + lueur | text |
split | colonne de texte + illustration de l'autre côté | title, text ou bullets, et symbol OU shape, side (right/left : où va l'art) |
Noms de shape : circle, triangle, triangle-down, square, hexagon, hexagram, pentagram,
flower (fleur de vie), seed (graine de vie), vesica, spiral (dorée), eye (œil dans le triangle), ouroboros, wave (vibration), pendulum (rythme), arrows (cause → effet ; utilisez
"labels": ["cause", "effet", "cause"]). Combinaison : "shape": ["circle", "hexagram"].
symbol / icon / center acceptent (compose.py symbols liste tous les noms) :
- un caractère :
"☿","☤","☯","✡","⚖","∞","🜂"(alchimie),"♀","☉","☽"… - un nom Font Awesome 4 :
"fa-cogs","fa-book","fa-rocket","fa-lightbulb-o","fa-globe","fa-terminal"… - un symbole nommé :
"mercure","caducee","yin-yang","balance","feu","eau","oeil"… - un emoji :
"🔥","🚀","💡"(couleur ; affiché avec une apparition, pas dessiné trait par trait).
Un exemple complet d'environ 90 s (hermétisme, thème mystic, chaque type d'illustration) : <skill-dir>/examples/caibalion.json.
Bon goût, rapidement
- Variez les types : jamais 3 scènes du même type à la suite ; alternez les scènes riches en texte (
bullets,split) avec les scènes visuelles (symbol,geometry,kinetic,wheel). - Titres courts (≤ 5 mots), sous-titres ≤ 10 mots, puces ≤ 6 mots chacune, au maximum 5 puces.
- Une liste de N choses : une vue d'ensemble
wheel, puis une scène par élément (symbol/geometry), ou à nouveauwheelavec"active": k. - Thèmes :
mystic(indigo/or, sérif, étoiles),neon(magenta/cyan, grille synthwave),terminal-green(code),sunset,ocean,paper(clair, sérif),mono.
Tests
python3 <skill-dir>/scripts/selftest.py rend chaque type de scène un instant en version draft et vérifie le
MP4 avec ffprobe (exit 0 = ok). --voice teste aussi espeak + les sous-titres.