From 19c54ddbc8cc53ebfbd60a517270dcaf580e32b8 Mon Sep 17 00:00:00 2001 From: admin9webs Date: Fri, 10 Jul 2026 16:11:31 +0800 Subject: [PATCH] Add creative/manim-video --- skills/creative/manim-video/SKILL.md | 269 +++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 skills/creative/manim-video/SKILL.md diff --git a/skills/creative/manim-video/SKILL.md b/skills/creative/manim-video/SKILL.md new file mode 100644 index 0000000..e82c7cc --- /dev/null +++ b/skills/creative/manim-video/SKILL.md @@ -0,0 +1,269 @@ +--- +name: manim-video +description: "Manim CE animations: 3Blue1Brown math/algo videos." +version: 1.0.0 +platforms: [linux, macos, windows] +--- + +# Manim Video Production Pipeline + +## When to use + +Use when users request: animated explanations, math animations, concept visualizations, algorithm walkthroughs, technical explainers, 3Blue1Brown style videos, or any programmatic animation with geometric/mathematical content. Creates 3Blue1Brown-style explainer videos, algorithm visualizations, equation derivations, architecture diagrams, and data stories using Manim Community Edition. + +## Creative Standard + +This is educational cinema. Every frame teaches. Every animation reveals structure. + +**Before writing a single line of code**, articulate the narrative arc. What misconception does this correct? What is the "aha moment"? What visual story takes the viewer from confusion to understanding? The user's prompt is a starting point — interpret it with pedagogical ambition. + +**Geometry before algebra.** Show the shape first, the equation second. Visual memory encodes faster than symbolic memory. When the viewer sees the geometric pattern before the formula, the equation feels earned. + +**First-render excellence is non-negotiable.** The output must be visually clear and aesthetically cohesive without revision rounds. If something looks cluttered, poorly timed, or like "AI-generated slides," it is wrong. + +**Opacity layering directs attention.** Never show everything at full brightness. Primary elements at 1.0, contextual elements at 0.4, structural elements (axes, grids) at 0.15. The brain processes visual salience in layers. + +**Breathing room.** Every animation needs `self.wait()` after it. The viewer needs time to absorb what just appeared. Never rush from one animation to the next. A 2-second pause after a key reveal is never wasted. + +**Cohesive visual language.** All scenes share a color palette, consistent typography sizing, matching animation speeds. A technically correct video where every scene uses random different colors is an aesthetic failure. + +## Prerequisites + +Run `scripts/setup.sh` to verify all dependencies. Requires: Python 3.10+, Manim Community Edition v0.20+ (`pip install manim`), LaTeX (`texlive-full` on Linux, `mactex` on macOS), and ffmpeg. Reference docs tested against Manim CE v0.20.1. + +## Modes + +| Mode | Input | Output | Reference | +|------|-------|--------|-----------| +| **Concept explainer** | Topic/concept | Animated explanation with geometric intuition | `references/scene-planning.md` | +| **Equation derivation** | Math expressions | Step-by-step animated proof | `references/equations.md` | +| **Algorithm visualization** | Algorithm description | Step-by-step execution with data structures | `references/graphs-and-data.md` | +| **Data story** | Data/metrics | Animated charts, comparisons, counters | `references/graphs-and-data.md` | +| **Architecture diagram** | System description | Components building up with connections | `references/mobjects.md` | +| **Paper explainer** | Research paper | Key findings and methods animated | `references/scene-planning.md` | +| **3D visualization** | 3D concept | Rotating surfaces, parametric curves, spatial geometry | `references/camera-and-3d.md` | + +## Stack + +Single Python script per project. No browser, no Node.js, no GPU required. + +| Layer | Tool | Purpose | +|-------|------|---------| +| Core | Manim Community Edition | Scene rendering, animation engine | +| Math | LaTeX (texlive/MiKTeX) | Equation rendering via `MathTex` | +| Video I/O | ffmpeg | Scene stitching, format conversion, audio muxing | +| TTS | ElevenLabs / Qwen3-TTS (optional) | Narration voiceover | + +## Pipeline + +``` +PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW +``` + +1. **PLAN** — Write `plan.md` with narrative arc, scene list, visual elements, color palette, voiceover script +2. **CODE** — Write `script.py` with one class per scene, each independently renderable +3. **RENDER** — `manim -ql script.py Scene1 Scene2 ...` for draft, `-qh` for production +4. **STITCH** — ffmpeg concat of scene clips into `final.mp4` +5. **AUDIO** (optional) — Add voiceover and/or background music via ffmpeg. See `references/rendering.md` +6. **REVIEW** — Render preview stills, verify against plan, adjust + +## Project Structure + +``` +project-name/ + plan.md # Narrative arc, scene breakdown + script.py # All scenes in one file + concat.txt # ffmpeg scene list + final.mp4 # Stitched output + media/ # Auto-generated by Manim + videos/script/480p15/ +``` + +## Creative Direction + +### Color Palettes + +| Palette | Background | Primary | Secondary | Accent | Use case | +|---------|-----------|---------|-----------|--------|----------| +| **Classic 3B1B** | `#1C1C1C` | `#58C4DD` (BLUE) | `#83C167` (GREEN) | `#FFFF00` (YELLOW) | General math/CS | +| **Warm academic** | `#2D2B55` | `#FF6B6B` | `#FFD93D` | `#6BCB77` | Approachable | +| **Neon tech** | `#0A0A0A` | `#00F5FF` | `#FF00FF` | `#39FF14` | Systems, architecture | +| **Monochrome** | `#1A1A2E` | `#EAEAEA` | `#888888` | `#FFFFFF` | Minimalist | + +### Animation Speed + +| Context | run_time | self.wait() after | +|---------|----------|-------------------| +| Title/intro appear | 1.5s | 1.0s | +| Key equation reveal | 2.0s | 2.0s | +| Transform/morph | 1.5s | 1.5s | +| Supporting label | 0.8s | 0.5s | +| FadeOut cleanup | 0.5s | 0.3s | +| "Aha moment" reveal | 2.5s | 3.0s | + +### Typography Scale + +| Role | Font size | Usage | +|------|-----------|-------| +| Title | 48 | Scene titles, opening text | +| Heading | 36 | Section headers within a scene | +| Body | 30 | Explanatory text | +| Label | 24 | Annotations, axis labels | +| Caption | 20 | Subtitles, fine print | + +### Fonts + +**Use monospace fonts for all text.** Manim's Pango renderer produces broken kerning with proportional fonts at all sizes. See `references/visual-design.md` for full recommendations. + +```python +MONO = "Menlo" # define once at top of file + +Text("Fourier Series", font_size=48, font=MONO, weight=BOLD) # titles +Text("n=1: sin(x)", font_size=20, font=MONO) # labels +MathTex(r"\nabla L") # math (uses LaTeX) +``` + +Minimum `font_size=18` for readability. + +### Per-Scene Variation + +Never use identical config for all scenes. For each scene: +- **Different dominant color** from the palette +- **Different layout** — don't always center everything +- **Different animation entry** — vary between Write, FadeIn, GrowFromCenter, Create +- **Different visual weight** — some scenes dense, others sparse + +## Workflow + +### Step 1: Plan (plan.md) + +Before any code, write `plan.md`. See `references/scene-planning.md` for the comprehensive template. + +### Step 2: Code (script.py) + +One class per scene. Every scene is independently renderable. + +```python +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("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO) + self.add_subcaption("Why does this work?", duration=2) + self.play(Write(title), run_time=1.5) + self.wait(1.0) + self.play(FadeOut(title), run_time=0.5) +``` + +Key patterns: +- **Subtitles** on every animation: `self.add_subcaption("text", duration=N)` or `subcaption="text"` on `self.play()` +- **Shared color constants** at file top for cross-scene consistency +- **`self.camera.background_color`** set in every scene +- **Clean exits** — FadeOut all mobjects at scene end: `self.play(FadeOut(Group(*self.mobjects)))` + +### Step 3: Render + +```bash +manim -ql script.py Scene1_Introduction Scene2_CoreConcept # draft +manim -qh script.py Scene1_Introduction Scene2_CoreConcept # production +``` + +### Step 4: Stitch + +```bash +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 +``` + +### Step 5: Review + +```bash +manim -ql --format=png -s script.py Scene2_CoreConcept # preview still +``` + +## Critical Implementation Notes + +### Raw Strings for LaTeX +```python +# WRONG: MathTex("\frac{1}{2}") +# RIGHT: +MathTex(r"\frac{1}{2}") +``` + +### buff >= 0.5 for Edge Text +```python +label.to_edge(DOWN, buff=0.5) # never < 0.5 +``` + +### FadeOut Before Replacing Text +```python +self.play(ReplacementTransform(note1, note2)) # not Write(note2) on top +``` + +### Never Animate Non-Added Mobjects +```python +self.play(Create(circle)) # must add first +self.play(circle.animate.set_color(RED)) # then animate +``` + +## Performance Targets + +| Quality | Resolution | FPS | Speed | +|---------|-----------|-----|-------| +| `-ql` (draft) | 854x480 | 15 | 5-15s/scene | +| `-qm` (medium) | 1280x720 | 30 | 15-60s/scene | +| `-qh` (production) | 1920x1080 | 60 | 30-120s/scene | + +Always iterate at `-ql`. Only render `-qh` for final output. + +## References + +| File | Contents | +|------|----------| +| `references/animations.md` | Core animations, rate functions, composition, `.animate` syntax, timing patterns | +| `references/mobjects.md` | Text, shapes, VGroup/Group, positioning, styling, custom mobjects | +| `references/visual-design.md` | 12 design principles, opacity layering, layout templates, color palettes | +| `references/equations.md` | LaTeX in Manim, TransformMatchingTex, derivation patterns | +| `references/graphs-and-data.md` | Axes, plotting, BarChart, animated data, algorithm visualization | +| `references/camera-and-3d.md` | MovingCameraScene, ThreeDScene, 3D surfaces, camera control | +| `references/scene-planning.md` | Narrative arcs, layout templates, scene transitions, planning template | +| `references/rendering.md` | CLI reference, quality presets, ffmpeg, voiceover workflow, GIF export | +| `references/troubleshooting.md` | LaTeX errors, animation errors, common mistakes, debugging | +| `references/animation-design-thinking.md` | When to animate vs show static, decomposition, pacing, narration sync | +| `references/updaters-and-trackers.md` | ValueTracker, add_updater, always_redraw, time-based updaters, patterns | +| `references/paper-explainer.md` | Turning research papers into animations — workflow, templates, domain patterns | +| `references/decorations.md` | SurroundingRectangle, Brace, arrows, DashedLine, Angle, annotation lifecycle | +| `references/production-quality.md` | Pre-code, pre-render, post-render checklists, spatial layout, color, tempo | + +--- + +## Creative Divergence (use only when user requests experimental/creative/unique output) + +If the user asks for creative, experimental, or unconventional explanatory approaches, select a strategy and reason through it BEFORE designing the animation. + +- **SCAMPER** — when the user wants a fresh take on a standard explanation +- **Assumption Reversal** — when the user wants to challenge how something is typically taught + +### SCAMPER Transformation +Take a standard mathematical/technical visualization and transform it: +- **Substitute**: replace the standard visual metaphor (number line → winding path, matrix → city grid) +- **Combine**: merge two explanation approaches (algebraic + geometric simultaneously) +- **Reverse**: derive backward — start from the result and deconstruct to axioms +- **Modify**: exaggerate a parameter to show why it matters (10x the learning rate, 1000x the sample size) +- **Eliminate**: remove all notation — explain purely through animation and spatial relationships + +### Assumption Reversal +1. List what's "standard" about how this topic is visualized (left-to-right, 2D, discrete steps, formal notation) +2. Pick the most fundamental assumption +3. Reverse it (right-to-left derivation, 3D embedding of a 2D concept, continuous morphing instead of steps, zero notation) +4. Explore what the reversal reveals that the standard approach hides