Talking-Head Short — éditeur maître
Rédige des réponses concises. Ne répète pas les transcriptions ni les longs logs. Corrige les choses en modifiant spec.json avec l’outil Edit, jamais en le réécrivant complètement. Chaque script imprime un rapport compact ; lis-le, agis, passe à la suite.
S=<ce répertoire skill>/scripts, WD=<répertoire de travail à côté du fichier brut>/ths_<nom>.
0. Installation (une fois par machine/sandbox)
bash $S/setup.sh → utilise le PY= affiché. Il installe tout depuis PyPI, y compris un ffmpeg statique s’il n’existe pas.
Chaque téléchargement dispose d’un repli automatique. Les sandbox (exécution de code de claude.ai, gratuit ou payant) bloquent généralement HuggingFace, Mixkit et l’API Google Fonts, mais autorisent GitHub :
- modèle de transcription : HuggingFace → miroir GitHub (whisper-base, puis whisper-tiny)
- musique/SFX : Mixkit → pack CC0 miroir GitHub (les IDs ressemblent à
pack:lofi_chill) - polices : dépôt Google Fonts → jsDelivr → pack OFL miroir GitHub (32 familles) → police système
- images d’archives : Mixkit → aucune (utilise des cartes, ou demande à l’utilisateur de télécharger des clips)
Si l’installation affiche « pas de réseau » / pip échoue : le sandbox a l’accès réseau DÉSACTIVÉ. Préviens l’utilisateur exactement (un message) :
« claude.ai → Paramètres → Capacités → Exécution de code → Accès réseau : Tous les domaines (ou ajoute : pypi.org, files.pythonhosted.org, github.com, objects.githubusercontent.com, release-assets.githubusercontent.com, api.github.com, raw.githubusercontent.com, cdn.jsdelivr.net, huggingface.co, mixkit.co, assets.mixkit.co), puis démarre une nouvelle conversation et exécute à nouveau /talking-head-short. » N’essaie pas le montage sans numpy/ffmpeg.
Seulement si toutes les sources échouent : demande une transcription collée →
$PY $S/align_text.py $WD transcript.txt. Les ressources sont mises en cache dans~/.ths_assets.
1. Analyse
$PY $S/analyze.py RAW $WD
Il affiche la résolution, le point de regard, la durée nette, les mots de remplissage/trébuchements/reprises supprimés automatiquement, CHECK (remplissages non supprimés, mots de faible confiance, longues pauses), et TEXT avec horodatage toutes les 8 mots.
- Juge toi-même les mauvaises prises. Supprime les faux départs, les phrases inachevées, « tu vois comme ouais », « genre ». Conserve les répétitions rhétoriques. Relance avec
--remove '[[s,e],...]'(secondes source). La transcription est mise en cache. - Regarde
$WD/frames.jpgseulement si le point de regard ou le cadrage est douteux.
2. Brief (dans ta tête, puis 4 lignes pour l’utilisateur)
Écris : sujet · message principal · arc émotionnel (accroche → … → conclusion) · ligne de créneau (depuis NICHES) · ton (calme/équilibré/énergique) · cadrage brut (large ou serré).
Puis exécute $PY $S/style.py RAW "<créneau>" --out $WD/style.json. Cela donne la palette adaptée avec justifications, polices, direction pour les animations graphiques/images d’archives/musique/SFX et notes importantes.
Lis references/craft.md une fois (les règles) et references/spec.md (le format du spec).
3. Demander avant de construire (ne jamais rendre d’abord)
Utilise AskUserQuestion si disponible ; sinon un seul message numéroté compact. Recommande l’option 1 à chaque fois.
- Style : créneau détecté + ton (ex. « Développement personnel · calme-réfléchi ») vs 1–2 alternatives.
- Polices : la paire de la ligne vs 2 alternatives avec un contraste de style clair (sans sérif principal + sérif/italique accent, ou sans sérif gras principal + sérif italique accent).
- Palette : palette de la ligne adaptée à l’image vs palette dérivée de l’image vs une couleur de marque donnée par l’utilisateur.
- Densité visuelle : Minimal (sous-titres + 2–3 cartes) · Équilibré (sous-titres + 4–6 cartes / images d’archives) · Riche (plus d’animations graphiques + images d’archives).
- Musique : 3 candidates sous licence depuis
$PY $S/assets.py music "<ambiance>"(id · titre · tags), ou aucune. - Images d’archives : oui (stock sous licence correspondant à des répliques littérales) / non. Saute toute question à laquelle l’utilisateur a déjà répondu. Attends les réponses.
4. Rassembler les ressources
- Polices :
$PY $S/assets.py font "Famille" ... - Musique, SFX, vidéo : exécute
assets.py music|sfx|video "<requête>"pour lister, puisassets.py get <kind> <id> $WD.- SFX par ton : calme → « air woosh », « chime » ; équilibré → « whoosh », « pop » ; énergique → « swoosh », « impact » (utilisé une fois).
- Les sources bloquées passent automatiquement en repli (IDs de pack).
assets.py packliste l’intégralité du pack CC0 hors ligne.
5. Écrire spec.json, planifier, styleframes
- Écris
$WD/spec.json(voir references/spec.md) : sous-titres dans l’ordre parlé, cartes sur les clauses appropriées, audio. $PY $S/engine.py $WD --plan→ corrige chaque PROBLÈME en modifiant le spec (raccourcir ou fusionner des temps, déplacer ou supprimer des sous-titres sous les cartes), puis re-planifie jusqu’à ce qu’il n’y en ait plus ou seulement des acceptable.$PY $S/engine.py $WD --frames t1,...avec 10–15 instants : chaque milieu de carte et fin−0,3 s, et chaque sous-titre à sa fin−0,1 s. Regarde$WD/styleframes.jpget corrige tout ce qui est coupé, surchargé, mal aligné ou hors palette.- Montre les styleframes à l’utilisateur avec une seule ligne (« ok pour le rendu ? »). Itère seulement sur ce qu’il signale.
6. Rendu, mixage, QA
bash $S/render.sh $PY $WDrend les parties en parallèle et les concatène (≈5 min par minute de vidéo sur un portable). Dans un sandbox avec une limite de temps par commande, exécute$PY $S/engine.py $WD --render --part i/Nune fois par partie, puis--concat N.$PY $S/mix.py $WD→final.mp4(nettoyage vocal, musique atténuée avec alignement sur la conclusion, SFX, -14 LUFS).$PY $S/qa.py $WD→ regardeqa_endframes.jpg. Chaque fin de temps et de carte doit afficher le texte et l’animation terminés. Pas d’images flash.- Fournis le chemin du fichier, plus 3 lignes sur ce que tu as choisi et pourquoi. Mentionne les ressources que tu n’as pas pu télécharger.
Non-négociables (pourquoi : chacun a été signalé comme amateur)
- Les sous-titres ne sont jamais coupés. Le texte principal est ≤ largeur de la clé et placé près. Deux styles de police contrastés selon le nombre d’or. Ne jamais sous-titrer des mots de remplissage isolés.
- Les animations graphiques montrent le sens, se terminent avant le changement de scène, et restent dans un système visuel cohérent. Pas de figures bâtons ni de clip art.
- Fluide : un zoom verrouillé sur l’œil avec easing entre les coupes ; pas d’images flash ; transitions variées.
- Correction colorimétrique uniquement. Ressources sous licence uniquement (Mixkit / Google Fonts OFL), avec LICENSES.txt conservé dans $WD.