Communitygithub.com

comic-story-video

Transforme n'importe quel sujet en une courte vidéo verticale où « les images racontent l'histoire » — dessin au trait génératif tracé coup par coup, bulles de dialogue composées par code, narration à une voix et sous-titres incrustés.

Qu'est-ce que comic-story-video ?

Cette compétence permet de transformer n'importe quel sujet en une vidéo courte verticale de style « images qui racontent une histoire », au format 1080×1920, d'une durée comprise entre 110 et 135 secondes. Elle génère un dessin au trait animé trait par trait, superpose des bulles de dialogue, ajoute une narration vocale unique et des sous-titres incrustés. L'audio est la colonne vertébrale : la seule écoute de la piste audio doit suffire à comprendre l'histoire. Idéale pour les explications en bande dessinée, les vidéos historiques ou de vulgarisation science-pop, les formats humoristiques ou sarcastiques, ou encore les demandes explicites des utilisateurs comme « raconte comme le style Mixige », « images qui racontent une histoire », ou « vidéo en storyboard BD ». Le processus est découpé en cinq étapes claires : écriture du script, génération des images, production vidéo, vérification et livraison. Des règles strictes garantissent la clarté narrative et la qualité technique, de la structure de l'histoire à la gestion des couleurs et des sous-titres.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/liangdabiao/comic-story-video/tree/HEAD

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Vidéo BD racontant une histoire

Transformez un sujet en une courte vidéo verticale de 110 à 135 secondes : le dessin au trait est tracé coup par coup, les bulles de dialogue s'affichent une à une, avec une narration unique et des sous-titres incrustés. Produit : <projet>/out/final.mp4 (1080×1920).

L'audio est la colonne vertébrale. Si on écoute la piste audio seule, elle doit raconter une histoire complète et compréhensible ; les images ajoutent du relief, mais ne sont pas indispensables à la compréhension.


Cinq étapes

① Définir l'histoire → <projet>/story.json

Créez le dossier, copiez le modèle :

mkdir -p <projet>/raw && cp templates/comic/story.example.json <projet>/story.json

Remplissez d'abord les trois premières lignes. Si vous ne pouvez pas les remplir, n'écrivez pas de cases :

"story_line": "Qui / veut quoi / est bloqué où / résultat, tenu en une phrase",
"question":   "La question qui frappe dès le début",
"answer":     "La réponse donnée dans la dernière case, qui résout la question"

La question doit choisir un point de blocage logique, pas un simple « qu'est-ce que c'est ». La réponse ne doit pas être une simple chronologie.

Ensuite, écrivez pour chaque case la narration (récit) et bubbles[].text (dialogue). La narration doit faire 440–540 caractères (ponctuation comprise), en calculant 4,0 caractères/seconde.

python scripts/pipeline.py <projet> --stage script     # Mais ne continuez pas

Critères de validation de ① : les trois lignes sont complètes → la longueur est dans l'intervalle → chaque case a une narration → les bulles ne sortent pas du cadre → la fonction existe dans charts.py.

② Générer les images → <projet>/raw/<id>.png

Écrivez d'abord tous les prompts, puis générez toutes les images en une seule fois. Générer une image à la fois peut allonger le processus à une ou deux heures, et modifier les prompts en cours de route fait déraper le style.

python scripts/comic_gen.py <projet> --list     # Affiche les prompts non encore générés, ignore ceux déjà faits

Générez chaque image selon les prompts affichés, sauvegardez-les dans raw/. Utilisez obligatoirement la génération image-à-image (img2img) avec l'image de référence assets/reference/01-style-anchor.png, et réglez la similarité sur low.

python scripts/contact_sheet.py <projet>        # Compose une vue d'ensemble
python scripts/pipeline.py <projet> --stage image

Critères de validation de ② : sur la vue d'ensemble, vérifiez seulement deux choses : les personnages requis sont-ils présents ? et y a-t-il des zones noires ou blanches massives ? Tout le reste (quelques caractères épars sur l'image, une demi-tête de différence de taille, des lignes sales, une queue décalée de quelques dizaines de pixels) est ignoré : passez directement à l'étape suivante.

③ Production → final.mp4

python scripts/comic_run.py <projet>

Exécutez séquentiellement : narration vocale → couche de bulles / infographie → fond d'écran final → rendu trait par trait → composition verticale → sous-titres incrustés. Pour relancer une seule étape, utilisez le script comic_*.py correspondant.

④ Vérification

python scripts/verify_media.py --file <projet>/out/final.mp4 --expect <secondes>
ffmpeg -y -ss 3 -i <projet>/out/final.mp4 -vframes 1 <projet>/check/03.png

Extrayez deux images (à la 3ᵉ seconde et à 75 % de la durée de la case) et comparez : l'image bouge-t-elle ? la couleur de fond est-elle correcte ? les sous-titres sortent-ils du cadre ? Ensuite, extrayez la piste audio et écoutez-la les yeux fermés : si vous pouvez dire « qui veut quoi, quels événements se produisent, comment ça se termine », la vérification est réussie.

⑤ Livraison

<projet>/out/final.mp4. Si une version écran plat est demandée, utilisez out/story_flat.mp4.


Dix règles strictes

Les trois premières concernent l'histoire : enfreindre ces règles signifie qu'« après écoute, on ne sait pas de quoi il s'agissait ». Les sept suivantes concernent la production : les enfreindre signifie que l'image ou le son est erroné.

1. Remplissez d'abord story_line / question / answer. Si vous ne pouvez pas les remplir, n'écrivez pas de cases. Sans ces trois lignes, écrire huit cases pour découvrir qu'elles sont dispersées est la relecture la plus coûteuse.

2. Choisissez la structure narrative en fonction de la relation entre le protagoniste et l'obstacle. Ne collez pas le même gabarit de case à tous les sujets.

Protagoniste vs ObstacleStructure narrative
Un adversaire concret, allers-retoursAttaque → Contre-attaque → Escalade → Contre-attaque → Coup le plus dur → Contre-attaque
Son propre chemin est bloquéVieux métier qui meurt → Essaie plusieurs choses sans succès → Une chose inattendue surgit → Il mise tout → Réussit → Ne comprend ce qu'il vendait qu'après
Un phénomène inexplicable, on remonte à la sourceFait anormal → Trouve la personne → Ses difficultés à l'époque → Comment il a résolu
A atteint le sommet, renversé par un détail insignifiantApogée → Une fissure → Personne n'a pris au sérieux → Mauvais pari → Effondrement

Le nombre de cases suit l'histoire : 5 à 9 cases, toutes valables.

3. Ne numérotez pas des événements parallèles comme des « rounds ». Si remplacer « premier round » par « première fois » ne change rien à l'histoire, alors ce n'était pas un round, mais une étiquette collée — supprimez-la. De même, n'utilisez pas de jargon de commentateur comme « escalade », « apogée », « révélation », « fond de tiroir ». Le public entend des codes, pas du sens.

4. La narration doit être une histoire complète et compréhensible. Les dialogues doivent être prononcés. « Il a répondu quelque chose », « a approuvé deux mots », « une phrase l'a éclairé » — l'auditeur sait qu'on a parlé, mais pas ce qui a été dit. Répéter dans les bulles ce qui est déjà dans la narration n'est pas une erreur ; les sous-titres sont de toute façon une répétition de l'audio.

5. Le modèle génératif ne dessine que le trait. Les caractères sont superposés par code. Mettez dans le prompt « ne dessine aucun texte ». C'est une précaution, pas un critère d'acceptation de l'image.

6. Les bulles ne passent pas par le moteur de rendu. Le moteur binarise les couleurs en noir. Les bulles sont superposées au moment du compositing, avec un rythme contrôlé.

7. Ne transmettez pas element_plan. Si vous le transmettez, chaque objet est dessiné en un maximum de 1,6 seconde puis s'arrête ; la case entière est remplie en deux secondes. Sans element_plan, le budget temporel est réparti par racine carrée de la surface, la durée totale étant constante.

8. Utilisez obligatoirement la génération image-à-image, avec une similarité faible (0,3–0,5). Avec une similarité élevée, le modèle copiera la pose de l'image de référence, ignorant les actions que vous avez écrites.

9. Inscrivez les personnages dans characters. Utilisez {nom} dans les prompts. Entre deux personnes quelconques, au moins trois différences. Coiffure, barbe, vêtements, corpulence : décrivez tout en détail. Le protagoniste porte un accessoire de tête distinctif (turban/tissu, pas de couronne). Les couronnes carrées, diadèmes et casques sont réservés aux adversaires et aux soldats.

10. Utilisez colorkey + overlay pour les couleurs de fond. Incrustez les sous-titres au format ASS en déclarant PlayResX/Y. Avec blend=all_mode=multiply, la couleur de fond devient vert fluo. Le format SRT, interprété par libass, tombe dans un repère 384×288, et les caractères sortent du cadre.


Que lire en cas de problème ?

SituationLire
Comment transformer un sujet en histoire, que mettre dans chaque case, comment finirreferences/story.md
Écrire des prompts, définir les personnages, disposition des bulles, TTS, paramètres de rendu et de compositionreferences/production.md
Image / son / durée erronésreferences/troubleshooting.md
Modèles et contraintes inverses pour les promptsreferences/prompt-recipes.md
Syllabes de narration / timbre vocalreferences/voice-design.md
Erreur 403 d'edge-ttsreferences/apiz-tts-fallback.md

Structure des dossiers

<projet>/
├── story.json      Un seul fichier de configuration : titre, trois lignes de l'histoire, narration/bulles/prompt de chaque case
├── charts.py       Fonctions de dessin pour les cases infographiques (uniquement si des cases chart sont nécessaires)
├── raw/            Images originales issues du modèle génératif ← vous les placez ici
├── boards/ bubbles/ charts/ audio/ out/    ← Produits des scripts
└── subs.ass

Première utilisation

bash scripts/setup.sh                                          # macOS / Linux / Git Bash
powershell -ExecutionPolicy Bypass -File scripts/setup.ps1      # Windows
python scripts/self_test.py                                    # 6 auto-tests, à lancer une seule fois

Skills associés