Promo de marque (bande-annonce de studio)
Cette compétence fabrique une vidéo promotionnelle finie à partir d’un seul fichier de configuration, promo.json. Une scène de canvas dessine chaque image dans Chrome headless, la vidéo est donc du motion design pur, sans modèle ni séquence préenregistrée :
- Images : les propres clips de la marque, son animation de logo, ses textes.
- Musique : une piste synthé originale codée (128 bpm). Chaque coupe, chute et impact est calé sur ses mesures.
- Narration : VoxCPM2, exécuté localement.
- Son : l’audio de chaque projet joue dans son propre spot.
La structure est fixe et fonctionne à n’importe quelle échelle de marque. Seul le contenu change.
| Temps | Section |
|---|---|
| 0-3,4 s | { Chaque histoire } tapée, puis « mérite d’avancer. » |
| 3,2-7,6 s | un anneau de cartes 3D (images fixes de tous les projets) : « Voici cinq des nôtres. » |
| 7,6 s (mesure 4) | la chute : sourcil, le nom de la marque dans une boîte d’accent glitchée, un sous-titre |
| 9,5 s + 5,6 s chacune | un spot par projet : bloc de titre plus le projet sur une carte inclinée (16:9) ou un téléphone (9:16), puce « Vidéo complète · m:ss », son propre son avec barres de niveau en direct |
| break | « Votre histoire » puis un grand « ensuite. » sur le dernier mot de la ligne de narration |
| rush | tous les clips défilent en 3D, avec trois mots (Écrit · Voix · Animé) sur les phrases du narrateur |
| fin | le logo liquide atterrit sur le dernier impact, glisse à gauche, le nom apparaît, puis les puces et l’URL |
La durée est de 51,5 s avec 5 projets, 45,9 s avec 4 et 40,2 s avec 3.
Prérequis :
- ffmpeg, Node 22+ et Google Chrome ou Chromium (
CHROME_PATH). - Un Python avec numpy et scipy (
PROMO_PY). - Pour la narration, VoxCPM2 (
VOX_PY, voirscripts/voices.py). Sans elle, la promo n’a pas de narrateur, ou vous pouvez ajouter vos propres enregistrements dansbuild/vox/<id>.wav.
Workflow
1. Rassembler ce dont la promo a besoin
-
3 à 5 projets : des vidéos finies du travail de la marque, de n’importe quelle durée. Une vidéo verticale joue sur un téléphone, une paysage sur une carte. Faites attention à :
- Un bon moment sonore dans chaque projet, comme le début d’une phrase ou une punchline : 4 s de ce moment jouent dans le spot. Donnez son heure de début comme
sound, ou laissez-le vide et le début d’un silence proche de 35 % de la vidéo sera utilisé. - Définissez
"mute": truepour un projet dont le son ne doit pas jouer.
- Un bon moment sonore dans chaque projet, comme le début d’une phrase ou une punchline : 4 s de ce moment jouent dans le spot. Donnez son heure de début comme
-
L’animation du logo, avec transparence. La meilleure source est
/generate-logoavec le style liquide :generate-logo/scripts/animate.sh logo.png --styles liquid --proresCela produit
<nom>-5s-liquid-alpha.movplus son-sfx.wav. Un-alpha.webmtransparent ou un PNG transparent fonctionne aussi. -
Informations sur la marque :
- Le nom, divisé en deux parties de couleur (
["KumNit", " Studio"]). - Les couleurs : deux dégradés pour le nom, un accent, un second accent et un accent chaud. Lisez le logo pour les trouver.
- Le site web.
- Ce que la marque fabrique : les quatre puces.
- Le nom, divisé en deux parties de couleur (
-
Langue :
"lang": "en"ou"km". Pour le khmer, écrivez chaque texte et ligne de narration en khmer naturel. Kantumruy Pro et Koulen sont inclus.
2. Écrire le projet
Créez un dossier pour le projet et copiez examples/kumnit-showreel.json dedans sous le nom promo.json, puis modifiez-le. Chaque clé est décrite dans references/config.md. Gardez les textes courts : titres d’un à trois mots, lignes de jusqu’à six mots. Les lignes longues rétrécissent pour tenir, mais elles se lisent moins bien.
Écrivez la narration dans voice.lines comme une phrase courte par moment :
nextdoit finir sur le mot affiché en grand. Par exemple, « Votre histoire pourrait être ensuite. »rushnécessite trois phrases séparées par des virgules, une par mot de rush (« Nous l’écrivons, la voixons, et animons chaque image. »).
3. Aperçu (environ 30 s)
<skill>/scripts/promo.sh <project>/promo.json --preview
Cela découpe les assets, planifie les timings et rend 12 images fixes dans out/<nom>-preview.png. Lisez-le et vérifiez :
- Les cartes montrent les bons moments.
- Aucun titre n’est serré.
- Le logo est cadré (son symbole doit remplir environ 60 % de son cadre).
- Les spots alternent les côtés.
Pour corriger une image, changez le début sound de ce projet. Ensuite supprimez assets/clips/p<k>, assets/bites/p<k>.wav et assets/manifest.json, puis relancez l’aperçu.
4. Rendu (environ 10 minutes la première fois)
<skill>/scripts/promo.sh <project>/promo.json # exécuter en arrière-plan
Les étapes s’exécutent dans cet ordre : assets, voices, plan, music, mix, render, encode.
- Voices : la première exécution charge le modèle (environ 2 min), puis prend 10 à 60 s par ligne. Les lignes qui existent déjà sont conservées, donc supprimez un
build/vox/<id>.wavpour le refaire. - Rendu : environ 4 min avec 2 processus Chrome.
- Reprise :
--from mix(ourender, ouencode) relance à partir de cette étape uniquement.
Sortie : out/<nom>-1080p60.mp4 et out/<nom>-contact.png (une image par seconde).
5. Vérifier avant de remettre
- Lisez la feuille de contact.
ffprobedoit afficher la durée attendue (51,5 s avec 5 projets).- Le mix est normalisé à -14 LUFS.
- Vous ne pouvez pas entendre le résultat, donc dites à l’utilisateur ce que vous avez vérifié (timings, niveaux, images) et demandez-lui d’écouter. Portez la plus grande attention au narrateur par-dessus le son de chaque projet.
Réglage
- Effets sonores : définissez
sfxDirsur un dossier des propres effets sonores de l’utilisateur et les noms de fichiers dansscripts/audio.py(SFX) sont essayés en premier. Tout ce qui manque est synthétisé, donc la compétence fonctionne aussi sans bibliothèque. - Timings : ils sont mesurés à partir de la narration dans
scripts/plan.py. Le son de chaque projet commence après sa ligne de narration et s’arrête avant le spot suivant. Pour changer les règles, modifiezplan.py, pas la scène. - Apparence : les couleurs proviennent de
brand, tout le mouvement est dansscripts/scene.mjs, et la partition est dansscripts/music.py, dont la disposition des mesures est documentée en haut de ce fichier.