Pipeline de Production Vidéo Manim
Standard Créatif
C’est du cinéma éducatif. Chaque plan enseigne. Chaque animation révèle une structure.
Avant d’écrire la moindre ligne de code, articulez l’arc narratif. Quelle idée fausse ce contenu corrige-t-il ? Quel est le « moment eurêka » ? Quelle histoire visuelle emmène le spectateur de la confusion à la compréhension ? La demande de l’utilisateur n’est qu’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 paraît méritée.
L’excellence au premier rendu est non négociable. La sortie doit être visuellement claire et esthétiquement cohérente sans itérations de correction. Si quelque chose semble surchargé, mal rythmé 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 par couches.
Temps de respiration. Chaque animation a besoin d’un self.wait() après elle. Le spectateur a besoin de temps pour absorber ce qui vient d’apparaître. Ne précipitez jamais une animation après 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, un dimensionnement de typographie uniforme, des vitesses d’animation identiques. 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. La documentation de référence a été testée avec Manim CE v0.20.1.
Modes
| Mode | Entrée | Sortie | Référence |
|---|---|---|---|
| Explicateur 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 pas à pas | references/equations.md |
| Visualisation d’algorithme | Description d’algorithme | Exécution pas à pas avec structures de données | references/graphs-and-data.md |
| Récit de données | Données/métriques | Graphiques animés, comparaisons, compteurs | references/graphs-and-data.md |
| Diagramme d’architecture | Description système | Composants qui se construisent avec connexions | references/mobjects.md |
| Explicateur 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
Un seul script Python par projet. Pas de navigateur, pas de Node.js, pas de GPU nécessaire.
| Couche | Outil | Objectif |
|---|---|---|
| Cœur | Manim Community Edition | Rendu de scène, moteur d’animation |
| Mathématiques | LaTeX (texlive/MiKTeX) | Rendu d’équations via MathTex |
| Vidéo I/O | ffmpeg | Assemblage de scènes, conversion de format, multiplexage audio |
| Synthèse vocale | ElevenLabs / Qwen3-TTS (optionnel) | Voix off narrative |
Pipeline
PLAN --> CODE --> RENDU --> ASSEMBLAGE --> AUDIO (optionnel) --> RÉVISION
- PLAN — Écrire
plan.mdavec l’arc narratif, la liste des scènes, les éléments visuels, la palette de couleurs, le script de voix off - CODE — Écrire
script.pyavec une classe par scène, chacune rendable indépendamment - RENDU —
manim -ql script.py Scene1 Scene2 ...pour le brouillon,-qhpour la production - ASSEMBLAGE — Concaténation ffmpeg des clips de scène en
final.mp4 - AUDIO (optionnel) — Ajouter voix off et/ou musique de fond via ffmpeg. Voir
references/rendering.md - RÉVISION — Rendu d’images de prévisualisation, vérification par rapport au plan, ajustement
Structure du Projet
nom-du-projet/
plan.md # Arc narratif, découpage des scènes
script.py # Toutes les scènes dans un fichier
concat.txt # Liste des scènes pour 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 |
|---|---|---|---|---|---|
| Classic 3B1B | #1C1C1C | #58C4DD (BLEU) | #83C167 (VERT) | #FFFF00 (JAUNE) | Maths/info général |
| Warm academic | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Accessible |
| Neon tech | #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,5 s | 1,0 s |
| Révélation d’équation clé | 2,0 s | 2,0 s |
| Transformation/morphing | 1,5 s | 1,5 s |
| Étiquette de support | 0,8 s | 0,5 s |
| Nettoyage FadeOut | 0,5 s | 0,3 s |
| Révélation « moment eurêka » | 2,5 s | 3,0 s |
É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 à espacement fixe pour tout le texte. Le rendu Pango de Manim produit un crénage défectueux 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("Fourier Series", font_size=48, font=MONO, weight=BOLD) # titres
Text("n=1: sin(x)", font_size=20, font=MONO) # étiquettes
MathTex(r"\nabla L") # math (utilise LaTeX)
Taille minimale font_size=18 pour la lisibilité.
Variation par Scène
N’utilisez jamais une configuration identique 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
Workflow
Étape 1 : Plan (plan.md)
Avant tout code, écrivez plan.md. Voir references/scene-planning.md pour le modèle complet.
Étape 2 : Code (script.py)
Une classe par scène. Chaque scène est rendable indépendamment.
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("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
self.add_subcaption("Why does this work?", duration=2)
self.play(Write(title), run_time=1.5)
self.wait(1.0)
self.play(FadeOut(title), run_time=0.5)
Modèles 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 en fin de scène :
self.play(FadeOut(Group(*self.mobjects)))
Étape 3 : Rendu
manim -ql script.py Scene1_Introduction Scene2_CoreConcept # brouillon
manim -qh script.py Scene1_Introduction Scene2_CoreConcept # production
Étape 4 : Assemblage
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évision
manim -ql --format=png -s script.py Scene2_CoreConcept # image de prévisualisation
Notes d’Implémentation Critique
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 être ajouté
self.play(circle.animate.set_color(RED)) # puis animation
Objectifs de Performance
| Qualité | Résolution | FPS | Vitesse |
|---|---|---|---|
-ql (brouillon) | 854×480 | 15 | 5-15 s/scène |
-qm (moyen) | 1280×720 | 30 | 15-60 s/scène |
-qh (production) | 1920×1080 | 60 | 30-120 s/scène |
Toujours itérer en -ql. Ne faire un rendu en -qh que pour la sortie finale.
Références
| Fichier | Contenu |
|---|---|
references/animations.md | Animations principales, fonctions de vitesse, composition, syntaxe .animate, schémas de timing |
references/mobjects.md | Texte, formes, VGroup/Group, positionnement, style, mobjects personnalisés |
references/visual-design.md | 12 principes de design, superposition d’opacité, modèles de disposition, palettes de couleurs |
references/equations.md | LaTeX dans Manim, TransformMatchingTex, schémas de dérivation |
references/graphs-and-data.md | Axes, tracés, 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, workflow de 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 la narration |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, updaters basés sur le temps, motifs |
references/paper-explainer.md | Transformer des articles de recherche en animations — workflow, modèles, motifs par domaine |
references/decorations.md | SurroundingRectangle, Brace, flèches, DashedLine, Angle, cycle de vie des annotations |
references/production-quality.md | Listes de vérification avant code, avant rendu, après rendu, disposition spatiale, couleur, tempo |
Divergence Créative (à utiliser uniquement quand l’utilisateur demande une sortie expérimentale/créative/uniquement)
Si l’utilisateur demande des approches explicatives créatives, expérimentales ou non conventionnelles, sélectionnez une stratégie et réfléchissez-y AVANT de concevoir l’animation.
- SCAMPER — quand l’utilisateur veut une vision fraîche d’une explication standard
- Renversement de postulat — quand l’utilisateur veut remettre en question la manière dont un sujet 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 sinueux, matrice → grille de ville)
- Combiner : fusionnez deux approches explicatives (algébrique + géométrique simultanément)
- Inverser : dérivez à l’envers — partez du résultat et déconstruisez jusqu’aux axiomes
- Modifier : exagérez un paramètre pour montrer pourquoi il compte (10× le taux d’apprentissage, 1000× la taille d’échantillon)
- Éliminer : supprimez toute notation — expliquez uniquement par l’animation et les relations spatiales
Renversement de Postulat
- Listez ce qui est « standard » dans la visualisation de ce sujet (gauche à droite, 2D, étapes discrètes, notation formelle)
- Choisissez le postulat le plus fondamental
- Renversez-le (dérivation droite à gauche, plongement 3D d’un concept 2D, morphing continu au lieu d’étapes, zéro notation)
- Explorez ce que le renversement révèle que l’approche standard cache