generate-footage
L'autre point d'entrée du plugin. video-use édite les séquences que vous AVEZ déjà. Cette compétence construit des vidéos à partir de séquences que vous n'avez PAS encore : narration plus images clés fixes, composées et animées par HyperFrames, rendues de manière déterministe.
Pipeline (éprouvé en production ; voir docs/rca/ pour savoir pourquoi l'étape de mouvement est déterministe) :
script (avec balises audio v3)
→ narration eleven_v3 (scripts/tts_v3.py)
→ transcrire (npx hyperframes transcribe narration.mp3)
→ verrouiller les fenêtres de scène aux limites de phrases (horodatages au niveau des mots)
→ IMAGES FIXES DE N'IMPORTE OÙ (une image clé par scène — voir ci-dessous)
→ composition animate-stills (recipes/04-animate-stills.md, build_scenes.py)
→ lint → rendu → QA mouvement + audio (scripts/motion_check.py, feuille de contact)
L'ordre compte : la voix D'ABORD, les visuels ENSUITE
Générez et transcrivez la narration AVANT de construire une composition ou de collecter des images clés. Les limites des phrases parlées sont les fenêtres de scène. Les lectures v3 ne sont pas déterministes en termes de rythme — une estimation de 120s peut donner 100s ou 166s — donc les visuels construits en premier sont toujours réajustés.
Voix-off — ElevenLabs v3 avec balises audio
scripts/tts_v3.py — uniquement stdlib, pas de dépendances pip. Clé depuis $ELEVENLABS_API_KEY ou le fichier skills/video-use/.env du plugin.
python3 scripts/tts_v3.py --probe # vérifier eleven_v3 + lister les voix
python3 scripts/tts_v3.py --voice <id> --stability 0.0 --script SCRIPT.md --out narration.mp3
- Les balises audio sont placées dans le texte du script :
[excited],[whispers],[softly],[dramatic tone],[warmly]. v3 les interprète ; v2 les ignore. - Stabilité :
0.0= Créatif (expressivité maximale),0.5= Naturel,1.0= Robuste. Une lecture "plate" se corrige en abaissant la stabilité et en re-balises le script, pas en ajoutant des mots plus forts. - Leviers de livraison : MAJUSCULES sur les mots de puissance,
...pour les pauses dramatiques, contraste (passer à[whispers]juste avant une grande réplique). - Auditionnez 2-3 voix sur la première phrase avant de vous engager. La première voix n'est jamais le choix final.
- v3 peut paraphraser légèrement. Transcrivez et LISEZ le résultat ; régénérez si une phrase clé a dérivé.
Images fixes de n'importe où
Une image clé est simplement un PNG. Le pipeline ne se soucie pas de sa provenance. Une image fixe par scène, nommée kf-NN.png, listée dans le manifeste de scène (recipes/04-animate-stills.md documente le schéma). Sources qui fonctionnent :
- Outils d'IA générative d'images — tout outil texte-vers-image que vous possédez déjà (Gemini, GPT image, Midjourney, SD local, ou un acteur hébergé — voir la section optionnelle à la fin). Générez à partir de prompts par scène avec un suffixe de style verrouillé.
- Captures d'écran et photos — captures d'interface produit, documents d'archive, photos réelles. Le traitement Ken Burns a été inventé pour cela.
- HTML rendu par HyperFrames — construisez un cadre HTML stylisé et prenez une capture ; le moteur produit ses propres images fixes.
Règles de création qui s'appliquent quelle que soit la source :
- Verrouillez UN style dans DESIGN.md et appliquez-le à chaque image. Un décalage entre les images se lit comme des plans différents une fois qu'il y a du mouvement et de l'étalonnage.
- Vérifiez le type de fichier. Certains outils servent des JPEG avec des noms .png ; vérifiez les octets magiques avant de composer (
file kf-01.png). - QA de chaque image (lisez l'image). Une image hors-style est à régénérer, pas à conserver. Vérifiez : artefacts de texte, filigranes, anachronismes, visages en gros plan (risque de dérive), mauvaise palette.
- Pas de propriété intellectuelle nommée, pas de ressemblance avec une personne réelle dans les images générées pour tout ce qui est publié publiquement.
Animation — déterministe, dans le dépôt
Les images fixes deviennent du mouvement avec la recette animate-stills (recipes/04-animate-stills.md) : une composition HyperFrames pilotée par manifeste appliquant un langage de caméra (push-ins, dérives, plans fixes) et une atmosphère GSAP (brume, pluie, variations de lumière, vignette) sur chaque image fixe, les fenêtres de scène verrouillées sur la transcription. scripts/build_scenes.py génère les calques de scène à partir du manifeste ; scripts/motion_check.py prouve le mouvement réel via la différence de pixels dans le rendu final. Rendu identique à chaque exécution, ne coûte rien, fonctionne hors ligne.
Nécessite Node >= 22 pour l'interface CLI HyperFrames.
Sous-titres et assemblage
- Sous-titres incrustés (lecture automatique muette sur Reddit/X), au niveau des phrases, synchronisés à partir des mots de la transcription.
- Flash blanc (0,28 s) aux tournants narratifs ; fondus enchaînés doux ailleurs ; étalonnage vignette sombre qui unifie les images fixes de sources variées et rend les sous-titres lisibles.
- Vérifiez le mouvement dans le rendu : différence de pixels entre deux images à 4s d'intervalle dans une même scène (
scripts/motion_check.py— différence moyenne en gris > 3 = mouvement réel). - QA audio :
ffmpeg -af volumedetect— la parole documentaire se situe près de -26 dB moyen.
Optionnel : outils génératifs hébergés
Ce ne sont PAS des dépendances. Ce sont une façon parmi d'autres d'obtenir des images fixes ou des clips, et ils peuvent disparaître sans préavis — planifiez en conséquence.
- Les acteurs texte-vers-image d'Apify (par ex.
akash9078/ai-image-generator, ~0,01 $/image) ont bien fonctionné pour la génération par lots d'images clés. Surveillez les échecs silencieux (ok:trueavec une URL nulle) et les types de fichiers mal étiquetés. - Les acteurs hébergés image-vers-vidéo sont l'endroit où ce pipeline conservait auparavant son étape de mouvement. Le 11-06-2026, l'acteur
danitn11/wan22-lightning-image-to-video(2 utilisateurs au total) est mort en amont en pleine production et chaque exécution a échoué instantanément ; l'analyse complète se trouve dansdocs/rca/rca-generate-footage-animation-2026-06-11.md. L'image-vers-vidéo génératif réside désormais dans un dépôt compagnon séparé avec un backend BYO-key enfichable ; l'étape de mouvement de ce plugin est déterministe et locale.