---
name: "manim-animator"
description: "Codebasierte Erklär-Animationen mit Manim für Mathe, Algorithmen, 3Blue1Brown-Stil."
---

# manim-animator

Erstellen Sie codebasierte erklärende Animationsvideos und präzise Vektorgrafiken mit der Manim-Engine.

## Wann verwenden

- **Mathematische Visualisierungen** (Funktionen, Integrale, Linear Algebra)
- **Algorithmus-Durchläufe** (Sorting, Graph-Algos, DP)
- **Wissenschaftliche Konzept-Erklärungen** (Physik, Chemie)
- **Schrittweise Herleitungen** mit LaTeX-Gleichungen
- **3Blue1Brown-Stil** Animationen
- User erwähnt explizit: **Manim, ManimCE, ManimGL**

## Wann NICHT

- ❌ Fotorealistische AI-Video-Generation → `video-generator`
- ❌ Standard-Timeline-Editing → `html-video-production`
- ❌ Talking-Head / Avatar → Manus native

## Voraussetzungen

```bash
# ManimCE (Community Edition, empfohlen)
pip install manim
# + System-Deps:
apt install ffmpeg libcairo2-dev libpango1.0-dev texlive-latex-extra texlive-fonts-extra
```

Verifizieren: `manim --version`

## Workflow

### 1. Konzept klären
- Was soll gezeigt werden? (1 Hauptidee pro Szene)
- LaTeX-Formeln nötig? → texlive-extra muss da sein
- Dauer? (Manim ist langsam zu rendern — Realität: 1min Output ≈ 5-15min Render)
- Auflösung? (`-ql` low/`-qm` med/`-qh` high/`-qk` 4k)

### 2. Scene schreiben

`example.py`:
```python
from manim import *

class MyScene(Scene):
    def construct(self):
        title = Text("Mein Konzept").scale(1.5)
        self.play(Write(title))
        self.wait(1)
        self.play(FadeOut(title))
        
        eq = MathTex(r"e^{i\pi} + 1 = 0")
        self.play(Write(eq))
        self.wait(2)
```

### 3. Rendern

```bash
manim -pqh example.py MyScene
# -p preview, -q quality (l/m/h/k), 
# -o filename optional
```

Output: `media/videos/<file>/<quality>/MyScene.mp4`

### 4. Typische Patterns

**Funktionsplot:**
```python
ax = Axes(x_range=[-3,3], y_range=[-1,8])
graph = ax.plot(lambda x: x**2, color=BLUE)
self.play(Create(ax), Create(graph))
```

**Transformation:**
```python
self.play(Transform(circle, square))
```

**LaTeX-Gleichung schrittweise:**
```python
eq1 = MathTex("a^2 + b^2 = c^2")
eq2 = MathTex("a^2 + b^2 - c^2 = 0")
self.play(Write(eq1))
self.play(TransformMatchingTex(eq1, eq2))
```

**Camera-Movement (3D):**
```python
class My3D(ThreeDScene):
    def construct(self):
        self.set_camera_orientation(phi=75*DEGREES, theta=30*DEGREES)
        self.begin_ambient_camera_rotation(rate=0.2)
        ...
```

### 5. Voice-Over Sync

Mit `manim-voiceover`:
```python
from manim_voiceover import VoiceoverScene
from manim_voiceover.services.gtts import GTTSService

class VoScene(VoiceoverScene):
    def construct(self):
        self.set_speech_service(GTTSService())
        with self.voiceover(text="Hier sehen wir Pi.") as tracker:
            self.play(Write(pi_symbol), run_time=tracker.duration)
```

## Best Practices

- **Erst -ql rendern** zum Iterieren (schnell), dann -qh fürs Final
- **Animations atomar halten** — eine Idee pro `self.play(...)`
- **`run_time`** explizit setzen für Timing-Kontrolle
- **Farben:** Manim-Konstanten nutzen (`BLUE`, `RED`, `YELLOW`, ...) für Konsistenz
- **LaTeX prüfen:** schon vorab `latex` Compile lokal testen wenn Formeln komplex
- **Code-Beispiel:** ManimCE-Docs https://docs.manim.community/

## Fallstricke

- ⚠️ ManimCE vs ManimGL (3Blue1Brown-Version) — APIs unterschiedlich. Standard: **ManimCE**.
- ⚠️ Render-Zeit ist lang — User informieren bei großen Scenes
- ⚠️ LaTeX-Fails → texlive-extras checken
- ⚠️ `media/` Verzeichnis wird groß — nach Lieferung aufräumen
- ⚠️ Bei Voice-Over: Sprache vom TTS-Provider abhängig

## Lieferung

- `MEDIA:<pfad>.mp4` finale Datei
- Source `.py` im Workspace ablegen (reproducible!)
- Bei Bedarf: Thumbnail-PNG `-s` Flag (last-frame)
