Pipeline de production vidéo Manim CE
Quand l'utiliser
À utiliser lorsque les utilisateurs demandent : explications animées, animations mathématiques, visualisations de concepts, démonstrations d'algorithmes, vidéos explicatives techniques, vidéos de style 3Blue1Brown, ou toute animation programmatique à contenu géométrique/mathématique. Crée des vidéos explicatives de style 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 un cinéma éducatif. 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 cette vidéo corrige-t-elle ? Quel est le « moment ah » ? Quelle histoire visuelle emmène le spectateur de la confusion à la compréhension ? Le message de l'utilisateur est un point de départ — interprétez-le 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 dès le 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 chronométré, 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.
Une pause pour respirer. 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 vous 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 de typographie cohérente, des vitesses d'animation appariées. 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 est 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 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 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
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ènes, moteur d'animation |
| Mathématiques | LaTeX (texlive/MiKTeX) | Rendu d'équations via MathTex |
| Entrée/Sortie vidéo | ffmpeg | Assemblage de scènes, conversion de format, multiplexage audio |
| Synthèse vocale | ElevenLabs / Qwen3-TTS (optionnel) | Voix off narrative |
Pipeline
PLANIFIER --> CODER --> RENDU --> 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 rendue indépendamment - RENDU —
manim -ql script.py Scene1 Scene2 ...pour le brouillon,-qhpour la production - ASSEMBLER — Concaténation ffmpeg des clips de scène dans
final.mp4 - AUDIO (optionnel) — Ajoutez une voix off et/ou une musique de fond via ffmpeg. Voir
references/rendering.md - RÉVISER — Rendu d'images d'aperçu, vérification par rapport au plan, ajustements
Structure du projet
nom-du-projet/
plan.md # Arc narratif, description 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 | Arrière-plan | Principale | Secondaire | Accent | Cas d'usage |
|---|---|---|---|---|---|
| Classique 3B1B | #1C1C1C | #58C4DD (BLEU) | #83C167 (VERT) | #FFFF00 (JAUNE) | Maths/Info général |
| Académique chaleureux | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Accessible |
| Techno néon | #0A0A0A | #00F5FF | #FF00FF | #39FF14 | Systèmes, architecture |
| Monochrome | #1A1A2E | #EAEAEA | #888888 | #FFFFFF | Minimaliste |
Vitesse d'animation
| Contexte | run_time | self.wait() après |
|---|---|---|
| Apparition du titre/intro | 1.5s | 1.0s |
| Révélation d'équation clé | 2.0s | 2.0s |
| Transformation/morphisme | 1.5s | 1.5s |
| Étiquette de support | 0.8s | 0.5s |
| Nettoyage FadeOut | 0.5s | 0.3s |
| Révélation « moment ah » | 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 à chasse fixe pour tout le texte. Le moteur de rendu Pango de Manim produit un crénage cassé avec les polices proportionnelles, quelle que soit la taille. 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") # maths (utilise LaTeX)
Taille de police 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 clairsemé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 rendue 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)
Schémas 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 : 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 # image d'aperçu
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
N'animez jamais des mobjects non ajoutés
self.play(Create(circle)) # doit d'abord être ajouté
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 faites un rendu en -qh que pour la sortie finale.
Références
| Fichier | Contenu |
|---|---|
references/animations.md | Animations principales, fonctions de taux, composition, syntaxe .animate, motifs temporels |
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 mise en page, palettes de couleurs |
references/equations.md | LaTeX dans Manim, TransformMatchingTex, motifs 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 mise en page, 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 narration |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, mise à jour temporelle, motifs |
references/paper-explainer.md | Transformer des articles de recherche en animations — flux de travail, 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 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 veut un nouveau regard sur une explication standard
- Renversement d'hypothèses — lorsque l'utilisateur veut 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 (ligne numérique → chemin sinueux, matrice → grille urbaine)
- Combiner : fusionnez deux approches d'explication (algébrique + géométrique simultanément)
- Inverser : dérivez à rebours — commencez par le 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 : supprimez toute notation — expliquez uniquement par l'animation et les relations spatiales
Renversement d'hypothèses
- Listez ce qui est « standard » dans la visualisation de ce sujet (gauche à droite, 2D, étapes discrètes, notation formelle)
- Choisissez l'hypothèse la plus fondamentale
- Inversez-la (dérivation de 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