Communitygithub.com

video-lite

Créez de courtes vidéos narrées avec des animations graphiques réelles (titres animés, texte cinétique, symboles dessinés, géométrie sacrée, diagrammes, grilles d'icônes, transitions, particules) en utilisant Python + pycairo + ffmpeg + espeak-ng — sans Node, sans navigateur, sans GPU. Conçu pour les vieilles machines 32 bits (i686, 2 Go de RAM). Utilisez-le pour un explainer, une histoire, une liste, une promotion ou une démo MP4 avec voix, fond musical et effets sonores.

Qu'est-ce que video-lite ?

Video Lite v2 est un outil de création vidéo entièrement en ligne de commande, conçu pour fonctionner sur du matériel ancien et modeste (processeur Pentium M, 2 Go de RAM, 32 bits). Il transforme un simple fichier JSON de storyboard en une vidéo MP4 complète avec animations vectorielles (dessinées via cairo), narration vocale (via espeak-ng/MBROLA), fond musical procédural et effets sonores. L'outil prend en charge plusieurs formats d'explication (explainer, story, listicle, promo, demo) et thèmes visuels (mystique, néon, sunset, ocean, etc.) et gère une grande variété de types de scènes : titres animés, texte cinétique, listes à puces, roues de concepts, géométrie sacrée, grilles d'icônes, etc. La narration peut être synchronisée avec les éléments visuels (par exemple, un élément apparaît exactement quand la phrase correspondante est prononcée). L'ensemble du pipeline de rendu est géré par render.py, qui s'occupe de la mise en page, de l'ajustement du texte, de l'animation, du timing et de la synchronisation. Un script doctor.py vérifie l'environnement et un script selftest.py permet d'exécuter des tests automatisés. La vidéo peut être rendue en version draft (480p) pour accélérer le développement sur les machines lentes.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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)

kindce que vous voyezchamps
titlegrand titre mot par mot, trait souligné, symbole optionnel en hauttitle, subtitle, symbol (opt.)
bulletstitre + éléments un par un, chacun avec une icônetitle, bullets: ["texte", {"text": "…", "icon": "fa-rocket"}]
terminalfenêtre de terminal qui tapelines: ["$ commande", "sortie"]
quotegrand guillemet, mots qui apparaissent, auteur qui glissetitle (la citation), subtitle (auteur)
ctaappel final : titre qui surgit, sous-titre dans un bouton lumineuxtitle, subtitle, symbol (opt.)
symbolUN énorme symbole dessiné trait par trait, puis rempli + lueur, anneau de halosymbol, title, subtitle, spin (vrai/faux)
geometrygéométrie sacrée dessinée progressivement, puis lueursshape (un nom ou une liste), title, subtitle, labels (uniquement pour arrows)
wheelN nœuds (2–12) sur un cercle révélés un par un avec des lignes vers le centre ; le nœud actuel brilletitle, nodes: ["a", {"label": "b", "icon": "fa-cog"}], center (mot ou symbole), active (1..N : surligne ce nœud)
iconsgrille de 1 à 8 icônes avec des étiquettes qui apparaissenttitle, items: [{"icon": "fa-cogs", "label": "moteur"}]
kineticgrands mots qui apparaissent en synchronisation avec la voix ; *mot* = couleur d'accent + lueurtext
splitcolonne 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 à nouveau wheel avec "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.

Skills associés