Montage Pixel Crew
L'exemple à copier est projects/ai-delivery-team (lisez
docs/REFERENCE-BREAKDOWN.md pour comprendre pourquoi cela fonctionne). Lisez CLAUDE.md pour la carte
d'orientation et les règles qui nous ont posé problème.
1 · Script d'abord (script.json)
La structure qui fonctionne : accroche (≤5 s) → N beats identiques (~3,5 s chacun) → payoff → CTA avec mot-clé.
- Accroche : un nombre surprenant + le système entier en une image (« 7 employés, aucun d'entre eux humain »).
- Chaque beat : « Le Rôle fait a, b et c. » — trois noms concrets que l'on peut animer.
- Payoff : le seul travail de l'humain (approuver, décider, réviser).
- CTA : « Commente MOT_CLÉ et je t'enverrai … » (mot-clé dans
brand.keyword). - Écrivez les
linescomme des phrases de légende de 2 à 4 mots ; chaque ligne devient une légende. - Visez une durée totale de 30 à 45 s ; la vitesse vocale 1.3–1.4 maintient Kokoro proche de 3,5 mots/s.
- Demandez à l'utilisateur le pseudo de la marque / nom de l'approbateur / mot-clé s'ils sont inconnus ; sinon gardez les placeholders
@votrepseudoet précisez-le.
2 · Échafaudage
node scripts/new.mjs reel <nom>
python3 scripts/voice.py projects/<nom> # d'abord les timings, puis le design en fonction
3 · Scènes (index.html + style.css + scenes.js)
- Une
<section class="scene">par scène du script, dans le même ordre (R.cuts()les associe àTIMING.scenes). - Chaque scène d'employé :
.headavec.step[data-step][data-label]+.title(taille pour tenir dans ≤ 980 px), puis une ou deux.cards qui jouent le rôle. - Donnez à chaque scène son propre accent (
--accent: var(--rN)) et alternez les fonds (is-paper,is-peri,is-lav,is-cobalt). - Animez chaque nom prononcé :
R.pop(el, R.word(scene, line, "noun")),R.tick,R.type,R.grow,R.slampour les tampons. - Utilisez les placeholders
data-icon,data-bot,data-burst,data-face,data-presenter;Sprites.hydrate()les remplit. - Terminez avec
R.captions(...)etR.register(); conservez la lignewindow.__timelines["main"]en ligne.
4 · Vérifier, puis rendre
node scripts/build.mjs projects/<nom> --no-voice --no-render --snap <une fois par scène>
# lisez projects/<nom>/build/snaps/contact-sheet*.jpg, corrigez, répétez
node scripts/hf.mjs lint projects/<nom>
node scripts/build.mjs projects/<nom> --no-voice # → renders/<nom>.mp4
Vérifiez le MP4 lui-même : ffmpeg -i renders/<nom>.mp4 -vf fps=1,scale=180:-1,tile=8x5 sheet.jpg
et -af ebur128 (cible ≈ −14 LUFS). Cherchez : première image vide, texte
touchant les bords, éléments sous l'interface Instagram, légendes décalées.
Échanges
- Voix :
script.json → voice.voice(am_michael,am_puck,am_fenrir,af_heart,bf_emma, …) ou enregistrez la vôtre dansbuild/voice.wavet exécutezvoice.py --from-wav. - Musique : déposez un fichier dans
build/music-override.wav. - Hôte : le dessin du propriétaire (
kit/brand.js,kit/avatars/) est utilisé automatiquement par[data-presenter]et[data-face]; dimensionnez les hôtes image par largeur (.is-img), c'est en plan taille. Ne dessinez pas un personnage différent sauf demande explicite.