Style combo (Créateur A × Créateur B)
Positionnement et méthode de travail
Structure fixe sur fond sombre, l'avatar numérique sert de « nœud logique », les animations sont rares et précises – chaque coupe suit la parole. Mots‑clés de la qualité : structure figée / suit la parole / rare et précis. Par défaut, on utilise le squelette du créateur A (grille sombre, barre de sous‑titres, PIP circulaire en bas à gauche, zoom de capture d'écran, cartes de mots‑clés, cartes de chapitre, HUD vert fluo) en y ajoutant les six points du créateur B : retour au plan large toutes les 15–20 s ; tous les éléments statiques sont animés en slow push linéaire ; les sujets basés sur des données utilisent des graphiques comme preuve ; le PIP superposé sur un graphique/B‑roll peut être « agrandi en parlant » ; pour les vidéos de 3 minutes basées sur des données, on peut ajouter un badge de chapitre dans le coin ; grandes cartes de chiffres. Objectif : vidéo finale de 1 à 3 minutes, 16:9, 1920×1080, 30 ips (la source est une vidéo longue de 20 minutes ; on ne migre que ce qui peut l'être).
Ceci est une collaboration, pas une génération unique. L'avatar numérique est fourni par l'utilisateur (ou généré après que nous avons écrit le script), les éléments (captures d'écran, screenshots, données) sont fournis par l'utilisateur. Claude s'occupe du script, du storyboard, des animations et du rendu. Chaque étape est soumise à l'utilisateur pour validation et modifications jusqu'à ce que le résultat final soit aussi soigné que la vidéo source.
- La qualité se mesure par rapport à la vidéo source : on compare image par image (police, ombre, espacement, easing, rythme). Le lint n'est qu'une vérification de base.
- À chaque tour, on ne fournit qu'un petit livrable et on demande à l'utilisateur de faire un choix concret (voir references/collaboration.md). On ne lance pas toute la chaîne sans retour intermédiaire.
- Chaque confirmation et préférence de l'utilisateur est notée dans notes.md du projet ; les préférences communes aux projets sont reportées dans les références.
- Si un élément ou un outil n'est pas disponible, on le dit honnêtement : « manquant / à construire ». On n'invente rien.
Étapes complètes et points de contrôle (voir references/production-playbook.md pour les détails)
S1 Script (brouillon Notion → script parlé compressé → réécriture du hook → adaptation anglaise, nombre de mots calculé selon la vitesse de parole réelle) → S2 Audio (l'utilisateur clone sa voix via Fish, jamais de TTS HeyGen ; silenceremove local pour couper les pauses + atempo ; G2 : l'utilisateur choisit la durée finale) → S2.5 Pack de prompts d'éléments (l'utilisateur génère toutes les vidéos/images via Gemini, Claude fournit chaque prompt + durée ; contrôle qualité à l'import ; G2.5, voir references/gemini-asset-prompts.md) → S3 HeyGen (piloté par navigateur ; apparence/fond/échantillon de 13s G3 ; rendu complet ≈0,8 crédit/seconde ; authentification/paiement/suppression uniquement par l'utilisateur) → S4 Images clés G4 → S5 B‑roll (Pexels, noter LICENSES, 30 ips, interpolation uniquement pour les vues aériennes) → S6 timeline (les timestamps des sous‑titres/mots‑clés doivent provenir d'un alignement forcé au niveau du mot, pas d'estimation ; avant l'aperçu, passer le contrôle G5.5 de synchronisation des sous‑titres, voir references/subtitle-sync.md) → S7 Tours d'aperçu basse résolution v1..vN G5 → S8 Polissage des animations + SFX + graphiques créatifs (references/motion-polish-and-sfx.md) → S9 Final crf18 + loudnorm -16 LUFS (-c:v copy) → S10 Auto‑vérification + copie sur le bureau G6 (130 MB, pas dans le cloud).
Par défaut, pas de BGM : livraison version « voix + SFX », l'utilisateur ajoute la musique dans jianying ; on ne renseigne pas assets.bgm, les SFX restent discrets.
Ce qui compte pour l'utilisateur (à vérifier avant chaque vidéo)
- Un B‑roll riche et réel, pas seulement des cartes de mots‑clés ; si des éléments manquent, chercher dans des banques libres de droits, ne pas dégrader en texte.
- Animations fluides et soignées : spring/easing, masque + flou d'apparition, motion blur, sortie précise ; vérifier image par image.
- Présence de sorties et de SFX (SFX légers, densité ≤0,8/s) ; utiliser des graphiques créatifs (chaînes/escaliers/portes/icônes) pour les points de structure, pas du texte ; graphiques avec chiffres Anton en gras, lignes en gras.
- Vidéos en anglais : zéro caractère chinois à l'écran (y compris les panneaux dans le B‑roll, vérifier par OCR).
- La source est une référence, pas une copie : en cas de conflit de PIP/sous‑titres, adapter, les petits designs sont décidés seuls ; seuls les grands choix d'impact visuel sont soumis à l'utilisateur.
- Collaboration, pas automatisation : s'arrêter à chaque point de contrôle pour montrer à l'utilisateur, confirmer et noter dans notes.md.
Pourquoi c'est agréable à regarder (principes de base, valeurs dans references/comfort-rules.md)
- Montage qui suit la parole : environ 70 % des coupes tombent sur les changements de phrase des sous‑titres (médiane 69 % pour le créateur A, 70–88 % pour le créateur B) ; toutes les 2–3 phrases, un plan principal (4–7 s) ; le texte apparaît au moment où le mot est dit (−2~+4 images, plutôt en retard qu'en avance).
- Dans une structure fixe, on ne change que le contenu : les sous‑titres ont un seul style identique sur toute la vidéo, variation en y ≤1 % de la hauteur d'image ; seulement deux types de fond (#010101 grille / B‑roll assombri) ; ≤3 couleurs d'accentuation ; une seule ligne de titre principale + 3–4 éléments par écran.
- Peu de mouvements de caméra, et ciblés : zoom sur capture d'écran jusqu'à 1,12×, environ 28 images ease‑in‑out ; punch‑in sur l'avatar 1,08×, ≤2 fois/minute ; B‑roll en slow push linéaire 1→1,08 ; les mouvements n'affectent que la couche de contenu, pas le PIP/les sous‑titres/le HUD.
- Avatar = jugement, animation = preuve : questions, transitions, conclusions en plan large sur l'avatar ; faits, chiffres, processus, interfaces, métaphores en animation. Le plan large revient toutes les 15–20 s, pas de segment sans visage >10 s.
- Les durées d'animation ont des paliers : coupe nette 0 / rapide 6 images / standard 12 images (lent 18 images) ; durée d'affichage ≥40 images.
Interrupteur de langue (version chinoise / version anglaise)
- Par défaut : version chinoise – ce fichier et les autres références conservent les paramètres chinois.
- Version anglaise (l'utilisateur dit « version anglaise / vidéo purement anglaise », ou notes.md contient
lang=en) : lire d'abord references/english.md, qui donne les valeurs de remplacement pour l'anglais (mots/seconde, nombre de mots des sous‑titres, polices latines et tailles, seuils de lint anglais, prononciation TTS, hooks anglais, points d'attention pour HeyGen/Fish Audio) ; en cas de conflit avec les paramètres chinois, la version anglaise prévaut avec english.md ; le reste (rythme, mouvements de caméra, couleurs, position y des sous‑titres 0,905H et taille 46px) reste inchangé. - Règle absolue pour la version anglaise : zéro caractère chinois à l'écran (sous‑titres, mots‑clés, intertitres, cartes de chapitre, HUD, unités, annotations, placeholders, génériques, interface de capture d'écran, sous‑titres incrustés de l'avatar – tout en anglais/chiffres/symboles). Voir english.md §4 pour la liste et les commandes de vérification.
- Pour la version anglaise, les polices/tailles/lint sont déjà implémentés dans le projet : écrire
meta.lang:'en'dans la timeline pour basculer (par défautzh, inchangé pour le chinois) ; seules quelques variantes listées à la fin de english.md §3 (gold_card etc.) ne sont pas encore adaptées. Les éléments de placeholder pour la version anglaise sont danspublic/placeholder/en/(les anciens contiennent des caractères chinois). Au tour 0, demander d'abord : HeyGen désactive‑t‑il les sous‑titres ? résolution/fréquence d'exportation ? format audio Fish.
Carte des fichiers (à lire selon le besoin, pas tout à la fois)
| Fichier | Quand le lire |
|---|---|
| references/collaboration.md | À chaque tour : liste des livrables, comment poser des questions, tableau de correspondance retour utilisateur → paramètres, format notes.md, report des préférences |
| references/digital-human.md | Tour 0 : composition/fond/vitesse de parole/fichiers d'exportation de l'avatar numérique, récupération des timestamps, points d'attention pour chaque outil |
| references/thinking.md | Tour 1 : 5 questions de choix de sujet, début/structure/rythme psychologique, densité d'information, rôle des phrases → qui apparaît, compresser 20 min en 1–3 min |
| references/templates.md | Tour 1 : tableaux de répartition temporelle et budget de mots pour les modèles A/B/C (60/120/180 s) |
| references/hooks-and-copy.md | Tour 1 : bibliothèque de techniques d'accroche (modèles à remplir), règles de copy, marquage pour le parlé, CTA de fin |
| references/visual-mapping.md | Tour 2 : type de contenu → image → mapping des composants ; séquences de démo ; retour de l'avatar ; préréglages PIP et changement ; zones interdites |
| references/packaging.md | Tours 2–5 : sous‑titres, couleurs, polices, cartes de mots‑clés, intertitres, HUD, cartes de chapitre, cadres d'annotation, écran large, etc. ; différences entre les deux thèmes |
| references/motion-and-camera.md | Tours 2–5 : catalogue complet des animations (y compris N23–N30 du créateur B) et table des paramètres de caméra virtuelle |
| references/comfort-rules.md | Tours 2, 5 : 11 lois de confort (quantifiées) et méthodes de vérification ; 15 règles de lint ; obligatoire/recommandé/optionnel |
| references/remotion-pipeline.md | Chemin B (tours 3–5) : champs de timeline.json, props des composants, fonctionnalités non implémentées (P2) et alternatives, intégration de l'avatar, lint, commandes de rendu, pièges courants |
| references/jianying-guide.md | Chemin A : opérations détaillées pour jianying (sous‑titres, keyframes de zoom, PIP circulaire, durée des animations texte, transitions, SFX, musique) |
| references/production-playbook.md | Faire une vidéo complète de A à Z (HeyGen+Fish+anglais) : étapes S1–S10/points de contrôle/coûts/pièges, exemple de projet réel |
| references/gemini-asset-prompts.md | Tous les éléments doivent être générés par l'utilisateur via Gemini (S2.5) : shotlist → pack de prompts, style bible, structure des prompts vidéo/image, durée, nommage, contrôle qualité à l'import, modèle de régénération ; scripts make_prompt_pack.py / ingest_gen_assets.py |
| references/motion-polish-and-sfx.md | Enchaînement des sorties, nouvelles transitions, bibliothèque SFX et règles de cue, pas de BGM par défaut, kit de graphiques mg et quand les utiliser |
| references/english.md | Version anglaise : conversion mots/seconde, polices latines et tailles, liste zéro chinois et vérification OCR, seuils lint anglais et code à modifier, prompts parlés/hooks anglais, HeyGen+Fish Audio |
| references/forbidden.md | Tour 1 et avant livraison : éléments emblématiques à ne pas copier et leurs remplacements |
| templates/output-template.md | Modèle de livraison finale (les productions de chaque tour sont assemblées ; voir l'en‑tête pour les instructions) |
| templates/timeline.example.json | Exemple de rendu de composants (éléments de placeholder, modèle A 90s, lint 15/15) – seulement pour voir à quoi ressemblent les composants et copier la structure JSON, pas un sujet d'exemple |
| templates/build_demo_timeline.py | Exemple d'écriture pour générer une timeline à partir d'une « liste de beats » en utilisant le builder du projet |
| templates/grid_bg_1920x1080.png | Fond de grille (#010101 + #1A1A1A, 72px), chemin directement utilisable dans jianying |
| scripts/README.md | Liste des scripts réutilisables (synthèse/cue SFX, vérification mixage, fiche de contact, mode de transition, sortie d'image) et comment intégrer un composant TS dans un nouveau projet |
| scripts/stills_timeline.mjs | Génère plusieurs images clés PNG à partir d'une timeline (utilisé au tour 3, validé) |
| examples/demo-script.md | Exemple d'une collaboration : tours 0–4, ce qui est livré à chaque tour, comment l'utilisateur peut réagir, comment modifier |
| video-asset-prep/SKILL.md | Animations avancées : ajouter des blocs d'effets fx à une vidéo parlée, créer une vidéo promo purement animée, décomposer une vidéo de référence existante (règles / catalogue de blocs / méthode de décomposition) |
Projet Remotion : <répertoire du projet>/ (local, pas dans le cloud). src/tokens.ts et les composants sont la seule source de vérité pour les paramètres ; en cas de conflit avec les références, le code du projet prévaut. src/ n'est pas en lecture seule : on peut le modifier selon les besoins (ajouter/étendre des blocs, modifier des fichiers partagés – l'utilisateur a explicitement approuvé le 2026-10-19) ; après modification, il est conseillé de lancer une vérification de régression ae-motion-craft pour s'assurer de ne pas casser les process existants ; ne pas faire de git commit sauf demande de l'utilisateur.
Conventions de répertoire pour chaque projet vidéo
Remotion ne peut lire staticFile que dans public/, mais public/ est entièrement empaqueté à chaque rendu/génération d'image – les fichiers sources volumineux ne doivent pas être placés dans public/. Chaque projet est donc divisé en deux emplacements, slug en minuscules avec tirets (ex. meeting-notes) :
<répertoire du projet>/projects/<slug>/ # espace de travail (non empaqueté)
input/ Fichiers originaux fournis par l'utilisateur : vidéo avatar originale, captures d'écran, screenshots, données (lecture seule, ne pas écraser)
script.md Script parlé + tableau des rôles des phrases (tour 1)
storyboard.md Tableau de storyboard + liste des éléments (tour 2)
words.json Timestamps phrase/mot (obtenus au tour 0 ; outils ci‑dessous)
notes.md Journal des décisions et préférences (format selon references/collaboration.md)
review/ Images/vidéos soumises à l'utilisateur à chaque tour (stills, comparaisons, aperçus, avec numéro de tour et version)
<répertoire du projet>/public/projects/<slug>/ # Pour le rendu (empaqueté, contient uniquement les éléments finaux traités)
host_full.mp4 host_pip_480.mp4 host.wav # Transcodé depuis input/, spécifications voir digital-human.md §8
assets/… # Captures d'écran, images, B‑roll, logo nécessaires au rendu
timeline.json # timelineSrc = "projects/<slug>/timeline.json"
- Tous les chemins dans la timeline sont relatifs à
public/, ex.assets.hostVideo = "projects/<slug>/host_full.mp4",assets.filespointe versprojects/<slug>/assets/…(autres champs voir remotion-pipeline.md §1). - Les sorties de rendu sont placées dans
out/<slug>/(le projet a .gitignore pour out/).lint:timelineaccepte n'importe quel chemin :npm run lint:timeline -- public/projects/<slug>/timeline.json. - Cette convention ne modifie pas
src/; le répertoireprojects/est créé par Claude si nécessaire.
Workflow de collaboration (tours 0–5 ; on peut revenir à n'importe quel tour précédent à tout moment)
Chaque tour suit le format : ce qui est montré à l'utilisateur → ce qui est soumis à confirmation → comment modifier après retour. Les formulations des questions et le tableau de traduction des retours sont dans references/collaboration.md. Après confirmation, écrire dans notes.md, puis passer au tour suivant. Si l'utilisateur revient en arrière, ne refaire que les parties affectées (changement de script → storyboard/timestamps/timeline à revoir ; changement de storyboard → nouvelles images clés ; changement de paramètres visuels → script inchangé).
Tour 0 : Réception des éléments (l'utilisateur fournit la vidéo avatar, ou écrit d'abord le script puis la génère)
Deux points de départ :
- A. L'utilisateur a déjà une vidéo avatar → procéder à la vérification ci‑dessous ; après validation, récupérer l'audio et le texte.
- B. L'utilisateur n'a pas encore de vidéo → d'abord faire le script du tour 1, après confirmation de l'utilisateur, utiliser la version prête à copier de digital-human.md §6 pour générer l'avatar via l'outil (informer l'utilisateur des contraintes de composition/fond avant la génération, modifiable ensuite uniquement en post‑prod), puis revenir à ce tour pour la vérification.
Vérification de la vidéo avatar (d'abord ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate,avg_frame_rate,duration,pix_fmt -of default=nw=1 in.mp4 pour les données objectives, puis extraire 3–5 images et les lire avec Read ; norme complète dans digital-human.md §1–§4, §8) :
| Élément à vérifier | Conforme | Non conforme : demander à l'utilisateur de |
|---|---|---|
| Résolution | 1920×1080, paysage 16:9 | Réexporter en 1080p paysage ; en dessous de 720p ou portrait, refaire, ne pas étirer |
| Fréquence d'images | 30 ips constant (avg=r) | On peut transocder (-r 30) ; si variable, prévenir du risque de désynchronisation labiale |
| Durée | Correspond à l'objectif 60/90/120/180 s, générée en une seule fois (pas de segments assemblés) | Les segments générés séparément changent de teint/lumière, demander de générer en une seule fois ou accepter les coutures |
| Composition | Plan mi‑corps, mains visibles ; hauteur du visage ≈0,30H, centre du visage ≈ (0,48W, 0,38H) ; espace libre au‑dessus de la tête ≈0,07H ; côtés du visage x 0,03–0,305, 0,667–0,97, y 0,07–0,35 propres ; gestes ne dépassent pas y 0,86–0,93 (zone des sous‑titres) | Demander à l'utilisateur d'ajuster le cadre/zoom/position dans l'outil et de réexporter ; petits écarts compensés dans le cadre PIP, grands écarts nécessitent une réexportation |
| Fond | Sombre uni ou scène propre (luminosité Y ≈ 42–62), pas la pièce du créateur original ; pas de scintillement | Changer pour un fond sombre et réexporter ; si fond vert/transparent, informer que le rendu actuel n'a pas d'implémentation pour changer le fond, il faut incruster le fond sombre dans l'outil |
| Sync labiale et expressions | Extraire 3 images de parole, bouche nette, pas de visage flou/d'images sautées/de mains déformées | Indiquer les heures précises, demander à l'utilisateur de changer d'apparence/de réglages d'outil et de régénérer |
| Vêtements et éclairage | Haut uni foncé, sans rayures fines ; visage éclairé, fond sombre | Idem, régénérer |
| Audio | Piste audio incluse dans la vidéo ; de préférence exporter un fichier wav séparé sans BGM | Si pas de wav, on extrait de la vidéo (voir ci‑dessous) ; si le BGM est incrusté, demander à l'utilisateur d'exporter une version sans musique |
| Sous‑titres/texte | De préférence fournir un fichier SRT ou le texte du script parlé | Si absent, procéder à la transcription ci‑dessous |
Le résultat de la vérification est présenté sous forme de tableau ✓/✗ à l'utilisateur ; pour chaque élément non conforme, préciser « comment régler lors de la réexportation ».
Récupération de l'audio et du texte (ce qui est disponible, ce qui est à construire)
- ✓ Disponible (ffmpeg/ffprobe local) : transcoder en 30 ips, extraire l'audio
ffmpeg -i in.mp4 -vn -ar 48000 -ac 1 host.wav, créer un proxy PIP 480p – toutes les commandes sont dans digital-human.md §8. - ✓ Disponible : l'utilisateur a un script parlé (cas B ou fourni par l'utilisateur) : utiliser directement le texte phrase par phrase ; durée estimée à partir de la durée du wav + proportion du nombre de mots, confidence=0,5, décalage de l'affichage du texte +4 images (digital-human.md §9-3).
- ✗ À construire : transcription vocale + alignement forcé au niveau du mot en chinois : whisper / WhisperX / stable‑ts / FunASR ne sont pas installés localement (vérifié), ni dans Python ; le
@remotion/openai-whisperdu projet n'est qu'un outil pour analyser les résultats de l'API OpenAI Whisper ; il nécessite une clé API de l'utilisateur, que nous n'avons pas. Tant que l'alignement chinois n'est pas installé et testé sur un échantillon, on ne peut pas prétendre avoir des timestamps au niveau du mot. Alternatives possibles : (1) SRT exporté par l'outil avatar (phrase par phrase) ; (2) l'utilisateur exporte le SRT depuis jianying (reconnaissance de sous‑titres) ; (3) après accord de l'utilisateur, Claude installe un ASR local (demander d'abord l'autorisation, expliquer les dépendances nécessaires) ; (4) utiliser d'abord une estimation phrase par phrase pour les échantillons, puis ajouter l'alignement avant la version finale. - Quelle que soit la méthode, stocker le résultat dans
projects/<slug>/words.jsonet noter dans notes.md la source et la confiance ; en cas d'erreur de caractère chinois, comparer avec le script (digital-human.md §10).
Présenter à l'utilisateur : tableau de vérification + explication de la source des timestamps + liste des éléments à réexporter. Demander confirmation : la vidéo est‑elle bien celle‑ci ? quelle méthode pour les timestamps ?
Tour 1 : Script (choix du sujet → script parlé → tableau des rôles des phrases)
Faire : les 5 questions de choix de sujet (thinking.md §2), type de modèle, une phrase de thèse + ≤3 preuves + un contraste (thinking.md §4–§7), le hook (hooks-and-copy.md §1–§2), le tableau temporel des paragraphes (templates.md ; nombre de mots = durée × 4,8 environ, pour les tutoriels N = round((T−42)/25)), écrire chaque phrase avec role/intent/marks (hooks-and-copy.md §3–§5 ; chaque phrase ≤20 caractères, les chiffres en phrase séparée, CTA uniquement à la fin, pas de phrases du créateur original, forbidden.md). Si l'utilisateur a déjà une vidéo, se baser sur le texte réel de la vidéo, ne faire que le « tableau des rôles + suggestions de modifications », ne pas changer le script sans accord.
Présenter à l'utilisateur : 2–3 options de titre/hook + script parlé complet (version prête à copier) + tableau des rôles des phrases (colonne simplifiée : numéro de phrase | texte original | role | qui apparaît). Demander confirmation : quel hook choisir ? quelles phrases supprimer/modifier ? les chiffres/faits sont‑ils exacts ? le nombre de mots et la durée conviennent‑ils ? Après retour : modifier le script → recalculer le nombre de mots/vitesse de parole → si la vidéo existe déjà, ré‑aligner les timestamps.
Tour 2 : Storyboard (tableau de storyboard + liste des éléments)
Faire : phrase de jugement → avatar, phrase de preuve → animation, 2–3 phrases consécutives regroupées en un plan principal, choisir un préréglage PIP (visual-mapping.md, motion-and-camera.md, comfort-rules.md) ; les premières 20–30 s sont les plus denses, puis « 15 s serrées + 15–20 s relâchées », plan large toutes les 15–20 s, pas de segment sans visage >10 s, punch ≤2/min, zoom sur capture d'écran toutes les 3–5 s avec annotation. Si les éléments de preuve sont insuffisants, dégrader en carte de mots‑clés + avatar, ne pas forcer.
Présenter à l'utilisateur : tableau de storyboard (temps | texte parlé | image | PIP | sous‑titres et mots accentués | animation/mouvement de caméra) + liste des éléments (chaque élément : id, dans quel plan, contenu souhaité, comment l'enregistrer/l'exporter, solution de repli si absent, ex. « screen_render : capture d'écran de l'exécution de la commande de rendu, ≥1080p, 5–10 s, curseur visible ; sinon, carte de mots‑clés »).
Demander confirmation : rythme du storyboard ; possibilité de fournir chaque élément ; pour les éléments manquants, les remplacer ou les dégrader.
Après retour : modifier le storyboard, mettre à jour la liste des éléments ; une fois reçus, placer dans input/, vérifier la résolution/le contenu/les informations privées (comptes, clés, visages) avant de les déplacer dans public/projects/<slug>/assets/.
Tour 3 : Images clés (en comparaison côte à côte avec les images de référence de la source)
Faire : écrire timeline.json (remotion-pipeline.md ; on peut s'inspirer de l'exemple templates/timeline.example.json, mais adapter le contenu au projet), npm run lint:timeline, puis générer 6 à 10 images clés – une pour le hook, l'intertitre, la carte de mots‑clés/carte de chapitre, le milieu du zoom de capture d'écran, la carte de chiffres/carte de comparaison, l'image PIP, l'image des sous‑titres, l'image de fin – en choisissant les plus représentatives :
cd <répertoire du projet>
# Usage : node <script> <timelineSrc> <outDir> <numéro_image,numéro_image,…> ; génère plusieurs images en une fois, environ 10 secondes, sorties f<numéro 5 chiffres>.png
node talking-video-oneshot/scripts/stills_timeline.mjs projects/<slug>/timeline.json out/<slug>/stills 45,300,620
# Pour une seule : npx remotion still Main out/<slug>/x.png --props='{"timelineSrc":"projects/<slug>/timeline.json"}' --frame=300
# Côte à côte (gauche source, droite nôtre, toutes deux redimensionnées à 960×540)
scripts/compare.sh projects/<slug>/review/r3_cmp_01.png <image de référence source> out/<slug>/stills/f00045.png # gauche source, droite nôtre, toutes deux redimensionnées à 960×540
- Les images de référence de la source se trouvent dans
<répertoire des éléments>sousv03|v04|ex04–ex06/evidence/,ex01–ex03/ev/,v01|v08|v09|ex07|ex08/frames|bursts|scenes/; les fichiersanalysis.md/motion_catalog.md/transcript.mdcorrespondants permettent de savoir comment un plan est réalisé dans la source. Le projet contient également des images comparatives existantes pour chaque composant danscompare/. Lecture seule, ne pas modifier le répertoire source. - En l'absence d'image de référence équivalente, indiquer honnêtement « pas d'image source correspondante » et utiliser les paramètres de packaging.md pour vérifier.
- Sous chaque image côte à côte, écrire une ligne : de quel plan il s'agit, à quelle image source elle se réfère, les différences constatées (police/ombre/espacement/position/couleur).
Présenter à l'utilisateur : 6 à 10 images côte à côte (pas plus de 4 par envoi, répartir) + la liste des différences que j'ai identifiées.
Demander confirmation : pour chaque image, « ressemble / ne ressemble pas / où est la différence » ; quels points corriger en priorité.
Après retour : modifier la timeline selon le tableau de correspondance de collaboration.md ou, s'il s'agit d'un défaut au niveau du composant, le signaler comme « problème du projet » à l'utilisateur, avec possibilité de modifier directement src/ (après modification, lancer une vérification de régression conseillée) ; ne regénérer que les images concernées.
Tour 4 : Aperçu complet basse résolution
Faire : rendu complet basse résolution pour vérifier le rythme et les timings (CRF élevé, éventuellement demi‑résolution ; avant le premier rendu, informer l'utilisateur du temps estimé, environ 4 minutes pour 60 s) :
cd <répertoire du projet>
npx remotion render Main out/<slug>/preview_v1.mp4 --props='{"timelineSrc":"projects/<slug>/timeline.json"}' --crf=32 --scale=0.5 --codec=h264
(En cas de modification locale, utiliser d'abord --frames=a-b pour le rendu d'une plage.) Si l'aperçu utilise des éléments de placeholder ou des timestamps estimés, informer explicitement l'utilisateur.
Présenter à l'utilisateur : preview_vN.mp4 + 5 à 8 points temporels (mm:ss) à « regarder attentivement » que j'ai identifiés. Demander confirmation : retour point par point (format : « 0:23 le texte arrive en retard » « 1:05 le zoom de capture est trop rapide ») ; le rythme général ressemble‑t‑il à la source ? Après retour : traduire chaque retour en modifications de paramètres (tableau de correspondance), expliquer « quels paramètres de quels plans ont été modifiés », puis générer la version v2 (de préférence en ne rerendant que la plage affectée). Possibilité d'itérer plusieurs fois.
Tour 5 : Polissage final et rendu final + auto‑vérification
Faire : traiter les retours de l'aperçu ; améliorer les timestamps avec un alignement réel (si estimation au tour 0) ; lint 15/15 ; rendu final :
npx remotion render Main out/<slug>/final.mp4 --props='{"timelineSrc":"projects/<slug>/timeline.json"}' --crf=18 --codec=h264
Puis extraire 5 à 8 images pour vérifier (pas d'écran rouge « P2 scene not implemented », pas de sauts dans les sous‑titres, pas de texte apparaissant avant la parole, pas de mouvement de caméra trop brusque, audio host présent). Suivre la « Liste de vérification avant livraison » ci‑dessous, écrire ✓/✗/valeur pour chaque point, ce qui est incertain est listé comme « à confirmer par l'utilisateur », assembler dans le modèle templates/output-template.md et livrer.
Présenter à l'utilisateur : final.mp4 + fiche d'auto‑vérification + dernières images côte à côte avec la source. Si l'utilisateur n'est pas satisfait → revenir au tour correspondant, ne pas insister.
Chemin A (jianying manuel)
Si l'utilisateur souhaite éditer lui‑même dans jianying, les tours 3–5 sont remplacés par : rédiger les instructions détaillées de jianying selon references/jianying-guide.md (style des sous‑titres, keyframes de zoom, PIP circulaire, durée des animations, transitions, SFX, musique), l'utilisateur fait un montage et renvoie des captures d'écran ou un extrait vidéo, Claude vérifie manuellement par rapport à la source et aux comfort‑rules et donne des suggestions de modifications.
Comparaison des deux voies d'exécution
| Élément | Chemin A : jianying manuel | Chemin B : Remotion automatique |
|---|---|---|
| Adapté pour | Ne pas coder, peu d'éléments, rapidité | Grand volume, cohérence pixel‑perfect, vérification automatique |
| Entrée | Vidéo avatar + storyboard + instructions de montage | Vidéo avatar + host.wav + timestamps + timeline.json |
| Sous‑titres | Reconnaissance vocale → appliquer un style unique, y≈0,90H | subtitles[], box 46px, y 0,905H (stroke 56px, y 0,885H) |
| Zoom | Keyframes d'échelle 100→112%, 28 images, ease‑in‑out | camera:[{kind:'push',dur:28,scale:[1,1.12],ease:'inOutCubic'}] |
| PIP | Image dans l'image + masque circulaire, diamètre 0,14W, centre (0,08,0,85) | pip:{preset:'bl_circle'} |
| Vérification | Manuelle (points « vérification manuelle » de comfort-rules.md) | 15 règles de lint + échantillonnage |
| Limitations | Les menus/valeurs de jianying dépendent de la version ; les annotations suivent le zoom nécessitent des clips composites | Graphiques, plein écran de fin, cartes de fin, pinceau calligraphique, effets sonores non implémentés (avec alternatives) |
Format de livraison finale (templates/output-template.md ; assembler les productions de chaque tour)
- Informations de base 1. Titre et couverture 2. Script parlé + tableau des rôles 3. Réglages de l'avatar 4. Tableau de storyboard 5. Instructions de montage (5A jianying / 5B Remotion) 6. Résumé de la timeline 7. Auto‑vérification + points à confirmer. Exemple de collaboration dans examples/demo-script.md.
Liste de vérification avant livraison
- Un hook (question/contraste/promesse) apparaît en 3 secondes, avec un premier changement d'image ; pas d'introduction, de présentation personnelle, ou de logo au début
- Vitesse de parole : 4,5–5,5 caractères/seconde (nombre total de caractères ÷ durée) ; chaque phrase ≤20 caractères ; ligne de sous‑titre ≤14 caractères (8–10 idéal)
- Version anglaise : vitesse de parole 2,2–2,6 mots/seconde ; chaque phrase ≤16 mots ; sous‑titre ≤7 mots/38 caractères ; pas de caractères chinois sur l'ensemble de la vidéo (english.md §4 : grep statique sur la timeline +
tools/ocrsur les images échantillonnées, résultat NO_CJK) - Chaque phrase a un role et un intent ; les arguments sont donnés par l'avatar, les preuves par les animations ; si preuves insuffisantes, dégradation en carte de mots‑clés
- ≥60 % des coupes tombent au début d'une phrase (±3 images) ; 2–3 phrases par plan principal ; nombre de coupes/divisions 12–20 (pour les données ≤24)
- Durée des plans : avatar 3–6 s ; B‑roll 1,5–3 s ; cartes 1,5–4 s ; capture d'écran 5–10 s (avec mouvement/annotation au milieu)
- Plan large toutes les 15–20 s ; segment sans visage ≤10 s ; punch‑in ≤2/min ; fondu enchaîné ≤2/min
- Le texte apparaît de −2~+4 images par rapport au début du mot‑clé, reste affiché ≥40 images ; ≤4 blocs de texte par écran
- Durée des animations : 0/6/12 (18) images ; amplitude des mouvements ≤1,12×, n'affecte que la couche de contenu ; tous les éléments statiques sont animés en slow push
- Les sous‑titres ont un seul style identique sur toute la vidéo, position fixe ; ≤3 couleurs d'accentuation ; seulement deux types de fond
- Pas de phrases, tics de langage, slogans, logos, apparence, titres emblématiques ou génériques de fin du créateur original (forbidden.md)
- Le contenu est le sujet et les éléments propres de l'utilisateur ; les données d'exemple sont marquées « exemple » ; les lacunes d'éléments sont listées
- Chemin B : lint 15/15 PASS ; pas d'écran rouge de placeholder sur les images échantillonnées ; hostAudio est défini (sinon, pas de son)
- Version finale : loudness -16 LUFS (voix+SFX, peak < -1 dBFS) ; durée vidéo/audio identique (±0,05 s) ; OCR sur images toutes les 1,5 s strictement zéro caractère chinois ;
assets.bgmnon défini ; vidéo finale copiée sur le bureau, taille et durée indiquées dans le livrable
Zones interdites (voir details dans references/forbidden.md)
Carte de fin de compte et mascotte, slogans/salutations/tics de langage/titres fixes et phrases de transition du créateur original, apparence et studio du créateur original (vêtements, pièce néon, bureau canapé), leurs personnages 3D, badges de texture de drapeau, transitions feu, pubs parlées, blagues de type variété (VHS, cartes humoristiques, memes), éléments et données de la source. Seuls les motifs visuels (grille noire, étiquettes vert fluo, pilules arrondies, PIP circulaire, etc.) peuvent être réutilisés, la couleur principale peut être changée pour la sienne.
Limitations connues (à dire honnêtement à l'utilisateur)
- Échantillon : 13 épisodes (créateur A 9, créateur B 4), tous en 540P et en accéléré 2× ; les entrées <0,13 s sont notées comme coupes nettes ; les easing/spring sont souvent des estimations ; les captures d'écran de la source sont muettes, la musique et les effets sonores sont tous déduits.
- Remotion non implémenté (P2) : graphiques (camembert/barres/lignes/bulles/timeline 3D/cartes retournées), clip_full plein écran de fin, ClosingCard, BrushWord pinceau calligraphique, TitleCard, Badge badge de chapitre, sticker_words/name_tag/checklist, changement de fond, changement de thème (
meta.themen'est pas lu, le cercle PIP violet ne disparaît pas avec le thème). Leur utilisation produit un écran rouge de placeholder ou est ignorée silencieusement – alternatives dans remotion-pipeline.md §4. - Pas d'outil de transcription vocale/alignement au niveau du mot : les outils whisper ne sont pas installés localement ; les timestamps au niveau du mot ne peuvent actuellement être obtenus que via le SRT de l'outil avatar / la reconnaissance vocale de jianying / l'estimation par nombre de mots (à construire, voir tour 0).
- Pas de planificateur automatique : la timeline est actuellement écrite manuellement par Claude ou générée à l'aide du builder du projet (répartition temporelle basée sur le nombre de mots). Après intégration de l'avatar réel, il faudra utiliser les timestamps réels au niveau du mot (outil avatar non déterminé, pipeline de l'étape 2 non vérifié). L'alignement forcé du chinois n'a pas été validé.
- Différence de polices : la police étroite (ZCOOL QingKe HuangYou) est un peu lourde, les chiffres (Barlow Condensed) un peu larges ; le pinceau calligraphique nécessite une vérification des droits. Les polices sont chargées en ligne via google-fonts.
- Chemin jianying : noms de menus, valeurs dépendantes de la version ; à adapter lors de la rédaction des instructions.
- etc.
Note : ce fichier sert de guide complet pour la collaboration Claude‑utilisateur. Les étapes spécifiques et les valeurs numériques sont dans les fichiers de références listés ci‑dessus. Lire uniquement les sections nécessaires à chaque tour.