mcpField
3
3b1b-style-animation

3b1b-style-animation

github.com/subinium创意与媒体770 次安装40 周前更新
代码仓库

关于 3b1b-style-animation

3b1b-style-animation 是用于 Manim(ManimCE)的动画创作技能,面向数学动画、可视化和教育视频制作。它提供场景、动画、布局、音画同步及教学设计方面的模式和规则。

主要功能

  1. 01提供 Manim 场景模板
  2. 02指导动画效果与文本变换
  3. 03规定颜色、布局和元素间距
  4. 04支持图表、方程与 3D 曲面内容
  5. 05提供音画同步规则
  6. 06强调先建立直觉再形式化

适用场景

  1. 01制作数学概念动画
  2. 02构建图表或 3D 曲面可视化
  3. 03制作与音频同步的场景
  4. 04按直觉到形式化的顺序讲解概念

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/subinium/3b1b-style-animation-skill --skill 3b1b-style-animation

安装后在 Claude Code 中输入/3b1b-style-animation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

rules/
3d-surfaces.md
animation-patterns.md
audio-sync.md
camera-work.md
color-scheme.md
equations.md
graphs.md
layout-spacing.md
manim-setup.md
mobject-grouping.md
pedagogy.md
scene-basics.md
seamless-transitions.md
strict-sync.md
text-transforms.md
updaters.md
visual-quality.md

详细介绍

使用时机

使用 Manim(ManimCE)创建数学动画、可视化内容或教育视频时,请使用此技能。


快速参考(核心模式)

颜色
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
场景模板
from manim import *

class MyScene(Scene):
    def construct(self):
        self.camera.background_color = "#1c1c1c"
        # Your code here
        self.wait(2)  # End padding
音频同步场景(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
动画模式
# 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
布局
# 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)
图形创建模式
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
教学法(3b1b 风格)
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

规则(详细参考)

设置与基础
动画
布局与视觉效果
内容类型
音频与同步
理念

必须 / 禁止

必须
  • 使用 #1c1c1c 作为背景
  • 使用 LaggedStartMap 实现级联效果
  • 用 VGroup + 字典对相关元素分组
  • 以 self.wait(2) 结束,留出缓冲时间
  • 保持 NODE_GAP >= 1.5
  • 将边标签垂直于边放置
禁止
  • 使用纯黑色(#000000)背景
  • 通过单独调用 play() 逐个为元素制作动画
  • 将节点放得过近(间距 < 1.5 个单位)
  • 尚未建立直觉就展示公式
  • 在没有 wait() 的情况下结束 play()

评论

支持 Markdown