Production d'épisodes animés
Présentation
Un épisode animé vertical, doublé et sous-titré : illustrations de personnages, panneaux, voix clonées ou issues d'une bibliothèque, musique, clips image-vers-vidéo et synchronisation labiale, le tout découpé par un moteur qui chronomètre chaque plan à partir de l'audio réel des dialogues. Un seul fichier episode.json contient l'intégralité du projet, et engine/episode.py exécute toutes les phases à partir de ce fichier. Les skills frères effectuent le travail des fournisseurs.
Utilisez le moteur ; n'écrivez pas vos propres scripts d'édition. La chronologie, les incrustations, les sous-titres, le texte de droite à gauche, le mixage, les durées et les jonctions de synchronisation labiale sont déjà dans engine/. Il a été éprouvé en reconstruisant un véritable épisode de 3,5 minutes : images identiques, audio identique et durée exacte que l'original avait manquée. Un script d'édition manuscrit redécouvre chaque bogue de references/troubleshooting.md.
L'audio est le maître. Les longueurs des plans, les temps des sous-titres et les parties de synchronisation labiale proviennent des fichiers de dialogue terminés. N'estimez jamais un timing à partir du texte.
Vous ne pouvez ni regarder ni écouter. Vous vérifiez les images, les durées et les chiffres. L'humain juge la ressemblance, les voix, la prononciation, le timing et les blagues. Planifiez ses points de contrôle et respectez-les.
Nécessite :
- Ces skills à côté de celui-ci : image-generation, elevenlabs-tts, generating-video-clips.
- Python 3 avec
pip install -r <chemin-vers-ce-skill>/requirements.txt(Pillow compilé avec RAQM, numpy ; OpenCV facultatif). - ffmpeg 7 ou plus récent.
- Polices : les styles et les sous-titres nomment des clés de police (
bold,hblack,blackdans l'exemple) que le dictionnairefontsmappe vers des fichiers.ttfinstallés. Pour l'hébreu et le latin, Rubik et Heebo (gratuites, Google Fonts) fonctionnent bien ;checkbloque si une police est manquante. - Clés dans les variables d'environnement, définies dans chaque shell qui exécute le moteur :
OPENAI_IMAGE_API_KEY,ELEVENLABS_API_KEY,GEMINI_API_KEY,FAL_KEY.
Pour voir l'ensemble du pipeline fonctionner sans aucun appel API, exécutez python3 <chemin-vers-ce-skill>/engine/episode.py /tmp demo, puis check et build le projet de démonstration qu'il crée.
Le pipeline et ses portes
Chaque porte est un arrêt : envoyez l'artefact, demandez, attendez. Les commandes sont python3 <chemin-vers-ce-skill>/engine/episode.py PROJET <commande>. Coûts mesurés en octobre 2026.
| # | Phase | Commande | Porte (l'humain) | Coût |
|---|---|---|---|---|
| 1 | Histoire et script | script.md depuis templates/script.template.md | le script, et tout sujet sensible | - |
| 2 | Bible des personnages | templates/characters.template.md, puis characters dans episode.json | - | - |
| 3 | Visages, cartes, promotion | chars face, chars card key=visage.png, chars final keys | ressemblance, sur une feuille de toutes les cartes | ~0,30 $ par personnage |
| 4 | Panneaux | panels draft, puis panels final ids | chaque panneau, sur une feuille | ~0,30 $ par panneau |
| 5 | Voix | un échantillon par voix (elevenlabs-tts) | chaque voix, à l'oreille, avant le lot | centimes |
| 6 | Répliques | lines | le lot à l'oreille, avec horodatages ; noms A/B | centimes à quelques $ |
| 7 | Musique et effets sonores | sound | la musique | centimes |
| 8 | Animatic | build (pas encore de clips : images fixes avec mouvements de caméra) | rythme et ordre, avant toute dépense vidéo | gratuit |
| 9 | Animation | animate, feuilles, reprises avec animate S --takes 2 + animate pick S K | mouvement, à partir des feuilles | ~0,10 $ par seconde de clip, par prise |
| 10 | Synchronisation labiale | lipsync prep, points du visage dans la config, lipsync run | vérification ponctuelle des images | ~0,13 $ par seconde |
| 11 | Montage et livraison | build, sheet, deliver | l'humain regarde le mp4 | gratuit |
Commandes, entrées, sorties et gestion des échecs pour chaque phase : references/pipeline.md.
Écrire le script
Règles qui ont tenu (détails et exemple concret : references/script-writing.md) :
- Un accroche dans les 3-4 premières secondes (une ouverture à froid sur le problème), puis le titre. Durée inférieure à 30 secondes : placez le titre et la carte de fin en incrustation sur les plans de l'histoire et sautez le montage.
- Chaque personnage récurrent parle au moins une fois. Un montage d'introduction, un mot chacun avec sa propre voix à environ 1,2-1,5 s par carte, est peu coûteux et apprécié.
- Le texte à l'écran doit être lisible : environ 0,8 s plus 0,06 s par caractère ; 1,2-1,5 s pour une courte carte ; 4-6 s pour une légende finale. Donnez aux cartes une
mindur. - Placez les indices tôt et révélez-les. Les rappels aux running jokes réelles d'un groupe sont les plus percutants.
- Les sujets sensibles sont du ressort de l'utilisateur. Listez chaque détail privé que vous souhaitez utiliser (santé, argent, relations, famille, disputes), demandez pour chacun et n'utilisez que ce qu'il confirme.
- Répliques de 12 mots ou moins, nombres en lettres. Le texte à l'écran reste en orthographe normale ; les corrections de prononciation vont dans
pronounce. - Musique et effets sonores, même pour la narration. Au moins un fond musical et quelques effets (whoosh sur les coupes, un impact sur la révélation) ; un fond silencieux donne l'impression d'être inachevé.
episode.json en un écran
templates/episode.example.json est un petit épisode complet ; chaque clé est dans references/config-schema.md. Les parties que vous modifiez le plus :
characters: nom d'affichage, couleur, voix et les champs de prompt de la bible des personnages.speakers: voix qui ne sont jamais dessinées, comme un narrateur ({"display": null, "voice": "<id>"}donne des sous-titres sans nom).lines: id, intervenant, texte avec balises audio ;trimetlevelsur les répliques d'un seul mot.shots: image, répliques ("[email protected]"chevauche la réplique précédente), pads,mindur, caméra, fx, sfx, incrustations, décalage et vitesse du clip.music_cues:[cue, depuis le plan, jusqu'au plan, volume, décalage]. La construction prévient lorsqu'une cue est plus courte que sa fenêtre.lipsync: quels plans, quelles répliques ignorer, un point du visage par partie.prompts: remplacezchar_styleetpanel_stylepour un rendu différent (dessin animé 3D, aquarelle, photoréaliste).
Construire et réviser
- Regroupez les corrections. Une construction complète prend des minutes. Rassemblez toutes les notes d'une session de révision (une prise de réplique, un pad, un décalage de clip), appliquez-les toutes, puis reconstruisez une seule fois.
- Les segments sont mis en cache et suivis.
buildne rend que les plans dont les entrées ont changé : un nouveau clip ou une version synchronisée labialement, un panneau promu, une réplique modifiée, un plan ou un style.build --only S05,S06force ces plans ;--forcerend tout. - Un plan synchronisé labialement est refait après toute modification de son clip, décalage, vitesse ou répliques :
lipsync prep S05 && lipsync run S05. Jusque-là, la construction prévient qu'il est obsolète et utilise le clip brut. - La regénération d'un actif existant nécessite
--force(sound theme --force,animate S05 --force) ; sans cela, les fichiers existants sont conservés et seuls les trous sont comblés. - Révisez avec des feuilles.
sheetplace 3 images par plan sur une page. Lorsque l'humain nomme un moment par son horodatage, extrayez et lisez ces images avant de répondre (ffmpeg -ss T -i build/<output>.mp4 -frames:v 1 f.jpg). checkavant chaque construction : actifs manquants, clés, skills frères et texte d'incrustation plus large que le cadre.- Les durées sont vérifiées à la fin de chaque construction. Un audio plus court que la vidéo fait échouer la construction au lieu de couper la fin.
- Avant d'envoyer :
references/qa-checklist.md.
Travailler avec l'humain
- Envoyez chaque artefact avec votre outil d'envoi de fichiers et proposez de le révéler dans le Finder ; ne vous contentez pas d'afficher un chemin. La dernière étape est
deliveret l'envoi de ce fichier. - Pour l'audio, dites quoi écouter et où ("à 0:41, le prénom de Dani vous semble-t-il correct ?"). Ne prétendez jamais l'avoir entendu.
- La prononciation et les choix de voix leur appartiennent : fichiers A/B avec horodatages (elevenlabs-tts).
- Avant chaque phase payante, donnez une estimation du coût ; après, le total cumulé.
Quand quelque chose semble anormal
| Symptôme | Correction |
|---|---|
| Cartes ou légendes trop rapides à lire | augmentez mindur / post : ~1,2-1,5 s par courte carte, 4-6 s pour la légende finale |
| Un titre coupé aux deux bords | check prévient ; réduisez la size du style ou ajoutez wrap |
| La musique s'arrête avant la fin d'une section | la construction a prévenu : augmentez les seconds de la cue, sound <cue> --force ; ou divisez la section en deux cues |
| La fin est coupée | impossible avec le moteur (mix de durée exacte, vérification de durée) ; dans les muxages manuels, voir deck-to-video |
| Une réplique est enterrée sous la musique | level_clips.py --report sur cette réplique, puis une prise plus forte ; baissez le volume de cette cue |
| Un personnage pointe ou agit avant sa réplique | clip_off au-delà, ou divisez le plan et recadrez la première partie avec clip_cam |
| Les bouches ne bougent pas avec les mots | phase de synchronisation labiale ; si la mauvaise bouche bouge, corrigez son point du visage |
| Un visage plus grand dans le plan de groupe | installez OpenCV (les visages sont égalisés), ou mirror une carte dont l'accessoire cache un voisin |
| L'hébreu s'affiche inversé ou non lié | Pillow sans RAQM : check dit comment corriger |
| Un nom ou un emprunt mal prononcé | une entrée pronounce, A/B à l'oreille |
Plus de détails, avec causes : references/troubleshooting.md.
Skills connexes
- image-generation : cartes de personnages et panneaux ("Personnages récurrents et panneaux d'histoire").
- elevenlabs-tts : voix, répliques d'un seul mot, prononciation, musique et effets sonores.
- generating-video-clips : clips, feuilles de prises, synchronisation labiale.
- deck-to-video : les mêmes leçons ffmpeg pour les vidéos de diapositives.