<< All versions
Skill v1.0.1
currentAutomated scan100/100subinium/3b1b-style-animation-skill/3b1b-style-animation
19 files
──Details
PublishedOctober 13, 2026 at 06:30 AM
Content Hashsha256:3c31207abc442cfc...
Git SHAa47d18084300
Bump Typepatch
──Files
Files (1 file, 4.8 KB)
SKILL.md4.8 KBactive
SKILL.md · 174 lines · 4.8 KB
version: "1.0.1" name: 3b1b-style-animation description: Create mathematical animations in 3Blue1Brown style using Manim metadata: author: subinium version: 2.1.0 tags: manim, 3b1b, math, education, visualization, animation
When to use
Use this skill when creating mathematical animations, visualizations, or educational videos using Manim (ManimCE).
Quick Reference (Core Patterns)
Colors
python
BG = "#1c1c1c" # Background (MUST use)BLUE = "#3b82f6" # Primary, nodesYELLOW = "#fbbf24" # Highlights, emphasisGREEN = "#22c55e" # Success, done, positiveRED = "#ef4444" # Error, negativeGRAY = "#9ca3af" # Inactive, labels
Scene Template
python
from manim import *class MyScene(Scene):def construct(self):self.camera.background_color = "#1c1c1c"# Your code hereself.wait(2) # End padding
Audio-Synced Scene (StrictSync)
python
TIMING = {"01": {"start": 0, "end": 5.5},"02": {"start": 5.5, "end": 10.0},}class SyncedScene(Scene):def construct(self):self.camera.background_color = "#1c1c1c"for seg_id in sorted(TIMING.keys()):method = getattr(self, f"seg_{seg_id}", None)if method:self._run(seg_id, method)self.wait(2)def _run(self, seg_id, method):t = TIMING[seg_id]target = t["end"] - t["start"]start = self.renderer.timemethod()elapsed = self.renderer.time - startif elapsed < target:self.wait(target - elapsed)def seg_01(self):pass # Your animation
Animation Patterns
python
# Cascading appearself.play(LaggedStartMap(FadeIn, VGroup(*items), lag_ratio=0.15), run_time=1)# Highlightself.play(Flash(mob, color=YELLOW, line_length=0.2), run_time=0.3)self.play(Indicate(mob, color=YELLOW), run_time=0.5)# Transform textself.play(TransformMatchingStrings(old_text, new_text), run_time=0.5)# Coordinated (not sequential)self.play(FadeIn(a), Create(b), Write(c), run_time=1) # Good# self.play(FadeIn(a)); self.play(Create(b)) # Bad
Layout
python
# Screen zonestitle.to_edge(UP, buff=0.5)content.move_to(ORIGIN)info.to_edge(DOWN, buff=0.8)sidebar.to_edge(RIGHT, buff=1.0)# Spacing constantsNODE_GAP = 1.5 # Minimum between nodesEDGE_LABEL_OFFSET = 0.22 # Perpendicular to edge# Edge label placementmid = line.get_center()direction = end - startperp = np.array([-direction[1], direction[0], 0])perp = perp / np.linalg.norm(perp) * 0.22label.move_to(mid + perp)
Graph Creation Pattern
python
self.node_to_circle = {} # Dictionary mappingfor name, pos in positions.items():circle = Circle(radius=0.3, color=BLUE, fill_opacity=0.5, stroke_width=2)circle.move_to(pos)self.node_to_circle[name] = circle
Pedagogy (3b1b Style)
1. HOOK: Pose interesting question2. INTUITION: Visual understanding (NO formulas yet)3. STEP-BY-STEP: Concrete example with numbers4. FORMALIZATION: NOW introduce formula/name
Rules (Detailed Reference)
Setup & Basics
- rules/manim-setup.md - Installation
- rules/scene-basics.md - Scene structure
- rules/color-scheme.md - Full color palette
Animation
- rules/animation-patterns.md - LaggedStartMap, state save/restore
- rules/text-transforms.md - TransformMatchingStrings
- rules/updaters.md - add_updater for dynamic motion
- rules/seamless-transitions.md - Smooth transitions
Layout & Visual
- rules/layout-spacing.md - Spacing, screen zones
- rules/mobject-grouping.md - VGroup organization
- rules/visual-quality.md - Quality checks
- rules/camera-work.md - MovingCameraScene
Content Types
- rules/equations.md - LaTeX, MathTex
- rules/graphs.md - Function plotting
- rules/3d-surfaces.md - ThreeDScene
Audio & Sync
- rules/audio-sync.md - Audio-visual sync
- rules/strict-sync.md - StrictSyncScene
Philosophy
- rules/pedagogy.md - Intuition before formalism
MUST / MUST NOT
MUST
- Use
#1c1c1cbackground - Use
LaggedStartMapfor cascading effects - Group related elements with VGroup + dictionary
- End with
self.wait(2)for padding - Keep NODE_GAP >= 1.5
- Place edge labels perpendicular to edge
MUST NOT
- Use pure black (#000000) background
- Animate elements one-by-one with separate play() calls
- Place nodes too close (< 1.5 units apart)
- Show formulas before building intuition
- End play() without wait()