mcpField
3
3b1b-style-animation

3b1b-style-animation

github.com/subiniumクリエイティブ・メディア770 回インストール40 週間前に更新
リポジトリ

3b1b-style-animation について

3b1b-style-animation は、Manim(ManimCE)で数学アニメーション、可視化、教育動画を作るためのスキルです。シーン、アニメーション、レイアウト、音声同期、教育設計のパターンとルールを提供します。

主な機能

  1. 01Manim のシーンテンプレート
  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つずつアニメーションさせる
  • ノードを近づけすぎる(間隔を 1.5 単位未満にする)
  • 直感を形成する前に数式を表示する
  • wait() を入れずに play() を終了する

コメント