Pipeline de Production Vidéo Manim
Standard Créatif
C'est du cinéma éducatif. Chaque image enseigne. Chaque animation révèle une structure.
Avant d'écrire une seule ligne de code, articulez l'arc narratif. Quelle idée fausse cela corrige-t-il ? Quel est le « moment eurêka » ? Quelle histoire visuelle emmène le spectateur de la confusion à la compréhension ? L'invite de l'utilisateur est un point de départ — interprétez-la avec ambition pédagogique.
La géométrie avant l'algèbre. Montrez d'abord la forme, l'équation ensuite. La mémoire visuelle encode plus vite que la mémoire symbolique. Quand le spectateur voit le motif géométrique avant la formule, l'équation semble méritée.
L'excellence au premier rendu est non négociable. La sortie doit être visuellement claire et esthétiquement cohérente sans cycles de révision. Si quelque chose semble encombré, mal synchronisé ou comme des « diapositives générées par IA », c'est faux.
La superposition d'opacité dirige l'attention. Ne montrez jamais tout à pleine luminosité. Éléments principaux à 1.0, éléments contextuels à 0.4, éléments structurels (axes, grilles) à 0.15. Le cerveau traite la saillance visuelle en couches.
L'air de respiration. Chaque animation a besoin de self.wait() après elle. Le spectateur a besoin de temps pour assimiler ce qui vient d'apparaître. Ne précipitez jamais d'une animation à l'autre. Une pause de 2 secondes après une révélation clé n'est jamais perdue.
Langage visuel cohérent. Toutes les scènes partagent une palette de couleurs, une taille typographique cohérente, des vitesses d'animation assorties. Une vidéo techniquement correcte où chaque scène utilise des couleurs aléatoires différentes est un échec esthétique.
Prérequis
Exécutez scripts/setup.sh pour vérifier toutes les dépendances. Nécessite : Python 3.10+, Manim Community Edition v0.20+ (pip install manim), LaTeX (texlive-full sous Linux, mactex sous macOS), et ffmpeg. Documentation de référence testée avec Manim CE v0.20.1.
Modes
| Mode | Entrée | Sortie | Référence |
|---|---|---|---|
| Explication de concept | Sujet/concept | Explication animée avec intuition géométrique | references/scene-planning.md |
| Dérivation d'équation | Expressions mathématiques | Preuve animée étape par étape | references/equations.md |
| Visualisation d'algorithme | Description d'algorithme | Exécution étape par étape avec structures de données | references/graphs-and-data.md |
| Histoire de données | Données/métriques | Graphiques animés, comparaisons, compteurs | references/graphs-and-data.md |
| Diagramme d'architecture | Description du système | Composants se construisant avec connexions | references/mobjects.md |
| Explication d'article | Article de recherche | Résultats et méthodes clés animés | references/scene-planning.md |
| Visualisation 3D | Concept 3D | Surfaces rotatives, courbes paramétriques, géométrie spatiale | references/camera-and-3d.md |
Stack
Script Python unique par projet. Pas de navigateur, pas de Node.js, pas de GPU requis.
| Couche | Outil | Objectif |
|---|---|---|
| Cœur | Manim Community Edition | Rendu de scène, moteur d'animation |
| Mathématiques | LaTeX (texlive/MiKTeX) | Rendu d'équation via MathTex |
| Vidéo I/O | ffmpeg | Assemblage de scènes, conversion de format, mixage audio |
| TTS | ElevenLabs / Qwen3-TTS (optionnel) | Voix off de narration |
Pipeline
PLANIFIER --> CODER --> RENDRE --> ASSEMBLER --> AUDIO (optionnel) --> RÉVISER
- PLANIFIER — Écrivez
plan.mdavec l'arc narratif, la liste des scènes, les éléments visuels, la palette de couleurs, le script de voix off - CODER — Écrivez
script.pyavec une classe par scène, chacune indépendamment rendue - RENDRE —
manim -ql script.py Scene1 Scene2 ...pour le brouillon,-qhpour la production - ASSEMBLER — Concaténer ffmpeg des clips de scènes en
final.mp4 - AUDIO (optionnel) — Ajouter voix off et/ou musique de fond via ffmpeg. Voir
references/rendering.md - RÉVISER — Prévisualiser des images de rendu, vérifier par rapport au plan, ajuster
Structure du Projet
nom-du-projet/
plan.md # Arc narratif, décomposition des scènes
script.py # Toutes les scènes dans un fichier
concat.txt # Liste des scènes ffmpeg
final.mp4 # Sortie assemblée
media/ # Généré automatiquement par Manim
videos/script/480p15/
Direction Créative
Palettes de Couleurs
| Palette | Fond | Primaire | Secondaire | Accent | Cas d'usage |
|---|---|---|---|---|---|
| Classique 3B1B | #1C1C1C | #58C4DD (BLEU) | #83C167 (VERT) | #FFFF00 (JAUNE) | Mathématiques/CS général |
| Académique chaleureux | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Accessible |
| Néon techno | #0A0A0A | #00F5FF | #FF00FF | #39FF14 | Systèmes, architecture |
| Monochrome | #1A1A2E | #EAEAEA | #888888 | #FFFFFF | Minimaliste |
Vitesse d'Animation
| Contexte | run_time | self.wait() après |
|---|---|---|
| Apparition titre/intro | 1.5s | 1.0s |
| Révélation d'équation clé | 2.0s | 2.0s |
| Transformation/morphose | 1.5s | 1.5s |
| Étiquette de support | 0.8s | 0.5s |
| Nettoyage FadeOut | 0.5s | 0.3s |
| Révélation « moment eurêka » | 2.5s | 3.0s |
Échelle Typographique
| Rôle | Taille de police | Utilisation |
|---|---|---|
| Titre | 48 | Titres de scène, texte d'ouverture |
| En-tête | 36 | En-têtes de section dans une scène |
| Corps | 30 | Texte explicatif |
| Étiquette | 24 | Annotations, étiquettes d'axes |
| Légende | 20 | Sous-titres, petits caractères |
Polices
Utilisez des polices monospace pour tout le texte. Le rendu Pango de Manim produit un crénage cassé avec les polices proportionnelles à toutes les tailles. Voir references/visual-design.md pour les recommandations complètes.
MONO = "Menlo" # définir une fois en haut du fichier
Text("Série de Fourier", font_size=48, font=MONO, weight=BOLD) # titres
Text("n=1 : sin(x)", font_size=20, font=MONO) # étiquettes
MathTex(r"\nabla L") # mathématiques (utilise LaTeX)
Minimum font_size=18 pour la lisibilité.
Variation par Scène
N'utilisez jamais la même configuration pour toutes les scènes. Pour chaque scène :
- Couleur dominante différente de la palette
- Disposition différente — ne centrez pas toujours tout
- Entrée d'animation différente — variez entre Write, FadeIn, GrowFromCenter, Create
- Poids visuel différent — certaines scènes denses, d'autres épurées
Flux de Travail
Étape 1 : Planifier (plan.md)
Avant tout code, écrivez plan.md. Voir references/scene-planning.md pour le modèle complet.
Étape 2 : Coder (script.py)
Une classe par scène. Chaque scène est indépendamment rendable.
from manim import *
BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"
class Scene1_Introduction(Scene):
def construct(self):
self.camera.background_color = BG
title = Text("Pourquoi cela fonctionne-t-il ?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
self.add_subcaption("Pourquoi cela fonctionne-t-il ?", duration=2)
self.play(Write(title), run_time=1.5)
self.wait(1.0)
self.play(FadeOut(title), run_time=0.5)
Patrons clés :
- Sous-titres sur chaque animation :
self.add_subcaption("texte", duration=N)ousubcaption="texte"surself.play() - Constantes de couleur partagées en haut du fichier pour la cohérence entre scènes
self.camera.background_colordéfini dans chaque scène- Sorties propres — FadeOut de tous les mobjects à la fin de la scène :
self.play(FadeOut(Group(*self.mobjects)))
Étape 3 : Rendre
manim -ql script.py Scene1_Introduction Scene2_CoreConcept # brouillon
manim -qh script.py Scene1_Introduction Scene2_CoreConcept # production
Étape 4 : Assembler
cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4
Étape 5 : Réviser
manim -ql --format=png -s script.py Scene2_CoreConcept # prévisualisation statique
Notes d'Implémentation Critiques
Chaînes Brutes pour LaTeX
# FAUX : MathTex("\\frac{1}{2}")
# CORRECT :
MathTex(r"\frac{1}{2}")
buff >= 0.5 pour le Texte en Bordure
label.to_edge(DOWN, buff=0.5) # jamais < 0.5
FadeOut Avant de Remplacer du Texte
self.play(ReplacementTransform(note1, note2)) # pas Write(note2) par-dessus
Ne Jamais Animer des Mobjects Non Ajoutés
self.play(Create(circle)) # doit d'abord ajouter
self.play(circle.animate.set_color(RED)) # puis animer
Objectifs de Performance
| Qualité | Résolution | FPS | Vitesse |
|---|---|---|---|
-ql (brouillon) | 854x480 | 15 | 5-15s/scène |
-qm (moyen) | 1280x720 | 30 | 15-60s/scène |
-qh (production) | 1920x1080 | 60 | 30-120s/scène |
Itérez toujours en -ql. Ne rendez en -qh que pour la sortie finale.
Références
| Fichier | Contenu |
|---|---|
references/animations.md | Animations de base, fonctions de vitesse, composition, syntaxe .animate, patrons de timing |
references/mobjects.md | Texte, formes, VGroup/Group, positionnement, style, mobjects personnalisés |
references/visual-design.md | 12 principes de conception, superposition d'opacité, modèles de disposition, palettes de couleurs |
references/equations.md | LaTeX dans Manim, TransformMatchingTex, patrons de dérivation |
references/graphs-and-data.md | Axes, traçage, BarChart, données animées, visualisation d'algorithmes |
references/camera-and-3d.md | MovingCameraScene, ThreeDScene, surfaces 3D, contrôle de caméra |
references/scene-planning.md | Arcs narratifs, modèles de disposition, transitions de scènes, modèle de planification |
references/rendering.md | Référence CLI, préréglages de qualité, ffmpeg, flux de travail voix off, export GIF |
references/troubleshooting.md | Erreurs LaTeX, erreurs d'animation, erreurs courantes, débogage |
references/animation-design-thinking.md | Quand animer vs montrer statique, décomposition, rythme, synchronisation de narration |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, mises à jour basées sur le temps, patrons |
references/paper-explainer.md | Transformer des articles de recherche en animations — flux de travail, modèles, patrons de domaine |
references/decorations.md | SurroundingRectangle, Brace, flèches, DashedLine, Angle, cycle de vie des annotations |
references/production-quality.md | Listes de contrôle avant code, avant rendu, après rendu, disposition spatiale, couleur, tempo |
Divergence Créative (à utiliser uniquement lorsque l'utilisateur demande une sortie expérimentale/créative/unique)
Si l'utilisateur demande des approches explicatives créatives, expérimentales ou non conventionnelles, sélectionnez une stratégie et raisonnez-la AVANT de concevoir l'animation.
- SCAMPER — lorsque l'utilisateur souhaite un regard neuf sur une explication standard
- Inversion d'Hypothèses — lorsque l'utilisateur souhaite remettre en question la manière dont quelque chose est habituellement enseigné
Transformation SCAMPER
Prenez une visualisation mathématique/technique standard et transformez-la :
- Substituer : remplacez la métaphore visuelle standard (droite numérique → chemin tortueux, matrice → grille urbaine)
- Combiner : fusionnez deux approches explicatives (algébrique + géométrique simultanément)
- Inverser : dérivez à rebours — partez du résultat et déconstruisez jusqu'aux axiomes
- Modifier : exagérez un paramètre pour montrer pourquoi il est important (10x le taux d'apprentissage, 1000x la taille de l'échantillon)
- Éliminer : retirez toute notation — expliquez uniquement par l'animation et les relations spatiales
Inversion d'Hypothèses
- Listez ce qui est « standard » dans la manière dont ce sujet est visualisé (gauche à droite, 2D, étapes discrètes, notation formelle)
- Choisissez l'hypothèse la plus fondamentale
- Inversez-la (dérivation droite à gauche, intégration 3D d'un concept 2D, morphing continu au lieu d'étapes, zéro notation)
- Explorez ce que l'inversion révèle que l'approche standard cache