subinium/3b1b-style-animation-skill · Archived

3b1b-style-animation

Create mathematical animations in 3Blue1Brown style using Manim

First seen Jan 22, 2026

Installation

$ npx skills add subinium/3b1b-style-animation-skill --skill 3b1b-style-animation

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from subinium/3b1b-style-animation-skill.

npx skills add subinium/3b1b-style-animation-skill

Browse all from subinium/3b1b-style-animation-skill

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 7
License LICENSE
Default branch main
Open issues 0
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Version2.1.0
More metadata
author
subinium
version
2.1.0
tags
manim, 3b1b, math, education, visualization, animation

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,944 B
  • docs SUMMARY.md 91 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 51 installs

SKILL.md

When to use

Use this skill when creating mathematical animations, visualizations, or educational videos using Manim (ManimCE).


Quick Reference (Core Patterns)

Colors

BG = "#1c1c1c"           # Background (MUST use)
BLUE = "#3b82f6"         # Primary, nodes
YELLOW = "#fbbf24"       # Highlights, emphasis
GREEN = "#22c55e"        # Success, done, positive
RED = "#ef4444"          # Error, negative
GRAY = "#9ca3af"         # Inactive, labels

Scene Template

from manim import *

class MyScene(Scene):
    def construct(self):
        self.camera.background_color = "#1c1c1c"
        # Your code here
        self.wait(2)  # End padding

Audio-Synced Scene (StrictSync)

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.time
        method()
        elapsed = self.renderer.time - start
        if elapsed < target:
            self.wait(target - elapsed)

    def seg_01(self):
        pass  # Your animation

Animation Patterns

# Cascading appear
self.play(LaggedStartMap(FadeIn, VGroup(*items), lag_ratio=0.15), run_time=1)

# Highlight
self.play(Flash(mob, color=YELLOW, line_length=0.2), run_time=0.3)
self.play(Indicate(mob, color=YELLOW), run_time=0.5)

# Transform text
self.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

# Screen zones
title.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 constants
NODE_GAP = 1.5        # Minimum between nodes
EDGE_LABEL_OFFSET = 0.22  # Perpendicular to edge

# Edge label placement
mid = line.get_center()
direction = end - start
perp = np.array([-direction[1], direction[0], 0])
perp = perp / np.linalg.norm(perp) * 0.22
label.move_to(mid + perp)

Graph Creation Pattern

self.node_to_circle = {}  # Dictionary mapping
for 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 question
2. INTUITION: Visual understanding (NO formulas yet)
3. STEP-BY-STEP: Concrete example with numbers
4. FORMALIZATION: NOW introduce formula/name

Rules (Detailed Reference)

Setup & Basics

  • [rules/manim-setup.md](rules/manim-setup.md) - Installation
  • [rules/scene-basics.md](rules/scene-basics.md) - Scene structure
  • [rules/color-scheme.md](rules/color-scheme.md) - Full color palette

Animation

  • [rules/animation-patterns.md](rules/animation-patterns.md) - LaggedStartMap, state save/restore
  • [rules/text-transforms.md](rules/text-transforms.md) - TransformMatchingStrings
  • [rules/updaters.md](rules/updaters.md) - add_updater for dynamic motion
  • [rules/seamless-transitions.md](rules/seamless-transitions.md) - Smooth transitions

Layout & Visual

  • [rules/layout-spacing.md](rules/layout-spacing.md) - Spacing, screen zones
  • [rules/mobject-grouping.md](rules/mobject-grouping.md) - VGroup organization
  • [rules/visual-quality.md](rules/visual-quality.md) - Quality checks
  • [rules/camera-work.md](rules/camera-work.md) - MovingCameraScene

Content Types

  • [rules/equations.md](rules/equations.md) - LaTeX, MathTex
  • [rules/graphs.md](rules/graphs.md) - Function plotting
  • [rules/3d-surfaces.md](rules/3d-surfaces.md) - ThreeDScene

Audio & Sync

  • [rules/audio-sync.md](rules/audio-sync.md) - Audio-visual sync
  • [rules/strict-sync.md](rules/strict-sync.md) - StrictSyncScene

Philosophy

  • [rules/pedagogy.md](rules/pedagogy.md) - Intuition before formalism

MUST / MUST NOT

MUST

  • Use #1c1c1c background
  • Use LaggedStartMap for 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()