Pipeline de Production Vidéo Manim
Standard Créatif
Ceci est un cinéma éducatif. Chaque image enseigne. Chaque animation révèle une structure.
Avant d'écrire une seule ligne de code, exprimez l'arc narratif. Quelle idée fausse cette animation corrige-t-elle ? Quel est le "moment déclic" ? Quelle histoire visuelle conduit le spectateur de la confusion à la compréhension ? L'invite 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. Lorsque 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. Le résultat doit être visuellement clair et esthétiquement cohérent sans cycles de révision. Si quelque chose semble encombré, mal rythmé ou "ressemble à des diapositives générées par IA", c'est raté.
L'opacité par couches dirige l'attention. Ne montrez jamais tous les éléments à 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.
Respiration. Chaque animation a besoin d'un self.wait() après elle. Le spectateur a besoin de temps pour assimiler ce qui vient d'apparaître. Ne passez jamais rapidement 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 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 sur Linux, mactex sur 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 |
|---|---|---|---|
| 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 |
| Récit de données | Données/mesures | Graphiques animés, comparaisons, compteurs | references/graphs-and-data.md |
| Diagramme d'architecture | Description de système | Composants qui se construisent avec connexions | references/mobjects.md |
| Explication d'article de recherche | 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è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 |
| TTS | ElevenLabs / Qwen3-TTS (optionnel) | Voix off de narration |
Pipeline
PLANIFIER --> CODER --> RENDU --> ASSEMBLER --> AUDIO (optionnel) --> RÉVISER
- PLANIFIER — Rédigez
plan.mdavec l'arc narratif, la liste des scènes, les éléments visuels, la palette de couleurs, le script de voix off - CODER — Rédigez
script.pyavec une classe par scène, chaque scène étant indépendamment rendable - RENDU —
manim -ql script.py Scene1 Scene2 ...pour l'ébauche,-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, décomposition des scènes
script.py # Toutes les scènes dans un seul 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'utilisation |
|---|---|---|---|---|---|
| Classique 3B1B | #1C1C1C | #58C4DD (BLEU) | #83C167 (VERT) | #FFFF00 (JAUNE) | Maths/Info généraux |
| 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/morphing | 1.5s | 1.5s |
| Étiquette de support | 0.8s | 0.5s |
| Nettoyage FadeOut | 0.5s | 0.3s |
| Révélation "moment déclic" | 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 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") # maths (utilise LaTeX)
Taille minimale 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 :
- Une couleur dominante différente de la palette
- Une disposition différente — ne centrez pas toujours tout
- Une entrée d'animation différente — variez entre Write, FadeIn, GrowFromCenter, Create
- Un poids visuel différent — certaines scènes denses, d'autres épurées
Flux de Travail
Étape 1 : Planifier (plan.md)
Avant tout code, rédigez 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 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)
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 les 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 # ébauche
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 l'ajouter
self.play(circle.animate.set_color(RED)) # puis l'animer
Objectifs de Performance
| Qualité | Résolution | FPS | Vitesse |
|---|---|---|---|
-ql (ébauche) | 854x480 | 15 | 5-15s/scène |
-qm (moyenne) | 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 de base, fonctions de taux, composition, syntaxe .animate, modèles de rythme |
references/mobjects.md | Texte, formes, VGroup/Group, positionnement, style, mobjects personnalisés |
references/visual-design.md | 12 principes de design, mise en couches d'opacité, modèles de disposition, palettes de couleurs |
references/equations.md | LaTeX dans Manim, TransformMatchingTex, modèles de dérivation |
references/graphs-and-data.md | Axes, tracé, 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ène, 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 du statique, décomposition, rythme, synchronisation narration |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, updateurs temporels, modèles |
references/paper-explainer.md | Transformer des articles de recherche en animations — flux de travail, modèles, modèles 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 souhaite un regard neuf sur une explication standard
- Inversion des Hypothèses — lorsque l'utilisateur souhaite 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 à rebours — partez du résultat et déconstruisez jusqu'aux axiomes
- Modifier : exagérez un paramètre pour montrer pourquoi il compte (taux d'apprentissage x10, taille d'échantillon x1000)
- Éliminer : supprimez toute notation — expliquez uniquement par animation et relations spatiales
Inversion des 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 droite à gauche, plongement 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