Communitygithub.com

video-craft

Transformez n'importe quel sujet en vidéo narée, avec sélection automatique du moteur de rendu selon la forme du contenu.

Qu'est-ce que video-craft ?

video-craft est un skill conçu pour les agents IA (comme Claude Code, Cursor, etc.) qui permet de créer des vidéos narrées à partir de n'importe quel sujet. Il analyse d'abord la forme du contenu (explication de concept, dérivation mathématique, démonstration en terminal, promotion produit) et route automatiquement vers le moteur de rendu le plus adapté : Remotion pour les motion graphics, Manim pour les formules continues, asciinema pour les démos en terminal (V2), ou Hyperframes pour les vidéos promotionnelles (V3). Le skill inclut une couche commune indépendante du moteur (principes de recherche, d'écriture de narration, construction de timeline TTS, système de tokens de storyboard, scripts de lecture d'images pour le contrôle qualité), un arbre de décision de routage, des backends enfichables, et des protocoles de construction parallèle et de QC multi-agents. Il garantit que chaque vidéo est originale, factuelle, et suit un fil conducteur unique, avec des points de validation obligatoires (durée, langue, narration, échantillon de 30 secondes) pour éviter des révisions coûteuses après le rendu final.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add FnSGit/video-craft-skill

Demander à votre IA préférée

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

Documentation

Que fait video-craft ?

Transformez n'importe quel sujet en vidéo. On choisit d'abord le moteur de rendu selon la forme du contenu, puis on suit la chaîne de production commune.

Anciennement anything2explainer (uniquement des vidéos Remotion de vulgarisation). Cette refactorisation extrait les éléments indépendants du moteur dans core/, isole ce qui est spécifique au rendu dans backends/, et ajoute routing/ pour la sélection du backend.

Quand l'utiliser

  • L'utilisateur demande une vidéo d'explication, de dérivation, de didacticiel ou de promotion sur un sujet ; ou un article à transformer en vidéo.
  • Ne convient pas : reproduire une vidéo existante, vidéo avec un vrai présentateur, contenu principalement filmé.

Quatre points de validation (doivent attendre la réponse de l'utilisateur)

  1. Durée, langue + recommandation du backend (demander en même temps que la phase 1 de recherche) : Donner à l'utilisateur le résultat de routing/router.md et le tableau des durées, une question pour deux réponses. Si l'utilisateur rejette la recommandation, suivre la sienne.
  2. Approbation du script narratif (phase 2, avant le doublage) : Texte complet + division en chapitres + nombre de mots/durée estimée, demander « Ce script vous convient-il ? ». Les noms des chapitres et les titres des sections HUD doivent apparaître sur une ligne séparée. Pour les vidéos multi-chapitres, lister côte à côte les deux phrases de transition de chaque chapitre. Après approbation, les numéros d'image sont tous figés ; ne plus modifier les mots.
  3. Doublage (avant d'exécuter tts_build.py) : Par défaut, chinois avec edge-tts Yunxi, anglais avec kokoro am_liam. Si l'utilisateur a une préférence, il peut fournir son propre fichier wav dans script/audio.wav et remplir manuellement la timeline.
  4. Échantillon des 30 premières secondes (phase 5a, avant d'envoyer les autres groupes) : Demander « Le style / la taille de police / le rythme de la voix / le tempo vous conviennent-ils ? ». Modifier à ce stade ne coûte qu'un groupe ; modifier après le rendu complet coûte tout.

Processus (8 phases)

Phase 0  Création du projet → Appeler new_project.sh du backend correspondant selon le routage
Phase 1  Recherche          → core/research-brief.md (1 agent en parallèle)           【Point de validation 1】
Phase 2  Narration + timeline → core/narration-guidance.md + tts_build.py             【Points de validation 2, 3】
Phase 3  Storyboard         → Écrire selon le format du backend, core/render_storyboard.py
Phase 4  Éléments graphiques → Compléter selon le backend (remotion: ui.tsx / manim: figures.py)
Phase 5a Échantillon        → Faire d'abord le groupe 1, preview.sh sort les 30 premières secondes 【Point de validation 4】
Phase 5b Construction parallèle → Chaque groupe a 1 agent, utiliser le fichier agent-build-rules.md du backend
Phase 6  Rendu              → render.sh du backend → mp4 + fin_frames/
Phase 7  QC et réparation   → core/motion_check.py + frame_metrics.py + qc-rules du backend
Phase 8  Livraison          → Livraison.md (enregistrer le backend utilisé et la raison du choix)

Routage : d'abord choisir le backend

Lire impérativement routing/router.md. Résumé :

Forme du contenuBackendStatut
Dérivation de formules continues / preuve / manipulation de symbolesmanim✅ V1
Explication de concept vulgarisé (qu'est-ce que X / comment ça marche / pourquoi)remotion✅ V1
Didacticiel en terminal réel (installation / configuration / exécution de commandes)terminal⏸ V2
Promotion produit / vidéo courte pour réseaux sociaux / PR walkthroughhyperframes⏸ V3

Le choix ne dépend pas du nom du sujet, mais du fait que la narration manipule en continu des symboles : « Que fait la transformée de Fourier ? » → remotion (intuition) ; « Dériver la transformée de Fourier à partir des séries de Fourier » → manim (dérivation continue).

Lorsqu'un backend non implémenté est sélectionné, l'utilisateur doit en être informé et une solution de repli doit être proposée ; ne pas changer silencieusement de backend.

Dépendances préalables (à lire sur une nouvelle machine)

Tous les backends

# Les scripts Python de core/ en ont besoin. Créer un venv avec Python 3.13 (3.14 manque de roues, risqué)
uv venv --python 3.13 ~/.venvs/video-craft
uv pip install --python ~/.venvs/video-craft/bin/python numpy pillow scipy edge-tts

⚠ Sans ce venv, tts_build.py / motion_check.py / frame_metrics.py ne peuvent pas s'exécuter. C'est une leçon apprise de anything2explainer : une dépendance venv non documentée bloque tout le flux sur une nouvelle machine.

Backend remotion

brew install ffmpeg          # Pour l'extraction d'images
# Node 22+ ; le projet fait automatiquement npm install via new_project.sh

Backend manim

brew install pkg-config cairo pango     # Nécessaire pour compiler pycairo, sinon manim ne s'installe pas
brew install --cask basictex            # Nécessaire pour le rendu de formules MathTex réelles ; sans cela, retour aux approximations ASCII

On peut exécuter sans basictex (automatiquement MANIM_TEX=text), mais les formules seront simplifiées (ex: a/b). Pour les vidéos de dérivation, basictex est indispensable — la qualité du rendu des formules est vitale.

Structure des répertoires

video-craft/
├── SKILL.md                   ← Ce fichier
├── routing/
│   └── router.md              Arbre de décision + mécanismes de couverture + cas limites
├── core/                      Indépendant du moteur, partagé par tous les backends
│   ├── research-brief.md          Processus de recherche et règles de factualité
│   ├── narration-guidance.md      13 principes d'écriture de narration
│   ├── narration-storyboard.md    Format narration/storyboard et système de tokens
│   ├── tts_build.py               Doublage + timeline.json
│   ├── render_storyboard.py       Remplacement des tokens de storyboard
│   ├── motion_check.py            QC de rythme (lecture d'images, multi-backend)
│   ├── frame_metrics.py           QC de composition (lecture d'images, multi-backend)
│   ├── sheet.py                   Grille de vignettes (lecture d'images)
│   └── lessons.md                 Pièges et causes racines
└── backends/
    ├── remotion/              Vidéos de vulgarisation (ex-anything2explainer)
    │   ├── template/               Projet React
    │   ├── scripts/                render/preview/still/test_render/new_project/selfcheck
    │   ├── reference/              style-guide/motion-vocabulary/composition-and-light/
    │   │                            agent-build-rules/agent-qc-rules/prompts/math-physics
    │   └── examples/rag/           Échantillons (étalon de qualité)
    ├── manim/                 Vidéos de dérivation
    │   ├── template/               Projet Python (common/ + scenes/)
    │   ├── scripts/
    │   ├── reference/
    │   └── README.md               Résultats des tests d'environnement (cairo/latex/pycairo)
    ├── hyperframes/           Réservé V3
    │   └── README.md
    └── terminal/              Réservé V2 (l'utilisateur a confirmé que c'est nécessaire)
        └── README.md

Référence rapide des fichiers clés

ObjectifFichier
Déterminer le backend à utiliserrouting/router.md
Lancer l'agent de recherchecore/research-brief.md
Écrire la narrationLire d'abord core/narration-guidance.md, format dans core/narration-storyboard.md
Générer le doublage + timelinecore/tts_build.py
Générer le storyboardcore/render_storyboard.py
QC de rythmecore/motion_check.py
QC de compositioncore/frame_metrics.py
Parcourir la vidéo complètecore/sheet.py
Créer un projetbackends/<backend>/scripts/new_project.sh
Lancer l'agent de constructionbackends/<backend>/reference/agent-build-rules.md
Lancer l'agent QCbackends/<backend>/reference/agent-qc-rules.md

Format du storyboard par backend

BackendUnité de storyboardFormat
remotionUn plan (une phrase de narration + une image)Token {S12.from-8} dans backends/remotion/reference/narration-storyboard.md
manimUne étape de dérivationFormat DP dans backends/manim/reference/storyboard.md

Seuils QC ajustables par backend

Les seuils par défaut de core/motion_check.py sont conçus pour les vidéos Remotion de vulgarisation ; les autres backends doivent les ajuster :

# remotion (par défaut)
python3 core/motion_check.py --frames fin_frames

# manim (dérivation) : seuil d'immobilité élargi à 5s (laisser le temps de voir après une manipulation), désactiver le critère de "hold" (pas de concept de sortie)
python3 core/motion_check.py --frames fin_frames --shots DP01:1-170 --still-max 5.0 --no-hold

# terminal (V2) : pauses plus longues en attendant la sortie des commandes, prévoir 8-10s

Principes stricts (communs à tous les backends)

  1. Originalité : Toutes les images sont générées par code ou enregistrées réellement ; aucune image ou séquence d'une vidéo existante ne peut être utilisée.
  2. Faits sourcés : Chaque nombre, terme, année, nom de personne à l'écran doit avoir une URL source dans le document de recherche.
  3. Contexte unifié tout au long de la vidéo : La narration et les images utilisent le même exemple fil conducteur.
  4. Ne pas modifier les mots après approbation : Les numéros d'image sont codés en dur ; un seul mot changé nécessite un réalignement complet.
  5. Informer du backend : Le résultat du routage et la solution de repli doivent être communiqués à l'utilisateur ; ne pas décider silencieusement.

Échantillons et étalons de qualité

  • Backend remotion : backends/remotion/examples/rag/ (4′35″, 44 phrases, 44 plans) — avant de commencer, regarder examples/rag/frames/overview_*.jpg pour établir l'étalon.
  • Backend manim : Pas d'échantillon en V1, seul un cycle minimal a été validé. Un échantillon étalon complet est prévu pour V2.
  • Contre-exemples : backends/remotion/examples/contrast/

Projets migrés depuis anything2explainer

Les projets sous ~/Projects/ai-video/ (linear-function / transformer / a2e-fourier / py-course) ont été créés avec l'ancien skill et utilisent encore l'ancienne structure (template/scripts/). Ils restent utilisables — l'ancien skill est conservé en état déprécié, ne pas le supprimer.

Les nouveaux projets doivent utiliser la nouvelle structure de ce skill.

Skills associés