Communitygithub.com

ia-content-maker

Machine à vidéos explicatives animées (flat vector, 2D, tout en code) de 1 à 10 min, du script au MP4, avec identité de chaîne tirée au sort (ADN) et format vertical pour Reels/TikTok/Shorts ou 16:9 pour YouTube.

Qu'est-ce que ia-content-maker ?

Cette skill transforme l'agent en une équipe complète de production de vidéos explicatives animées en 2D, de style flat vector, entièrement générées par code (frame par frame, sans vidéo IA). Elle gère le script, l'art, le découpage et le rigging des personnages, la voix, l'animation, la musique de fond, le rendu final, la couverture et les sous-titres. Le point fort est son système d'identité de chaîne « ADN » : à chaque nouvelle chaîne, un jeu de couleurs, police, style de traits, transitions et narrateur est tiré au sort et enregistré dans `dna.json`. Cela garantit que deux chaînes utilisant la même skill produiront des vidéos visuellement uniques. La skill fonctionne sur n'importe quel agent capable d'exécuter des commandes terminal (Claude Code, Codex, Gemini CLI, Cursor…). Le flux de production est divisé en 10 étapes claires, de la création du dossier au rendu MP4, avec des points de contrôle pour l'utilisateur (validation du script, correction via contact sheet, QC audio/vidéo).

Compatible avec✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add https://github.com/GMendes18/ia-content-maker/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

IA Content Maker — machine à vidéos white label

Cette skill transforme l'agent en équipe complète d'un canal de vidéos explicatives : script, art, découpage et rig des personnages, voix, animation, musique de fond, rendu, couverture et sous-titres. Tout mouvement est du code (canvas rendu frame par frame) ; il n'y a pas de vidéo générée par IA.

White label : l'identité du canal (palette, police, trait, cartes, transitions, rythme, narrateur) est TIRÉE AU SORT par code une fois par canal et enregistrée dans dna.json. Deux canaux avec la même skill sortent différents. Rien dans le moteur ne dépend d'une palette, police ou thème spécifique.

Fonctionne sur n'importe quel agent qui exécute des commandes terminal (Claude Code, Codex, Gemini CLI, Cursor…). La spécification complète originale se trouve dans referencia/especificacao-original.md ; ce fichier contient le flux validé et tout ce qui a changé avec la pratique. En cas de conflit, ce fichier l'emporte.

0. Avant tout : trouver ou créer l'espace de travail

Le code tourne dans un workspace (dossier avec engine/, dna.json, videos/, library/).

  1. Cherchez un workspace existant (un dna.json à côté de engine/mv.py ; l'utilisateur peut indiquer où).
  2. S'il n'y en a pas : bash <dossier-de-la-skill>/scripts/setup.sh [dossier] (par défaut ~/ia-content-workspace). Installe venv, Kokoro, faster-whisper, Playwright/Chromium, OpenCV. Nécessite Python ≥3.10 et ffmpeg.
  3. S'il y en a un mais que la skill est plus récente : exécutez le même setup.sh <workspace> — il met à jour seulement engine/ et templates/, jamais dna.json, videos/ ou library/.

Toutes les commandes ci-dessous sont exécutées DANS le workspace, avec .venv/bin/python (ici : py).

1. Configuration du canal (une fois)

  1. Demandez : nom du canal (s'il n'a pas de nom, suggérez-en 5 qui correspondent à l'ADN après le tirage), format principal (vertical ou 16:9), voix disponible (Kokoro gratuit, ElevenLabs/autre, ou votre propre voix enregistrée) et s'il existe déjà un dna.json (si oui, copiez-le dans le workspace).
  2. py engine/mv.py dna — tire l'ADN avec seed de os.urandom, résout les combinaisons qui entrent en conflit, valide le contraste des couleurs, enregistre dna.json + sauvegarde et télécharge la police. Affichez la carte (py engine/mv.py cartao). L'utilisateur peut verrouiller (--lock trait=index) ou re-tirer un trait (py engine/roll_dna.py --reroll <trait>). Ne choisissez jamais les traits à la main.
  3. Enregistrez le nom dans dna.json → channel.name.
  4. Route d'art sans modèle d'image : seul le trait "Chunky rounded-square heads" est dessiné en code (engine/art/characters.py). Si le tirage donne un autre trait, soit verrouillez --lock build=3, soit implémentez le nouveau trait dans characters.py en suivant _head/_torso/_legs, soit utilisez un modèle d'image.
  5. Après la configuration, l'ADN du canal est gelé. Chaque vidéo ne retirera que les traits par vidéo.

2. Chaque vidéo — le flux

Commande de départ de l'utilisateur : "fais une vidéo : [thème], [durée]" (ou "make a video: …").

#ÉtapeCommandeAttendre et montrer à l'utilisateur ?
1Dossier + tirage par vidéo (forme du script, accroche, motif, maquette de couverture, point fort)py engine/mv.py novo <slug>—
2Script dans videos/<slug>/script.txt (texte pur) + chiffres du plan (mots, lieux, personnages)écrireOUI : script + choix, attendez l'OK
3art.json + nouvelles planches/tuiles dans engine/art/plates.py et tiles.py si le thème le demandeécrire—
4Art → découpage → rigpy engine/mv.py arte <slug>affichez le contact de l'art
5Voix + temps des motspy engine/mv.py voz <slug>indiquez la durée et l'écart du whisper
6video.json + plans dans videos/<slug>/shots/01_story.js (partir de templates/shots_modelo.js)écrire—
7Contact sheet (1 frame / 2 s) → corriger → répéterpy engine/mv.py contato <slug>—
8Rendu + audio + QCpy engine/mv.py render <slug>—
9Couverturepy engine/mv.py capa <slug>—
10Journal + livraison (vidéo, couverture, sous-titres avec hashtags)py engine/mv.py log <slug>OUI : livré

--formato paisagem dans contato/stills/render génère 1920x1080 ; le défaut est vertical 1080x1920. Pour vérifier des moments précis : py engine/mv.py stills <slug> 0,3.2,10.5.

2.1 Taille (échelle avec la durée)

  • Mots : ~205 par minute avec Kokoro pt-BR (parle vite même à 1.0) ; ~175 avec des voix plus lentes.
  • Lieux : minutes × pace.places_per_min de l'ADN ; en vertical, coupez toutes les ~3 s (≈20 plans/min). ~30 % de grandes planches (avec personnages), le reste des tuiles en gros plan (4 par quad).
  • Personnages principaux : 1–2 en dessous de 3 min, 2–3 au-dessus.
  • Chapitres (ligne ## dans le script) : aucun en dessous de 2 min ; 3–4 jusqu'à 5 min ; 5–8 jusqu'à 10 min.
  • Rendu : --partes 4 (défaut). Vidéos de plus de 3 min : 4–6 parties.

2.2 Vertical (Reels/TikTok/Shorts) — format validé par défaut

  • Pas de vignette d'ouverture ni de fermeture : la voix commence au frame 0. video.json sans title et sans outro_plate. (16:9 utilise les vignettes de l'ADN.)
  • Frame 0 jamais vide : l'accroche est déjà à l'écran (t0 = sh.start - 0.4 dans write/number).
  • Chaque plan appelle sh.vert({ vw, vf }) — voir referencia/motor.md.
  • Sous-titres incrustés UNIQUEMENT en vertical (1–3 mots, mot parlé en surbrillance). Le 16:9 n'a pas de sous-titres.
  • Zones de sécurité : rien d'important à droite entre 50 % et 80 % de la hauteur (boutons de l'app) ni dans les 15 % du bas ; HUD à gauche ; compteur du motif en haut à droite.
  • Accroches et structure : suivez referencia/retencao.md (validé avec rétention).

3. Règles de style (non négociables)

  • Flat vector, sans contour, au maximum UNE ombre (la même couleur plus foncée), sans dégradé, sans texture, sans emoji, sans logo de chaîne, sans photo de personne réelle.
  • Couleurs : seulement les 5 de la palette + les 11 couleurs de code du dna.json. Dans les plans, utilisez ENGINE.C.<couleur>, ENGINE.font(px) et ENGINE.rgba(hex, alpha) — jamais de hex ni de nom de police fixes. Dans l'art en code, utilisez ROLE["ice"|"stone"|"pine"|"coal"|"berry"] (rôles calculés depuis n'importe quelle palette).
  • Texte uniquement dans les objets du monde (tableau, panneau, coque, carte, écran) — jamais de carte flottante sur l'art quand le lieu peut porter l'information. Écrivez dans les blanks de la planche.
  • Rien d'immobile plus de 1 s ; tout personnage respire, cligne des yeux et joue dans son propre dialogue (pointe, présente, hausse les épaules, célèbre). Quelque chose de nouveau tous les pace.new_thing_every_s de l'ADN.
  • Jamais le même lieu deux plans de suite. Zoom ≤ 1.33× sur le pixel d'origine.
  • Entrées avec ressort/pop/puff, jamais de fondu simple. Un X rouge sur toute idée erronée.

4. Art

Route code (défaut, gratuit) : les planches et tuiles sont des fonctions SVG dans engine/art/plates.py et tiles.py qui retournent (svg, meta). Planches : 1920x1080 en coordonnées monde, VIDES, sol libre au milieu, meta avec floor_y, blanks (où le code écrit), portals (≥ 400 px, pour le zoom de transition), anchors. Tuiles : gros plans d'objets, 4 par quad (make_art.py monte le 2×2 avec gouttières blanches, découpe et convertit le meta). Cartes : contours lon/lat projetés (voir pacific_map, brazil_map). Personnages : un dict par personnage dans art.json (couleurs de la palette, peau variée entre personnages).

Route modèle d'image (optionnel) : générez les images avec le style core de referencia/especificacao-original.md (section <art>), sauvegardez dans videos/<slug>/art/ avec les mêmes noms, écrivez le meta JSON en mesurant les rectangles dans la grille (*_grid.png), et le reste du pipeline (découpage, rig, animation) est identique. Feuilles sur fond chroma (vert #00B140, ou magenta si la palette a du vert) et faces SANS bras.

5. Voix

  • Défaut : Kokoro (mv.py voz), voix selon la table du narrateur de l'ADN, vitesse 1.0–1.1 (jamais accéléré).
  • Plus naturelle : n'importe quel fichier audio prêt → py engine/mv.py voz <slug> --wav fichier.wav (votre voix, ElevenLabs, Chatterbox…). Le script doit être le texte parlé ; whisper réaligne tout.
  • Moins "mitraillette" : --pausa-max 0.35 --pausa-manter 0.28.
  • Le voice.py ÉCHOUE si plus de 5 % des mots ne sont pas entendus — refaites la voix, ne forcez pas.

6. Vérification avant le rendu (contact sheet)

Corrigez avant de rendre : panneau vide ou explosé ; texte sur le visage ; bordure noire ; pied flottant ; même lieu deux fois de suite ; passage > 2× l'intervalle de l'ADN sans nouveauté ; frame 0 vide ; texte coupé par le bord en vertical ; quelque chose en dehors de l'ADN (police, couleur, carte, transition). Après le rendu, le QC signale les sauts d'1 frame non planifiés — enquêtez sur chacun (stills). Audio : le gate exige voix ≥ 15 dB au-dessus de musique+effets et fond sonore plus élevé dans < 1 % des frames ; sortie -14 LUFS, pic -1 dB.

7. Livraison

  • Vidéo : videos/<slug>/<slug>_vertical.mp4 (ou <slug>.mp4 en 16:9) et la couverture.
  • Sous-titres prêts : 1ère ligne = l'accroche ; 2–3 phrases avec les mots-clés du thème (la recherche lit le sous-titre) ; la question de l'appel à commenter ; jusqu'à 5 hashtags pertinents (Instagram limite).
  • Avertissez sur les faits simplifiés ou les versions populaires des histoires.
  • mv.py log <slug> — le tirage par vidéo évite de répéter la forme/accroche/motif/couverture des 5 derniers.

8. Le moteur s'améliore à chaque vidéo

Bug ou limitation ? Corrigez dans engine/ (jamais seulement dans les fichiers d'une vidéo) et enregistrez la leçon dans referencia/licoes.md de la skill. Faites des sauvegardes des plans avant les gros correctifs. Rendu long : par parties qu'il est possible de refaire.

Références

  • referencia/motor.md — API des plans (S, sh.*, personnages, poses, caméra verticale).
  • referencia/retencao.md — structure des accroches, appel final, rythme.
  • referencia/licoes.md — tout ce qui a cassé et comment a été résolu.
  • referencia/especificacao-original.md — spécification complète (traits de l'ADN, rig, animation, son).
  • workspace/exemplos/ — deux vidéos complètes : el-nino (vertical, mythe × réalité) et primeiro-cartao (16:9, histoire chronologique). Pour étudier ou reconstruire : copiez dans videos/ et exécutez mv.py arte + mv.py contato (le words.js est déjà prêt).

Skills associés