Manim Video-Produktionspipeline
Kreativstandard
Dies ist pädagogisches Kino. Jeder Frame lehrt. Jede Animation offenbart Struktur.
Bevor eine einzige Zeile Code geschrieben wird, artikulieren Sie den narrativen Bogen. Welches Missverständnis korrigiert dies? Was ist der „Aha-Moment“? Welche visuelle Geschichte führt den Betrachter von Verwirrung zu Verständnis? Die Eingabe des Benutzers ist ein Ausgangspunkt – interpretieren Sie sie mit pädagogischem Ehrgeiz.
Geometrie vor Algebra. Zeigen Sie 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 beim ersten Rendern ist nicht verhandelbar. Die Ausgabe muss visuell klar und ästhetisch kohärent sein, ohne Überarbeitungsrunden. Wenn etwas überladen, schlecht getaktet oder wie „KI-generierte Folien“ aussieht, ist es falsch.
Opazitätsschichtung lenkt die Aufmerksamkeit. Zeigen Sie niemals alles bei 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 benötigt ein self.wait() danach. Der Betrachter braucht Zeit, um das gerade Erschienene aufzunehmen. Eile niemals von einer Animation zur nächsten. Eine 2-sekündige Pause nach einer wichtigen Enthüllung ist nie verschwendet.
Kohärente visuelle Sprache. Alle Szenen teilen sich eine Farbpalette, konsistente Typografie-Größen, passende Animationsgeschwindigkeiten. Ein technisch korrektes Video, in dem jede Szene zufällig unterschiedliche Farben verwendet, ist ein ästhetischer Misserfolg.
Voraussetzungen
Führen Sie 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. Die Referenzdokumentation wurde mit Manim CE v0.20.1 getestet.
Modi
| Modus | Eingabe | Ausgabe | Referenz |
|---|---|---|---|
| Konzepterklärung | Thema/Konzept | Animierte Erklärung mit geometrischer Intuition | references/scene-planning.md |
| Gleichungsableitung | Mathematische Ausdrücke | Schrittweise animierte Beweisführung | references/equations.md |
| Algorithmusvisualisierung | Algorithmusbeschreibung | Schrittweise Ausführung mit Datenstrukturen | references/graphs-and-data.md |
| Datengeschichte | Daten/Metriken | Animierte Diagramme, Vergleiche, Zähler | references/graphs-and-data.md |
| Architekturdiagramm | Systembeschreibung | Komponenten, die sich mit Verbindungen aufbauen | references/mobjects.md |
| Paper-Erklärung | Forschungspapier | Zentrale Erkenntnisse und Methoden animiert | references/scene-planning.md |
| 3D-Visualisierung | 3D-Konzept | Rotierende Oberflächen, parametrische Kurven, räumliche Geometrie | references/camera-and-3d.md |
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) | Gleichungsrendering über MathTex |
| Video-E/A | ffmpeg | Szenenzusammenfügung, Formatkonvertierung, Audio-Muxing |
| TTS | ElevenLabs / Qwen3-TTS (optional) | Erzählende Sprachausgabe |
Pipeline
PLAN --> CODE --> RENDERN --> ZUSAMMENFÜGEN --> AUDIO (optional) --> PRÜFEN
- PLAN – Schreiben Sie
plan.mdmit narrativem Bogen, Szenenliste, visuellen Elementen, Farbpalette, Voiceover-Skript - CODE – Schreiben Sie
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 Szenenclips zu
final.mp4 - AUDIO (optional) – Fügen Sie Voiceover und/oder Hintergrundmusik über ffmpeg hinzu. Siehe
references/rendering.md - PRÜFEN – Rendern Sie Vorschaustandbilder, überprüfen Sie sie gegen den Plan, passen Sie an
Projektstruktur
projekt-name/
plan.md # Narrativer Bogen, Szenenaufschlüsselung
script.py # Alle Szenen in einer Datei
concat.txt # ffmpeg-Szenenliste
final.mp4 # Zusammengefügte Ausgabe
media/ # Automatisch von Manim generiert
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/Informatik |
| 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 erscheinen | 1,5s | 1,0s |
| Schlüsselgleichung enthüllen | 2,0s | 2,0s |
| Transformieren/Morphen | 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 | Erläuterungstext |
| Label | 24 | Annotationen, Achsenbeschriftungen |
| Bildunterschrift | 20 | Untertitel, Kleingedrucktes |
Schriftarten
Verwenden Sie Monospace-Schriftarten für den gesamten 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" # einmal am Anfang der Datei 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.
Pro-Szene-Variation
Verwenden Sie niemals identische Konfigurationen für alle Szenen. Variieren Sie für jede Szene:
- Eine andere dominante Farbe aus der Palette
- Ein anderes Layout – zentrieren Sie nicht immer alles
- Eine andere Animationseingangsart – variieren Sie zwischen Write, FadeIn, GrowFromCenter, Create
- Ein anderes visuelles Gewicht – manche Szenen dicht, andere spärlich
Arbeitsablauf
Schritt 1: Planen (plan.md)
Schreiben Sie vor jeglichem Code 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_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 Mobjekte am Szenenende:
self.play(FadeOut(Group(*self.mobjects)))
Schritt 3: Rendern
manim -ql script.py Szene1_Einfuehrung Szene2_Kernkonzept # Entwurf
manim -qh script.py Szene1_Einfuehrung Szene2_Kernkonzept # Produktion
Schritt 4: Zusammenfügen
cat > concat.txt << 'EOF'
datei 'media/videos/script/480p15/Szene1_Einfuehrung.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
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 dem Ersetzen von Text
self.play(ReplacementTransform(notiz1, notiz2)) # nicht Write(notiz2) darüber
Niemals nicht-hinzugefügte Mobjekte animieren
self.play(Create(kreis)) # muss zuerst hinzugefügt worden sein
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 |
Iterieren Sie immer mit -ql. Rendern Sie -qh nur für die finale Ausgabe.
Referenzen
| Datei | Inhalt |
|---|---|
references/animations.md | Kernanimationen, Rate-Funktionen, Komposition, .animate-Syntax, Timing-Muster |
references/mobjects.md | Text, Formen, VGroup/Group, Positionierung, Styling, benutzerdefinierte Mobjekte |
references/visual-design.md | 12 Designprinzipien, Opazitätsschichtung, 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ätseinstellungen, ffmpeg, Voiceover-Arbeitsablauf, GIF-Export |
references/troubleshooting.md | LaTeX-Fehler, Animationsfehler, häufige Fehler, Debugging |
references/animation-design-thinking.md | Wann animieren vs. statisch anzeigen, Zerlegung, Tempo, Erzähl-Synchronisation |
references/updaters-and-trackers.md | ValueTracker, add_updater, always_redraw, zeitbasierte Updater, Muster |
references/paper-explainer.md | Forschungspapiere in Animationen umwandeln – Arbeitsablauf, Vorlagen, Domänenmuster |
references/decorations.md | SurroundingRectangle, Brace, Pfeile, DashedLine, Winkel, Annotationslebenszyklus |
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 anfordert)
Wenn der Benutzer nach kreativen, experimentellen oder unkonventionellen Erklärungsansätzen fragt, wählen Sie eine Strategie und denken Sie sie VOR dem Entwurf der Animation durch.
- SCAMPER – wenn der Benutzer eine neue Interpretation einer Standarderklärung wünscht
- Annahmenumkehrung – wenn der Benutzer herausfordern möchte, wie etwas normalerweise gelehrt wird
SCAMPER-Transformation
Nehmen Sie eine standardmäßige mathematische/technische Visualisierung und transformieren Sie sie:
- Substitute (Ersetzen): Ersetzen Sie die standardmäßige visuelle Metapher (Zahlenstrahl → gewundener Pfad, Matrix → Stadtgitter)
- Combine (Kombinieren): Verschmelzen Sie zwei Erklärungsansätze (algebraisch + geometrisch gleichzeitig)
- Reverse (Umkehren): Leiten Sie rückwärts ab – beginnen Sie mit dem Ergebnis und dekonstruieren Sie zu Axiomen
- Modify (Modifizieren): Übertreiben Sie einen Parameter, um zu zeigen, warum er wichtig ist (10x die Lernrate, 1000x die Stichprobengröße)
- Eliminate (Entfernen): Entfernen Sie die gesamte Notation – erklären Sie ausschließlich durch Animation und räumliche Beziehungen
Annahmenumkehrung
- Listen Sie auf, was „standardmäßig“ daran ist, wie dieses Thema visualisiert wird (links-nach-rechts, 2D, diskrete Schritte, formale Notation)
- Wählen Sie die fundamentalste Annahme
- Kehren Sie sie um (rechts-nach-links-Ableitung, 3D-Einbettung eines 2D-Konzepts, kontinuierliches Morphen anstelle von Schritten, null Notation)
- Erkunden Sie, was die Umkehrung enthüllt, das der standardmäßige Ansatz verbirgt