Back to creative
creative v1.0.0 7.7 min read 264 lines

manim-video

Manim Community Edition으로 수학/기술 애니메이션 제작 — 3Blue1Brown 스타일 설명 영상

Manim Video Production Pipeline

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

  • PLAN — Write plan.md with narrative arc, scene list, visual elements, color palette, voiceover script
  • CODE — Write script.py with one class per scene, each independently renderable
  • RENDERmanim -ql script.py Scene1 Scene2 ... for draft, -qh for production
  • STITCH — ffmpeg concat of scene clips into final.mp4
  • AUDIO (optional) — Add voiceover and/or background music via ffmpeg. See references/rendering.md
  • 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.

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.

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

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # draft
manim -qh script.py Scene1_Introduction Scene2_CoreConcept # production

Step 4: Stitch

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

manim -ql --format=png -s script.py Scene2_CoreConcept  # preview still

Critical Implementation Notes

Raw Strings for LaTeX


# WRONG: MathTex("\frac{1}{2}")

RIGHT:


MathTex(r"\frac{1}{2}")

buff >= 0.5 for Edge Text


label.to_edge(DOWN, buff=0.5)  # never < 0.5

FadeOut Before Replacing Text


self.play(ReplacementTransform(note1, note2))  # not Write(note2) on top

Never Animate Non-Added Mobjects


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


  • List what's "standard" about how this topic is visualized (left-to-right, 2D, discrete steps, formal notation)
  • Pick the most fundamental assumption
  • Reverse it (right-to-left derivation, 3D embedding of a 2D concept, continuous morphing instead of steps, zero notation)
  • Explore what the reversal reveals that the standard approach hides

Related Skills / 관련 스킬

ace-step-music

Kaggle T4 GPU에서 ACE-Step 1.5 터보로 가사 없는 인스트루멘탈 음악 생성 — 30초~60초 곡, 프롬프트 기반

creative v1.0.0

architecture-diagram

Generate dark-themed SVG diagrams of software systems and cloud infrastructure as standalone HTML files with inline SVG graphics. Semantic component colors (cyan=frontend, emerald=backend, violet=database, amber=cloud/AWS, rose=security, orange=message bus), JetBrains Mono font, grid background. Best suited for software architecture, cloud/VPC topology, microservice maps, service-mesh diagrams, database + API layer diagrams, security groups, message buses — anything that fits a tech-infra deck with a dark aesthetic. If a more specialized diagramming skill exists for the subject (scientific, educational, hand-drawn, animated, etc.), prefer that — otherwise this skill can also serve as a general-purpose SVG diagram fallback. Based on Cocoon AI's architecture-diagram-generator (MIT).

ascii-art

pyfiglet(571폰트), cowsay, boxes, toilet 등으로 ASCII 아트 생성. API 키 불필요.

ascii-video

ASCII 아트 비디오 프로덕션 파이프라인 — 비디오/오디오/이미지를 컬러 ASCII 캐릭터 비디오(MP4, GIF)로 변환