Pipeline de Production Vidéo Manim
Quand l’utiliser
À utiliser lorsque les utilisateurs demandent : explications animées, animations mathématiques, visualisations de concepts, parcours d’algorithmes, vulgarisations techniques, vidéos style 3Blue1Brown, ou toute animation programmatique de contenu géométrique/mathématique. Crée des vidéos explicatives à la manière de 3Blue1Brown, des visualisations d’algorithmes, des dérivations d’équations, des diagrammes d’architecture et des récits de données avec Manim Community Edition.
Standard créatif
C’est du cinéma pédagogique. Chaque image enseigne. Chaque animation révèle une structure.
Avant d’écrire la moindre ligne de code, articulez l’arc narratif. À quelle idée fausse cela répond-il ? Quel est le « déclic » ? Quelle histoire visuelle fait passer le spectateur de la confusion à la compréhension ? La requête 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 la figure 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 tour de révision. Si quelque chose semble encombré, mal rythmé ou « ressemble à des diapos générées par IA », c’est faux.
Les calques d’opacité dirigent 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 calques.
Le temps de respiration. Chaque animation nécessite un self.wait() après elle. Le spectateur a besoin de temps pour assimiler ce qui vient d’apparaître. Ne passez jamais d’une animation à l’autre précipitamment. Une pause de 2 secondes après une révélation clé n’est jamais du temps perdu.
Langage visuel cohérent. Toutes les scènes partagent une palette de couleurs, une taille typographique constante, des vitesses d’animation homogènes. 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 contre 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 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 |
| Histoire de données | Données/mesures | 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 |
| Explication d’article | Article de recherche | Résultats clés et méthodes animés | references/scene-planning.md |
| Visualisation 3D | Concept 3D | Surfaces tournantes, 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 requis.
| Couche | Outil | Objectif |
|---|---|---|
| Cœur | Manim Community Edition | Rendu de scène, moteur d’animation |
| Math | LaTeX (texlive/MiKTeX) | Rendu d’équations via MathTex |
| Vidéo I/O | ffmpeg | Assemblage des scènes, conversion de format, multiplexage audio |
| TTS | ElevenLabs / Qwen3-TTS (optionnel) | Voix off narrative |
Pipeline
PLAN --> CODE --> RENDU --> ASSEMBLAGE --> AUDIO (optionnel) --> RÉVISION
- PLAN — Écrire
plan.mdavec arc narratif, liste des scènes, éléments visuels, palette de couleurs, script de voix off - CODE — Écrire
script.pyavec une classe par scène, chaque scène étant rendable indépendamment - RENDU —
manim -ql script.py Scene1 Scene2 ...pour brouillon,-qhpour production - ASSEMBLAGE — Concat ffmpeg des clips de scènes dans
final.mp4 - AUDIO (optionnel) — Ajouter voix off et/ou musique de fond via ffmpeg. Voir
references/rendering.md - RÉVISION — Rendu d’aperçus fixes, vérification contre le plan, ajustements
Structure du projet
nom-du-projet/
plan.md # Arc narratif, décomposition des scènes
script.py # Toutes les scènes dans un seul 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) | Général maths/info |
| Académique chaleureux | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Accessible |
| Néon tech | #0A0A0A | #00F5FF | #FF00FF | #39FF14 | Systèmes, architecture |
| Monochrome | #1A1A2E | #EAEAEA | #888888 | #FFFFFF | Minimaliste |
Vitesse d’animation
| Contexte | run_time | self.wait() après |
|---|---|---|
| Titre/intro apparaît | 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 secondaire | 0,8 s | 0,5 s |
| Nettoyage FadeOut | 0,5 s | 0,3 s |
| Révélation « déclic » | 2,5 s | 3,0 s |
Échelle typographique
| Rôle | Taille de police | Usage |
|---|---|---|
| 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 à chasse fixe pour tout le texte. Le moteur de 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("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 (utilise LaTeX)
font_size=18 minimum 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 tout systématiquement
- 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 : Planification (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("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 : 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 # aperçu fixe
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 un 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)) # ensuite animer
Indicateurs 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 rendre 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 design, calques 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, tracés, BarChart, données animées, visualisation d’algorithmes |
references/camera-and-3d.md | MovingCameraScene, ThreeDScene, surfaces 3D, contrôle caméra |
references/scene-planning.md | Arcs narratifs, modèles de disposition, transitions de scène, modèle de planification |
references/rendering.md | Référence CLI, préréglages qualité, ffmpeg, workflow 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 du statique, décomposition, rythme, synchronisation narrative |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, updateurs temporels, patrons |
references/paper-explainer.md | Transformer des articles de recherche en animations – workflow, modèles, patrons par domaine |
references/decorations.md | SurroundingRectangle, Brace, flèches, DashedLine, Angle, cycle de vie des annotations |
references/production-quality.md | Listes de vérification pré-code, pré-rendu, post-rendu, disposition spatiale, couleur, rythme |
Divergence créative (à n’utiliser que 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, choisissez 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èse — lorsque l’utilisateur veut remettre en question la façon dont un sujet est généralement enseigné
Transformation SCAMPER
Prenez une visualisation mathématique/technique standard et transformez-la :
- Substituer : remplacer la métaphore visuelle standard (ligne de nombres → chemin sinueux, matrice → grille urbaine)
- Combiner : fusionner deux approches explicatives (algébrique + géométrique simultanément)
- Inverser : dériver à rebours – partir du résultat et déconstruire jusqu’aux axiomes
- Modifier : exagérer un paramètre pour montrer pourquoi il compte (taux d’apprentissage ×10, taille d’échantillon ×1000)
- Éliminer : supprimer toute notation – expliquer uniquement par l’animation et les relations spatiales
Inversion d’hypothèse
- Lister ce qui est « standard » dans la visualisation de ce sujet (gauche à droite, 2D, étapes discrètes, notation formelle)
- Choisir l’hypothèse la plus fondamentale
- L’inverser (dérivation droite à gauche, plongée 3D d’un concept 2D, morphing continu au lieu d’étapes, zéro notation)
- Explorer ce que l’inversion révèle que l’approche standard cache