Communitygithub.com

manim-video

Animations Manim CE : vidéos mathématiques/algorithmiques à la 3Blue1Brown.

Qu'est-ce que manim-video ?

Cette compétence permet de produire des vidéos animées de type 3Blue1Brown avec Manim Community Edition. Elle couvre les explications mathématiques, les visualisations d’algorithmes, les dérivations d’équations, les storyboards de données et les schémas d’architecture. Le pipeline suit les étapes planification, codage, rendu, assemblage et révision, avec un accent sur la clarté pédagogique, la cohérence visuelle (palettes de couleurs, échelles typographiques, vitesse d’animation) et l’excellence du premier rendu. La compétence est conçue pour Claude Code et d’autres agents de code en ligne de commande, sans dépendance navigateur ni GPU. Le markdown fourni décrit en détail la philosophie créative, les modes de fonctionnement, la structure du projet, les patrons de code, les performances cibles et les ressources de référence.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/David2024patton/custom-skills-public/tree/main/skills/creative/manim-video

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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

ModeEntréeSortieRéférence
Explication de conceptSujet/conceptExplication animée avec intuition géométriquereferences/scene-planning.md
Dérivation d’équationExpressions mathématiquesPreuve animée pas à pasreferences/equations.md
Visualisation d’algorithmeDescription d’algorithmeExécution pas à pas avec structures de donnéesreferences/graphs-and-data.md
Histoire de donnéesDonnées/mesuresGraphiques animés, comparaisons, compteursreferences/graphs-and-data.md
Diagramme d’architectureDescription systèmeComposants qui se construisent avec connexionsreferences/mobjects.md
Explication d’articleArticle de rechercheRésultats clés et méthodes animésreferences/scene-planning.md
Visualisation 3DConcept 3DSurfaces tournantes, courbes paramétriques, géométrie spatialereferences/camera-and-3d.md

Stack

Un seul script Python par projet. Pas de navigateur, pas de Node.js, pas de GPU requis.

CoucheOutilObjectif
CœurManim Community EditionRendu de scène, moteur d’animation
MathLaTeX (texlive/MiKTeX)Rendu d’équations via MathTex
Vidéo I/OffmpegAssemblage des scènes, conversion de format, multiplexage audio
TTSElevenLabs / Qwen3-TTS (optionnel)Voix off narrative

Pipeline

PLAN --> CODE --> RENDU --> ASSEMBLAGE --> AUDIO (optionnel) --> RÉVISION
  1. PLAN — Écrire plan.md avec arc narratif, liste des scènes, éléments visuels, palette de couleurs, script de voix off
  2. CODE — Écrire script.py avec une classe par scène, chaque scène étant rendable indépendamment
  3. RENDU — manim -ql script.py Scene1 Scene2 ... pour brouillon, -qh pour production
  4. ASSEMBLAGE — Concat ffmpeg des clips de scènes dans final.mp4
  5. AUDIO (optionnel) — Ajouter voix off et/ou musique de fond via ffmpeg. Voir references/rendering.md
  6. 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

PaletteFondPrimaireSecondaireAccentCas d’usage
Classique 3B1B#1C1C1C#58C4DD (BLEU)#83C167 (VERT)#FFFF00 (JAUNE)Général maths/info
Académique chaleureux#2D2B55#FF6B6B#FFD93D#6BCB77Accessible
Néon tech#0A0A0A#00F5FF#FF00FF#39FF14Systèmes, architecture
Monochrome#1A1A2E#EAEAEA#888888#FFFFFFMinimaliste

Vitesse d’animation

Contexterun_timeself.wait() après
Titre/intro apparaît1,5 s1,0 s
Révélation d’équation clé2,0 s2,0 s
Transformation/morphing1,5 s1,5 s
Étiquette secondaire0,8 s0,5 s
Nettoyage FadeOut0,5 s0,3 s
Révélation « déclic »2,5 s3,0 s

Échelle typographique

RôleTaille de policeUsage
Titre48Titres de scène, texte d’ouverture
En-tête36En-têtes de section dans une scène
Corps30Texte explicatif
Étiquette24Annotations, étiquettes d’axes
Légende20Sous-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) ou subcaption="texte" sur self.play()
  • Constantes de couleur partagées en haut du fichier pour la cohérence entre scènes
  • self.camera.background_color dé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ésolutionFPSVitesse
-ql (brouillon)854×480155 à 15 s/scène
-qm (moyen)1280×7203015 à 60 s/scène
-qh (production)1920×10806030 à 120 s/scène

Toujours itérer en -ql. Ne rendre en -qh que pour la sortie finale.

Références

FichierContenu
references/animations.mdAnimations de base, fonctions de vitesse, composition, syntaxe .animate, patrons de timing
references/mobjects.mdTexte, formes, VGroup/Group, positionnement, style, mobjects personnalisés
references/visual-design.md12 principes de design, calques d’opacité, modèles de disposition, palettes de couleurs
references/equations.mdLaTeX dans Manim, TransformMatchingTex, patrons de dérivation
references/graphs-and-data.mdAxes, tracés, BarChart, données animées, visualisation d’algorithmes
references/camera-and-3d.mdMovingCameraScene, ThreeDScene, surfaces 3D, contrôle caméra
references/scene-planning.mdArcs narratifs, modèles de disposition, transitions de scène, modèle de planification
references/rendering.mdRéférence CLI, préréglages qualité, ffmpeg, workflow voix off, export GIF
references/troubleshooting.mdErreurs LaTeX, erreurs d’animation, erreurs courantes, débogage
references/animation-design-thinking.mdQuand animer vs montrer du statique, décomposition, rythme, synchronisation narrative
references/updaters-and-trackers.mdValueTracker, add_updater, always_redraw, updateurs temporels, patrons
references/paper-explainer.mdTransformer des articles de recherche en animations – workflow, modèles, patrons par domaine
references/decorations.mdSurroundingRectangle, Brace, flèches, DashedLine, Angle, cycle de vie des annotations
references/production-quality.mdListes 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

  1. Lister ce qui est « standard » dans la visualisation de ce sujet (gauche à droite, 2D, étapes discrètes, notation formelle)
  2. Choisir l’hypothèse la plus fondamentale
  3. L’inverser (dérivation droite à gauche, plongée 3D d’un concept 2D, morphing continu au lieu d’étapes, zéro notation)
  4. Explorer ce que l’inversion révèle que l’approche standard cache

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés