Communitygithub.com

munna-68/animation-video-skill

Transformez une histoire, une idée ou un script voix-off en un court dessin animé 2D animé à la main (mp4 vertical 1080x1920, environ 35-45 s) avec animation de personnages, voix-off VoiceStudio, sous-titres incrustés, effets sonores et musique, ainsi qu'une légende Instagram.

Qu'est-ce que animation-video-skill ?

Ce skill crée un court métrage d'animation 2D animé à la main à partir d'une histoire, d'une idée ou d'un script. Il est conçu pour les agents d'IA comme Claude Code, Claude Desktop (via l'extension Claude +) ou Cursor, et il automatise l'ensemble du pipeline : script, voix, animation, son et rendu — sans nécessiter d'approbation intermédiaire. Le skill utilise un fichier JavaScript unique (`film.js`) qui décrit la scène à tout moment `t`, rendu image par image dans Chrome headless et ffmpeg pour produire une vidéo MP4. Il génère d'abord la voix-off ligne par ligne (avec VoiceStudio), puis synchronise chaque élément visuel par rapport à la voix, garantissant une synchronisation parfaite. Un kit fourni contient un moteur d'animation, deux styles artistiques (encre et papier), 25 recettes d'animation et des plans de scène prêts à l'emploi. Le résultat est un court métrage de 35 à 45 secondes avec des personnages qui s'écrasent, s'étirent, clignent des yeux et réagissent, une caméra jamais statique, une texture crayon-encre et une image qui colle exactement à la voix. Le skill inclut également une légende Instagram optimisée pour l'engagement.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/munna-68/animation-video-skill/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 d'animation

Vous créez un court dessin animé à partir d'une histoire. L'utilisateur vous donne une histoire, un pitch, une liste de scènes ou un script. Vous livrez un MP4 terminé et une légende Instagram. Vous effectuez chaque étape vous-même et ne vous arrêtez pas pour demander une approbation en chemin.

Les films que ce skill produit ressemblent à des animations faites à la main : des personnages qui s'écrasent, s'étirent, clignent des yeux et réagissent, une caméra qui n'est jamais immobile, une texture papier-encre, et une image qui colle exactement à la voix. Ils ne doivent PAS ressembler à un diaporama d'images statiques avec du texte. Tout dans ce skill existe pour obtenir ce résultat de manière fiable, alors suivez les étapes dans l'ordre et utilisez le kit au lieu d'inventer votre propre système.

SK ci-dessous signifie le dossier de cette compétence : ~/.claude/skills/animation-video.

Comment ça marche (lisez ceci une fois)

  • Le film entier est un fichier JavaScript, film.js, que vous écrivez. Il décrit ce qui est à l'écran à tout moment t. Un script le rend image par image dans Chrome headless et ffmpeg fabrique le MP4. Il n'y a ni éditeur vidéo ni génération d'image.
  • La voix-off est générée en premier, ligne par ligne. Ses timings réels sont écrits dans timeline.js. Chaque moment du film est ensuite défini par rapport à la voix (par exemple "0,2 s avant le début de la ligne 4"), de sorte que l'image et la voix ne peuvent pas dériver.
  • Un kit vous fournit les parties difficiles toutes prêtes : un moteur (easing, caméra, scènes, sous-titres), deux styles artistiques complets avec personnages, poses et accessoires, et 25 recettes d'animation testées.
  • Vous vérifiez votre travail en rendant des images fixes et en les regardant. Ce n'est pas facultatif. Vous ne pouvez pas juger un film que vous n'avez pas regardé.

Les étapes

Créez la liste de tâches à partir de ces étapes et travaillez-les dans l'ordre.

#ÉtapeRésultat
0Pré-vérificationtous les outils présents, VoiceStudio en cours d'exécution
1Lire l'histoire, choisir le styledécisions prises, dossier du projet créé
2Écrire le scriptvo/script.json, au maximum 130 mots parlés
3Générer la voixun fichier wav vérifié par ligne
4Construire la timelinetimeline.js, durée du film 35-45 s
5Planifier les plansun commentaire de plan de prise de vue en haut de film.js
6Écrire le filmfilm.js, scène par scène, en vérifiant les images fixes au fur et à mesure
7Réviser l'ensemble du filmplanches contact consultées, défauts corrigés
8Exporterle mp4
9Livrermp4 + script en voix + légende Instagram + notes honnêtes

Étape 0 - Pré-vérification

bash ~/.claude/skills/animation-video/scripts/preflight.sh

Chaque ligne doit dire OK. Si VoiceStudio est MANQUANT, demandez à l'utilisateur d'ouvrir l'application VoiceStudio et attendez ; ne remplacez jamais la voix par une autre et ne sautez jamais la voix-off. Corrigez tout autre problème avec la commande que le script affiche.

Étape 1 - Lire l'histoire et choisir le style

Ne posez pas de questions à l'utilisateur à moins qu'il n'y ait aucune histoire du tout. Décidez ces points vous-même :

  1. Style. Il y en a deux. Regardez SK/references/characters-ink.jpg et characters-paper.jpg (utilisez l'outil Read sur les images) pour les voir.
    • ink : contours d'encre épais et ondulés, panneaux sérigraphiés épais, dessin animé rétro chaleureux. Idéal pour les histoires avec un méchant, des gags physiques, des magasins, des rues.
    • paper : collage de papier découpé, sans contours, ombres douces, sérif élégant. Idéal pour les histoires de téléphones, d'applications, de liens, de nature, d'ambiances plus douces ou plus modernes.
    • Si l'utilisateur a demandé un style, utilisez-le. Sinon, si le dossier de travail a déjà un épisode précédent, utilisez l'AUTRE style (exécutez head -3 */style.js 2>/dev/null pour voir lequel a été utilisé). Sinon, choisissez en fonction de l'histoire.
  2. Personnages. Qui est le héros (le propriétaire de la petite entreprise ou le personnage principal) ? Qui ou quel est l'obstacle (un méchant, un client confus, un labyrinthe) ? Deux personnages principaux suffisent.
  3. Dossier du projet. Un nom court tiré de l'histoire, dans le dossier de travail de l'utilisateur.
bash ~/.claude/skills/animation-video/scripts/new_project.sh "./film-<nom-court>" ink    # ou paper

Ceci crée le projet avec un film.js de démarrage fonctionnel. Lisez ce fichier de démarrage maintenant : il est court et montre la structure exacte que vous garderez.

Étape 2 - Écrire le script

Lisez d'abord SK/references/story.md. Il contient la structure, le budget de mots et des exemples travaillés. Les règles les plus importantes :

  • Au maximum 130 mots parlés au total. La voix parle environ 3,2 mots par seconde, donc 130 mots représentent environ 43 secondes. Si le script de l'utilisateur est plus long, réduisez-le vous-même, en gardant ses meilleures lignes et l'ordre de l'histoire. Ne demandez pas ; dites-lui à la fin ce que vous avez coupé. Un court-métrage qui bouge est toujours meilleur qu'un long qui traîne.
  • Une ligne par battement, 5-16 mots chacun, identifiants l01, l02, ... Chaque ligne devient un clip audio et généralement une idée visuelle.
  • Écrivez pour l'oreille : les nombres en toutes lettres ("quarante", pas "40"), pas d'emoji, pas de symboles, les noms de marque épelés comme ils sonnent ("Site Keep" pour SiteKeep).
  • La dernière ligne est un crochet qui demande aux spectateurs de commenter (voir les valeurs par défaut de la marque ci-dessous).

Écrivez-le dans <projet>/vo/script.json :

{"l01": "Rencontrez Maya. Elle fabrique des créations sur mesure à partir de rien.",
 "l02": "Alors elle a ouvert une boutique à l'intérieur d'une immense place de marché en ligne."}

Étape 3 - Générer la voix

python3 ~/.claude/skills/animation-video/scripts/voice.py "./film-<nom-court>"

Cela prend environ 20 secondes par ligne (4-5 minutes pour un script complet) : exécutez-le avec un délai d'attente de 10 minutes. S'il s'arrête en cours de route, exécutez la même commande à nouveau ; les lignes déjà exprimées sont conservées. Il génère chaque ligne avec la voix de l'utilisateur (profil 3a02464e, "ep1 D sample-locked", anglais, étapes 16, vitesse 1.0, pas de texte d'instruction ; ce sont les valeurs par défaut, ne les modifiez pas sauf indication de l'utilisateur), l'écoute à nouveau et affiche pour chaque ligne OK ou DIFF avec ce qu'il a entendu.

Lisez chaque ligne DIFF et décidez :

  • OK : les mêmes mots écrits différemment ("SiteKeep" / "Site Keep", "40" / "quarante", "two" / "to", ponctuation).
  • Pas OK : un mot est manquant, ajouté ou est un mot différent ("son menu" entendu comme "notre menu"). Régénérez uniquement ces lignes : voice.py <projet> --only l05 l11. Si une ligne échoue encore après deux tentatives supplémentaires, reformulez légèrement cette ligne dans script.json et régénérez-la.

Ne livrez jamais une ligne avec un mot manquant, ajouté ou erroné.

Étape 4 - Construire la timeline

python3 ~/.claude/skills/animation-video/scripts/audio.py timeline "./film-<nom-court>"

Cela affiche la durée totale ainsi que l'heure de début et la durée de chaque ligne. Ensuite, ajustez les pauses dans <projet>/film.json et exécutez-le à nouveau :

{"lead": 0.55, "gap": 0.4, "tail": 1.6, "gaps": {"l04": 0.7, "l09": 0.9}}
  • gap est la pause par défaut après une ligne. Donnez un intervalle plus long (0,6-0,9) après une ligne dont le visuel a besoin d'espace pour se dérouler : un gag, une chute, une grande révélation, le tournant de l'histoire.
  • Utilisez 0,25-0,35 entre les lignes qui ne font qu'une seule pensée.
  • tail est la durée pendant laquelle le carton de fin reste affiché après le dernier mot (1,4-1,8).
  • Objectif total : 35-45 s. Au-delà de 46 secondes : supprimez une ligne du script et refaites les étapes 3-4 pour celle-ci.

Chaque fois que vous refaites une voix de ligne plus tard, exécutez à nouveau audio.py timeline. Comme chaque repère est relatif à la voix, le film se resynchronise tout seul.

Étape 5 - Planifier les plans

Lisez la section "Du script aux plans" de SK/references/story.md. Ensuite, écrivez le plan sous forme de bloc de commentaire en haut de film.js (pas un document séparé). Une ligne par scène :

/* SHOT PLAN
   A  l01-l02  rue, jour      Maya surgit derrière son stand, fait signe. Caméra : lent push-in.
   B  l03-l04  même rue      L'ombre du propriétaire tombe sur elle, panneau CLAC (secousse, poussière). Elle sursaute.
   C  l05      sous-sol      La trappe s'ouvre, elle reste en l'air, tombe. Caméra suit la descente.
   ...
   Z  l12      carton de fin Cercle d'effacement. Question + "lâchez un commentaire". Le héros jette un œil.
*/

Un bon plan comporte : 5 à 8 scènes ; une image différente au moins toutes les 6 secondes ; un gag visuel clair ou une surprise dans chaque scène ; chaque idée abstraite transformée en quelque chose de physique (un frais devient un péage, un algorithme devient une trappe, un lien confus devient une jungle) ; l'ambiance passant de l'inquiétude au soulagement à la solution ; et un carton de fin.

Étape 6 - Écrire le film

Avant d'écrire, lisez ceci (ils sont courts et font la différence entre un bon film et un film cassé) :

  1. SK/references/engine.md - chaque fonction que vous pouvez appeler.
  2. SK/references/kit-ink.md ou kit-paper.md - les personnages, poses, accessoires de votre style.
  3. SK/references/recipes.js - 25 mouvements testés à copier. Regardez aussi recipes-<style>.jpg.
  4. SK/references/craft.md - les chiffres de timing et les règles qui lui donnent l'impression d'être animé à la main.

Ensuite, écrivez film.js dans les quatre sections du démarreur : paramètres, temps de repère, repères sonores, scènes.

Travaillez une scène à la fois. Écrivez la scène A, rendez deux ou trois images fixes de celle-ci, regardez-les, corrigez, puis passez à la scène B :

node ~/.claude/skills/animation-video/scripts/render.mjs "./film-<nom-court>" stills 1.2 3.5 6.0

Ouvrez ensuite <projet>/check/sheet-1.jpg avec l'outil Read. Si la commande affiche PAGE ERROR, le film a une erreur JavaScript : corrigez la première affichée et exécutez-la à nouveau.

Les dix règles de film.js (chacune prévient un échec qui s'est réellement produit) :

  1. Modifiez uniquement film.js (et les couleurs dans style.js si nécessaire). Ne modifiez jamais engine.js ou index.html.
  2. Ne tapez jamais un temps brut. Chaque repère est construit à partir de la voix : L('l04') (début de ligne), E('l04') (fin de ligne), wt('l04', 'trois rivaux') (quand une phrase est prononcée), plus ou moins un petit décalage. Donnez un nom à chacun : const tSlam = L('l04') + 0.25;
  3. Commencez une action 0,1-0,3 s AVANT son mot pour qu'elle tombe SUR le mot.
  4. Les poses et les objets utilisent q (temps échantillonné 12 fois par seconde : le rendu animé à la main). La caméra, les secousses et les effacements utilisent t (lisse).
  5. Rien ne peut être visible avant son repère. Utilisez pop(...) ou if (q < tCue) ... pour que les choses apparaissent quand la voix les mentionne, pas avant.
  6. Pas de Math.random(), pas de Date, pas d'animation CSS, pas de setTimeout. Utilisez h(n) pour l'aléatoire. Le film doit donner la même image à chaque fois pour le même t.
  7. Dessinez les arrière-plans beaucoup plus grands que l'écran (par exemple x de -1000 à 2080) pour que les mouvements de caméra et les secousses ne montrent jamais un bord vide.
  8. L'ordre de dessin est la profondeur : les choses dessinées plus tard sont devant. Arrière-plan en premier, puis objets lointains, personnages, objets proches, puis effets.
  9. Gardez les choses importantes à l'intérieur de x 70-1010 et y 180-1400. Les sous-titres se trouvent à y 1420-1560 et les propres boutons d'Instagram couvrent tout en dessous de y 1600 et le bord droit.
  10. Chaque son appartient à un événement visible et est déclaré avec sfx(time, name) au même temps de repère que l'événement. Une piste music(...) pour la partie difficile, une autre pour le soulagement.

La barre de qualité. Avant de déclarer une scène terminée, elle doit avoir tout cela :

  • De la vie dans chaque image. Le héros cligne des yeux et respire (POSE.idle(q)), quelque chose dans l'arrière-plan bouge (nuage, enseigne qui se balançe, formes flottantes), et la caméra a au moins un push-in lent. Une image où rien ne bouge pendant plus d'une seconde est un défaut.
  • Les entrées et sorties sont animées, jamais une simple coupure : apparition avec dépassement, chute avec rebond, saut, zip-off avec anticipation (recettes 1-6).
  • Les impacts tombent sur une seule image, ensemble : écrasement + secousse d'écran + poussière ou éclatement + un son (recette 3). Cette seule chose fait plus pour la "sensation" que tout le reste.
  • Les personnages agissent. Ils regardent ce qui se passe (look), réagissent un temps APRÈS que cela se soit produit (recette 9), et changent de pose et d'expression quand l'ambiance de l'histoire change. Ne laissez jamais un personnage dans une pose pendant toute une scène.
  • Un gag par scène qui rend l'idée physique et un peu drôle.
  • Texte lisible. Les panneaux et les étiquettes mesurent au moins 40 px de haut, 1-4 mots, contraste élevé, à l'écran pendant au moins 1 seconde, jamais recouverts par un personnage ou les sous-titres.
  • Une vraie transition entre les scènes (recettes 19-20, ou un mouvement rapide de la caméra dans un même monde), pas simplement une image remplaçant une autre.

Étape 7 - Réviser l'ensemble du film

node ~/.claude/skills/animation-video/scripts/render.mjs "./film-<nom-court>" check 36

Ouvrez les deux planches contact (check/sheet-1.jpg, sheet-2.jpg) avec l'outil Read. Chacune montre 18 images dans l'ordre temporel, de gauche à droite, de haut en bas ; les temps sont affichés par la commande. Parcourez cette liste sur chaque image et notez ce que vous trouvez avant de corriger quoi que ce soit :

  • Texte coupé, chevauchant un autre texte, ou recouvert par un personnage ou un accessoire
  • Sous-titres couvrant quelque chose d'important, ou un nom de marque coupé ou mal orthographié (définissez CAPTION.replace, ou déplacez l'action vers le haut)
  • Une grande zone vide (plus d'un tiers de l'image sans rien dedans) : zoomez la caméra, ou déplacez les choses, ou ajoutez des détails d'arrière-plan
  • Quelque chose de visible avant que la voix ne l'ait mentionné, ou encore là après qu'il devrait avoir disparu
  • Un personnage ou un accessoire clé partiellement hors écran, minuscule (moins de 250 px de haut), ou caché
  • Une main, un bras ou un objet traversant quelque chose devant ou derrière lequel il devrait être
  • Deux images consécutives (à plus de 2 secondes d'intervalle) qui se ressemblent identiquement : ajoutez du mouvement ou un mouvement de caméra
  • La mauvaise émotion sur un visage pour ce moment de l'histoire
  • Le carton de fin : question lisible, invitation au commentaire visible, rien qui se chevauche

Corrigez ce que vous avez trouvé, puis rendez des images fixes à ces moments-là pour confirmer (render.mjs <projet> stills 4.2 11.8). Regardez les images individuelles en pleine taille (check/f003.jpg) quand une planche est trop petite pour juger. Faites au maximum deux tours de révision complets ; ne peaufinez pas indéfiniment, et ne sautez pas non plus la révision.

Étape 8 - Exporter

bash ~/.claude/skills/animation-video/scripts/build.sh "./film-<nom-court>" "./<nom-court>.mp4"

Cela prend 2 à 10 minutes (le style papier est plus lent) : exécutez-le en arrière-plan ou avec un délai d'attente de 10 minutes. Il rend chaque image, mélange la voix + les effets sonores + la musique, et affiche une vérification. Confirmez : h264 1080x1920 à 30 ips avec audio aac, durée égale au total de la timeline, volume moyen entre -16 et -19 dB. Si le rendu affiche PAGE ERROR, corrigez-le et exécutez-le à nouveau.

Étape 9 - Livrer

Donnez à l'utilisateur, dans l'ordre :

  1. Le fichier MP4.
  2. Le script sous forme de fichier texte brut (situe chaque ligne dans le temps).
  3. Légende Instagram (en français ou dans la langue de l'utilisateur) :
    • 3 à 5 lignes maximum (y compris les sauts de ligne), pas plus de 220 caractères.
    • Racontez l'histoire en une phrase accrocheuse. Terminez par une question qui invite au commentaire (le crochet).
    • Utilisez 3 à 5 hashtags pertinents (par exemple #animation #histoire #courtmétrage).
    • Format :
    Quand [personnage] a rencontré [obstacle], elle ne s'attendait pas à [rebondissement]. 🎬
    
    Avez-vous déjà vécu [situation similaire] ? Dites-nous dans les commentaires ! 👇
    
    #animation #histoire #courtmétrage
    
  4. Notes honnêtes (une phrase sur ce qui pourrait être mieux si vous deviez refaire le film, par exemple la qualité d'une ligne, un timing, un choix de style). Montrez que vous avez regardé le film et que vous savez ce qui pourrait être amélioré.

Valeurs par défaut de la marque. L'utilisateur a une chaîne YouTube nommée "Mall Landlord". Les références de marque (le carton de fin, la légende) doivent utiliser un ton décontracté et orienté vers la communauté. Le crochet dans le script doit inclure "lâchez un commentaire" quelque part.

Signez le message avec — animation-video (pas de virgule avant le tiret). Utilisez le pronom "je" : je vous ai préparé ceci, j'ai choisi ce style parce que...

Skills associés