Manim-Video-Produktionspipeline
Wann verwenden
Verwenden, wenn Benutzer anfragen: animierte Erklärungen, mathematische Animationen, Konzeptvisualisierungen, Algorithmus-Walkthroughs, technische Erläuterungen, 3Blue1Brown-ähnliche Videos oder jede Art von programmatischen Animationen mit geometrischem/mathematischem Inhalt. Erstellt 3Blue1Brown-ähnliche Erklärvideos, Algorithmusvisualisierungen, Gleichungsableitungen, Architekturdiagramme und Daten-Storys mit Manim Community Edition.
Kreativer Standard
Dies ist pädagogisches Kino. Jeder Frame lehrt. Jede Animation enthüllt eine Struktur.
Bevor eine einzige Zeile Code geschrieben wird, formuliere den narrativen Bogen. Welches Missverständnis wird korrigiert? Was ist der „Aha-Moment“? Welche visuelle Geschichte führt den Zuschauer von Verwirrung zu Verständnis? Die Eingabe des Benutzers ist ein Ausgangspunkt – interpretiere sie mit pädagogischem Ehrgeiz.
Geometrie vor Algebra. Zeige zuerst die Form, dann die Gleichung. Das visuelle Gedächtnis kodiert schneller als das symbolische Gedächtnis. Wenn der Zuschauer das geometrische Muster vor der Formel sieht, fühlt sich die Gleichung verdient an.
Exzellenz im ersten Rendering ist nicht verhandelbar. Die Ausgabe muss visuell klar und ästhetisch kohärent sein, ohne Überarbeitungsrunden. Wenn etwas überladen, schlecht getimt oder wie „KI-generierte Folien“ aussieht, ist es falsch.
Opazitätsebenen lenken die Aufmerksamkeit. Zeige niemals alles in voller Helligkeit. Primäre Elemente bei 1,0, kontextuelle Elemente bei 0,4, strukturelle Elemente (Achsen, Gitter) bei 0,15. Das Gehirn verarbeitet visuelle Hervorhebung in Schichten.
Atempausen. Jede Animation benötigt ein self.wait() danach. Der Zuschauer braucht Zeit, um das gerade Erschienene aufzunehmen. Überstürze nie von einer Animation zur nächsten. Eine 2-Sekunden-Pause nach einer entscheidenden Enthüllung ist nie verschwendet.
Kohärente visuelle Sprache. Alle Szenen teilen eine Farbpalette, konsistente Typografiegrößen und passende Animationsgeschwindigkeiten. Ein technisch korrektes Video, bei dem jede Szene zufällige, unterschiedliche Farben verwendet, ist ein ästhetischer Fehlschlag.
Voraussetzungen
Führe scripts/setup.sh aus, um alle Abhängigkeiten zu überprüfen. Erforderlich: Python 3.10+, Manim Community Edition v0.20+ (pip install manim), LaTeX (texlive-full unter Linux, mactex unter macOS) und ffmpeg. Referenzdokumentation getestet gegen Manim CE v0.20.1.
Modi
| Modus | Eingabe | Ausgabe | Referenz |
|---|---|---|---|
| Konzepterklärer | Thema/Konzept | Animierte Erklärung mit geometrischer Intuition | references/scene-planning.md |
| Gleichungsableitung | Mathematische Ausdrücke | Schrittweise animierter Beweis | references/equations.md |
| Algorithmusvisualisierung | Algorithmusbeschreibung | Schrittweise Ausführung mit Datenstrukturen | references/graphs-and-data.md |
| Daten-Story | Daten/Metriken | Animierte Diagramme, Vergleiche, Zähler | references/graphs-and-data.md |
| Architekturdiagramm | Systembeschreibung | Komponentenaufbau mit Verbindungen | references/mobjects.md |
| Papiererklärer | Forschungsarbeit | Animierte Darstellung wichtiger Ergebnisse und Methoden | references/scene-planning.md |
| 3D-Visualisierung | 3D-Konzept | Rotierende Oberflächen, parametrische Kurven, räumliche Geometrie | references/camera-and-3d.md |
Technologie-Stack
Ein einzelnes Python-Skript pro Projekt. Kein Browser, kein Node.js, keine GPU erforderlich.
| Ebene | Werkzeug | Zweck |
|---|---|---|
| Kern | Manim Community Edition | Szenen-Rendering, Animationsengine |
| Mathematik | LaTeX (texlive/MiKTeX) | Gleichungs-Rendering via MathTex |
| Video-E/A | ffmpeg | Szenenzusammenführung, Formatkonvertierung, Audio-Muxing |
| TTS | ElevenLabs / Qwen3-TTS (optional) | Sprachausgabe Voiceover |
Pipeline
PLAN --> CODE --> RENDERN --> ZUSAMMENFÜHREN --> AUDIO (optional) --> PRÜFEN
- PLAN – Erstelle
plan.mdmit narrativem Bogen, Szenenliste, visuellen Elementen, Farbpalette, Voiceover-Skript - CODE – Schreibe
script.pymit einer Klasse pro Szene, jede unabhängig renderbar - RENDERN –
manim -ql script.py Szene1 Szene2 ...für Entwurf,-qhfür Produktion - ZUSAMMENFÜHREN – ffmpeg concat der Szenenclips zu
final.mp4 - AUDIO (optional) – Füge Voiceover und/oder Hintergrundmusik via ffmpeg hinzu. Siehe
references/rendering.md - PRÜFEN – Rendere Vorschaustandbilder, überprüfe am Plan, passe an
Projektstruktur
projekt-name/
plan.md # Narrativer Bogen, Szenenaufteilung
script.py # Alle Szenen in einer Datei
concat.txt # ffmpeg-Szenenliste
final.mp4 # Zusammengeführte Ausgabe
media/ # Automatisch von Manim generiert
videos/script/480p15/
Kreative Richtung
Farbpaletten
| Palette | Hintergrund | Primär | Sekundär | Akzent | Anwendungsfall |
|---|---|---|---|---|---|
| Classic 3B1B | #1C1C1C | #58C4DD (BLAU) | #83C167 (GRÜN) | #FFFF00 (GELB) | Allgemeine Mathematik/Informatik |
| Warm akademisch | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Zugänglich |
| Neon Technik | #0A0A0A | #00F5FF | #FF00FF | #39FF14 | Systeme, Architektur |
| Monochrom | #1A1A2E | #EAEAEA | #888888 | #FFFFFF | Minimalistisch |
Animationsgeschwindigkeit
| Kontext | run_time | self.wait() danach |
|---|---|---|
| Titel/Einleitung erscheint | 1,5s | 1,0s |
| Wichtige Gleichungsenthüllung | 2,0s | 2,0s |
| Transformieren/Morphing | 1,5s | 1,5s |
| Unterstützendes Label | 0,8s | 0,5s |
| FadeOut-Bereinigung | 0,5s | 0,3s |
| „Aha-Moment“-Enthüllung | 2,5s | 3,0s |
Typografie-Skala
| Rolle | Schriftgröße | Verwendung |
|---|---|---|
| Titel | 48 | Szenentitel, Eröffnungstext |
| Überschrift | 36 | Abschnittsüberschriften innerhalb einer Szene |
| Fließtext | 30 | Erklärungstext |
| Label | 24 | Anmerkungen, Achsenbeschriftungen |
| Bildunterschrift | 20 | Untertitel, Kleingedrucktes |
Schriftarten
Verwende Monospace-Schriftarten für allen Text. Manims Pango-Renderer erzeugt fehlerhafte Unterschneidungen (Kerning) mit proportionalen Schriftarten in allen Größen. Siehe references/visual-design.md für vollständige Empfehlungen.
MONO = "Menlo" # einmalig am Dateianfang definieren
Text("Fourier-Reihe", font_size=48, font=MONO, weight=BOLD) # Titel
Text("n=1: sin(x)", font_size=20, font=MONO) # Labels
MathTex(r"\nabla L") # Mathematik (verwendet LaTeX)
Mindestgröße font_size=18 für Lesbarkeit.
Szenenspezifische Variation
Verwende niemals für alle Szenen identische Konfiguration. Für jede Szene:
- Andere dominante Farbe aus der Palette
- Anderes Layout – zentriere nicht immer alles
- Anderer Animationseingang – variiere zwischen Write, FadeIn, GrowFromCenter, Create
- Anderes visuelles Gewicht – manche Szenen dicht, andere spärlich
Arbeitsablauf
Schritt 1: Planen (plan.md)
Schreibe vor dem Code die plan.md. Siehe references/scene-planning.md für die umfassende Vorlage.
Schritt 2: Codieren (script.py)
Eine Klasse pro Szene. Jede Szene ist unabhängig renderbar.
from manim import *
BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"
class Szene1_Einleitung(Scene):
def construct(self):
self.camera.background_color = BG
titel = Text("Warum funktioniert das?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
self.add_subcaption("Warum funktioniert das?", duration=2)
self.play(Write(titel), run_time=1.5)
self.wait(1.0)
self.play(FadeOut(titel), run_time=0.5)
Wichtige Muster:
- Untertitel bei jeder Animation:
self.add_subcaption("text", duration=N)odersubcaption="text"beiself.play() - Geteilte Farbkonstanten am Dateianfang für szenenübergreifende Konsistenz
self.camera.background_colorin jeder Szene setzen- Saubere Ausgänge – FadeOut aller Mobjects am Szenenende:
self.play(FadeOut(Group(*self.mobjects)))
Schritt 3: Rendern
manim -ql script.py Szene1_Einleitung Szene2_Kernkonzept # Entwurf
manim -qh script.py Szene1_Einleitung Szene2_Kernkonzept # Produktion
Schritt 4: Zusammenführen
cat > concat.txt << 'EOF'
datei 'media/videos/script/480p15/Szene1_Einleitung.mp4'
datei 'media/videos/script/480p15/Szene2_Kernkonzept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4
Schritt 5: Prüfen
manim -ql --format=png -s script.py Szene2_Kernkonzept # Vorschaustandbild
Wichtige Implementierungshinweise
Raw-Strings für LaTeX
# FALSCH: MathTex("\frac{1}{2}")
# RICHTIG:
MathTex(r"\frac{1}{2}")
buff >= 0,5 für Kantentext
label.to_edge(DOWN, buff=0.5) # niemals < 0,5
FadeOut vor dem Ersetzen von Text
self.play(ReplacementTransform(notiz1, notiz2)) # nicht Write(notiz2) darüber
Niemals Nicht-hinzugefügte Mobjects animieren
self.play(Create(kreis)) # muss zuerst hinzugefügt werden
self.play(kreis.animate.set_color(RED)) # dann animieren
Leistungsziele
| Qualität | Auflösung | FPS | Geschwindigkeit |
|---|---|---|---|
-ql (Entwurf) | 854x480 | 15 | 5-15s/Szene |
-qm (mittel) | 1280x720 | 30 | 15-60s/Szene |
-qh (Produktion) | 1920x1080 | 60 | 30-120s/Szene |
Iteriere immer mit -ql. Rendere -qh nur für die endgültige Ausgabe.
Referenzen
| Datei | Inhalt |
|---|---|
references/animations.md | Kernanimationen, Geschwindigkeitsfunktionen, Komposition, .animate-Syntax, Timing-Muster |
references/mobjects.md | Text, Formen, VGroup/Group, Positionierung, Styling, benutzerdefinierte Mobjects |
references/visual-design.md | 12 Designprinzipien, Opazitätsebenen, Layoutvorlagen, Farbpaletten |
references/equations.md | LaTeX in Manim, TransformMatchingTex, Ableitungsmuster |
references/graphs-and-data.md | Achsen, Plotten, BarChart, animierte Daten, Algorithmusvisualisierung |
references/camera-and-3d.md | MovingCameraScene, ThreeDScene, 3D-Oberflächen, Kamerasteuerung |
references/scene-planning.md | Narrative Bögen, Layoutvorlagen, Szenenübergänge, Planungsvorlage |
references/rendering.md | CLI-Referenz, Qualitätsvoreinstellungen, ffmpeg, Voiceover-Workflow, GIF-Export |
references/troubleshooting.md | LaTeX-Fehler, Animationsfehler, häufige Fehler, Debugging |
references/animation-design-thinking.md | Wann animieren vs. statisch zeigen, Zerlegung, Tempo, Synchronisation der Erzählung |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, zeitbasierte Updater, Muster |
references/paper-explainer.md | Forschungsarbeiten in Animationen umwandeln – Arbeitsablauf, Vorlagen, Domänenmuster |
references/decorations.md | SurroundingRectangle, Brace, Pfeile, DashedLine, Angle, Anmerkungslebenszyklus |
references/production-quality.md | Checklisten vor dem Code, vor dem Rendern, nach dem Rendern, räumliches Layout, Farbe, Tempo |
Kreative Abweichung (nur verwenden, wenn der Benutzer experimentelle/kreative/einzigartige Ausgabe wünscht)
Wenn der Benutzer nach kreativen, experimentellen oder unkonventionellen Erklärungsansätzen fragt, wähle eine Strategie und denke darüber nach, BEVOR du die Animation entwirfst.
- SCAMPER – wenn der Benutzer eine neue Perspektive auf eine Standarderklärung wünscht
- Annahmenumkehrung – wenn der Benutzer herausfordern möchte, wie etwas normalerweise gelehrt wird
SCAMPER-Transformation
Nimm eine standardmäßige mathematische/technische Visualisierung und transformiere sie:
- Ersetzen (Substitute): Ersetze die Standard-Metapher (Zahlenstrahl → gewundener Pfad, Matrix → Stadtraster)
- Kombinieren (Combine): Vereinige zwei Erklärungsansätze (algebraisch + geometrisch gleichzeitig)
- Umkehren (Reverse): Leite rückwärts ab – beginne mit dem Ergebnis und zerlege es bis zu den Axiomen
- Modifizieren (Modify): Übertreibe einen Parameter, um zu zeigen, warum er wichtig ist (10-fache Lerngeschwindigkeit, 1000-fache Stichprobengröße)
- Eliminieren (Eliminate): Entferne alle Notation – erkläre rein durch Animation und räumliche Beziehungen
Annahmenumkehrung
- Liste auf, was „Standard“ daran ist, wie dieses Thema visualisiert wird (links-nach-rechts, 2D, diskrete Schritte, formale Notation)
- Wähle die grundlegendste Annahme
- Kehre sie um (rechts-nach-links-Ableitung, 3D-Einbettung eines 2D-Konzepts, kontinuierliches Morphing statt Schritte, Null Notation)
- Untersuche, was die Umkehrung offenlegt, was der Standardansatz verbirgt