Was macht Manim Video-Produktions-Pipeline?
Kreativer Standard
Dies ist pädagogisches Kino. Jeder Frame lehrt. Jede Animation offenbart Struktur.
Bevor eine einzige Zeile Code geschrieben wird, formuliere den Erzählbogen. Welches Missverständnis korrigiert dies? Was ist der "Aha-Moment"? Welche visuelle Geschichte führt den Betrachter von Verwirrung zu Verständnis? Der Prompt des Benutzers ist ein Ausgangspunkt – interpretiere ihn 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 Betrachter das geometrische Muster vor der Formel sieht, fühlt sich die Gleichung verdient an.
Exzellenz im ersten Render ist nicht verhandelbar. Die Ausgabe muss visuell klar und ästhetisch kohärent sein, ohne Überarbeitungsrunden. Wenn etwas überladen, schlecht getimed oder wie "KI-generierte Folien" aussieht, ist es falsch.
Schichtung der Deckkraft lenkt 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 Auffälligkeit in Schichten.
Atempause. Jede Animation braucht danach ein self.wait(). Der Betrachter braucht Zeit, um das gerade Erscheinene zu verarbeiten. Eile niemals von einer Animation zur nächsten. Eine 2-Sekunden-Pause nach einer wichtigen Enthüllung ist niemals verschwendet.
Kohärente visuelle Sprache. Alle Szenen teilen sich eine Farbpalette, konsistente Typografie-Größen und passende Animationsgeschwindigkeiten. Ein technisch korrektes Video, in dem jede Szene zufällige, unterschiedliche Farben verwendet, ist ein ästhetischer Misserfolg.
Voraussetzungen
Führe scripts/setup.sh aus, um alle Abhängigkeiten zu überprüfen. Erfordert: Python 3.10+, Manim Community Edition v0.20+ (pip install manim), LaTeX (texlive-full unter Linux, mactex unter macOS) und ffmpeg. Referenzdokumentation getestet mit Manim CE v0.20.1.
Modi
| Modus | Eingabe | Ausgabe | Referenz |
|---|---|---|---|
| Konzept-Erklärung | Thema/Konzept | Animierte Erklärung mit geometrischer Intuition | references/scene-planning.md |
| Gleichungsherleitung | Mathematische Ausdrücke | Schrittweise animierter Beweis | references/equations.md |
| Algorithmus-Visualisierung | Algorithmus-Beschreibung | Schrittweise Ausführung mit Datenstrukturen | references/graphs-and-data.md |
| Daten-Geschichte | Daten/Metriken | Animierte Diagramme, Vergleiche, Zähler | references/graphs-and-data.md |
| Architekturdiagramm | Systembeschreibung | Aufbauende Komponenten mit Verbindungen | references/mobjects.md |
| Paper-Erklärung | Forschungsarbeit | Animierte Schlüsselergebnisse 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, Animations-Engine |
| Mathematik | LaTeX (texlive/MiKTeX) | Gleichungs-Rendering via MathTex |
| Video I/O | ffmpeg | Szenen-Zusammenfügung, Formatkonvertierung, Audio-Muxing |
| TTS | ElevenLabs / Qwen3-TTS (optional) | Sprach-Overlay |
Pipeline
PLANEN --> CODIEREN --> RENDERN --> ZUSAMMENFÜGEN --> AUDIO (optional) --> ÜBERPRÜFEN
- PLANEN — Schreibe
plan.mdmit Erzählbogen, Szenenliste, visuellen Elementen, Farbpalette, Voiceover-Skript - CODIEREN — Schreibe
script.pymit einer Klasse pro Szene, jede unabhängig renderbar - RENDERN —
manim -ql script.py Scene1 Scene2 ...für Entwurf,-qhfür Produktion - ZUSAMMENFÜGEN — ffmpeg concat der Szenen-Clips zu
final.mp4 - AUDIO (optional) — Füge Voiceover und/oder Hintergrundmusik via ffmpeg hinzu. Siehe
references/rendering.md - ÜBERPRÜFEN — Rendere Vorschaubilder, überprüfe mit Plan, passe an
Projektstruktur
projekt-name/
plan.md # Erzählbogen, Szenenaufteilung
script.py # Alle Szenen in einer Datei
concat.txt # ffmpeg Szenenliste
final.mp4 # Zusammengefügte Ausgabe
media/ # Automatisch von Manim erzeugt
videos/script/480p15/
Kreative Richtlinien
Farbpaletten
| Palette | Hintergrund | Primär | Sekundär | Akzent | Anwendungsfall |
|---|---|---|---|---|---|
| Klassisch 3B1B | #1C1C1C | #58C4DD (BLAU) | #83C167 (GRÜN) | #FFFF00 (GELB) | Allgemein Mathe/CS |
| Warm akademisch | #2D2B55 | #FF6B6B | #FFD93D | #6BCB77 | Einladend |
| Neon Tech | #0A0A0A | #00F5FF | #FF00FF | #39FF14 | Systeme, Architektur |
| Monochrom | #1A1A2E | #EAEAEA | #888888 | #FFFFFF | Minimalistisch |
Animationsgeschwindigkeit
| Kontext | run_time | self.wait() danach |
|---|---|---|
| Titel/Einführung erscheint | 1.5s | 1.0s |
| Wichtige Gleichungsenthüllung | 2.0s | 2.0s |
| Transformieren/Morph | 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ärender Text |
| Beschriftung | 24 | Annotationen, Achsenbeschriftungen |
| Untertitel | 20 | Untertitel, Kleingedrucktes |
Schriftarten
Verwende Monospace-Schriftarten für den gesamten Text. Manims Pango-Renderer erzeugt mit proportionalen Schriftarten bei allen Größen defekte Laufweiten. Siehe references/visual-design.md für vollständige Empfehlungen.
MONO = "Menlo" # einmal oben in der Datei definieren
Text("Fourier-Reihe", font_size=48, font=MONO, weight=BOLD) # Titel
Text("n=1: sin(x)", font_size=20, font=MONO) # Beschriftungen
MathTex(r"\nabla L") # Mathematik (verwendet LaTeX)
Mindest font_size=18 für Lesbarkeit.
Variation pro Szene
Verwende niemals identische Konfiguration für alle Szenen. Für jede Szene:
- Andere dominierende Farbe aus der Palette
- Anderes Layout – zentriere nicht immer alles
- Anderer Animationseintritt – variiere zwischen Write, FadeIn, GrowFromCenter, Create
- Anderes visuelles Gewicht – manche Szenen dicht, andere spärlich
Arbeitsablauf
Schritt 1: Planen (plan.md)
Vor jedem Code, schreibe 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 Scene1_Einfuehrung(Scene):
def construct(self):
self.camera.background_color = BG
title = Text("Warum funktioniert das?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
self.add_subcaption("Warum funktioniert das?", duration=2)
self.play(Write(title), run_time=1.5)
self.wait(1.0)
self.play(FadeOut(title), 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 Scene1_Einfuehrung Scene2_Kernkonzept # Entwurf
manim -qh script.py Scene1_Einfuehrung Scene2_Kernkonzept # Produktion
Schritt 4: Zusammenfügen
cat > concat.txt << 'EOF'
datei 'media/videos/script/480p15/Scene1_Einfuehrung.mp4'
datei 'media/videos/script/480p15/Scene2_Kernkonzept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4
Schritt 5: Überprüfen
manim -ql --format=png -s script.py Scene2_Kernkonzept # Vorschaubild
Kritische Implementierungshinweise
Raw Strings für LaTeX
# FALSCH: MathTex("\frac{1}{2}")
# RICHTIG:
MathTex(r"\frac{1}{2}")
buff >= 0.5 für Randtext
label.to_edge(DOWN, buff=0.5) # niemals < 0.5
FadeOut vor 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. Nur -qh für die endgültige Ausgabe rendern.
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, Deckkraftschichtung, Layoutvorlagen, Farbpaletten |
references/equations.md | LaTeX in Manim, TransformMatchingTex, Herleitungsmuster |
references/graphs-and-data.md | Achsen, Plotten, BarChart, animierte Daten, Algorithmus-Visualisierung |
references/camera-and-3d.md | MovingCameraScene, ThreeDScene, 3D-Oberflächen, Kamerasteuerung |
references/scene-planning.md | Erzählbö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, Erzählsynchronisation |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, zeitbasierte Updater, Muster |
references/paper-explainer.md | Forschungsarbeiten in Animationen verwandeln – Workflow, Vorlagen, Domänenmuster |
references/decorations.md | SurroundingRectangle, Brace, Pfeile, DashedLine, Angle, Lebenszyklus von Annotationen |
references/production-quality.md | Vor-Code-, Vor-Render-, Nach-Render-Checklisten, 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 aus und denke sie DURCH, bevor du die Animation entwirfst.
- SCAMPER – wenn der Benutzer eine neue Perspektive auf eine Standarderklärung wünscht
- Annahmeumkehrung – wenn der Benutzer herausfordern möchte, wie etwas typischerweise gelehrt wird
SCAMPER-Transformation
Nimm eine standardmäßige mathematische/technische Visualisierung und transformiere sie:
- Substitute (Ersetzen): Ersetze die standardmäßige visuelle Metapher (Zahlenstrahl → gewundener Pfad, Matrix → Stadtplan)
- Combine (Kombinieren): Verschmelze zwei Erklärungsansätze (algebraisch + geometrisch gleichzeitig)
- Reverse (Umkehren): Leite rückwärts her – beginne mit dem Ergebnis und zerlege es bis zu den Axiomen
- Modify (Modifizieren): Übertreibe einen Parameter, um zu zeigen, warum er wichtig ist (10x die Lernrate, 1000x die Stichprobengröße)
- Eliminate (Entfernen): Entferne die gesamte Notation – erkläre rein durch Animation und räumliche Beziehungen
Annahmeumkehrung
- Liste auf, was "standardmäßig" 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 Herleitung, 3D-Einbettung eines 2D-Konzepts, kontinuierliches Morphen anstatt Schritte, null Notation)
- Erforsche, was die Umkehrung offenbart, was der Standardansatz verbirgt