3b1b-style-animation について
3b1b-style-animation は、Manim(ManimCE)で数学アニメーション、可視化、教育動画を作るためのスキルです。シーン、アニメーション、レイアウト、音声同期、教育設計のパターンとルールを提供します。
主な機能
- 01Manim のシーンテンプレート
- 02アニメーションとテキスト変換の指針
- 03配色・レイアウト・間隔のルール
- 04グラフ・数式・3D 曲面に対応
- 05音声同期のガイド
- 06直感から形式化へ進む構成
活用シーン
- 01数学的な概念のアニメーション制作
- 02グラフや 3D 曲面の可視化
- 03音声に同期したシーンの制作
- 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.mdanimation-patterns.mdaudio-sync.mdcamera-work.mdcolor-scheme.mdequations.mdgraphs.mdlayout-spacing.mdmanim-setup.mdmobject-grouping.mdpedagogy.mdscene-basics.mdseamless-transitions.mdstrict-sync.mdtext-transforms.mdupdaters.mdvisual-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
ルール(詳細リファレンス)
セットアップと基本
- rules/manim-setup.md - インストール
- rules/scene-basics.md - シーンの構成
- rules/color-scheme.md - カラーパレット全体
アニメーション
- rules/animation-patterns.md - LaggedStartMap、状態の保存と復元
- rules/text-transforms.md - TransformMatchingStrings
- rules/updaters.md - 動的な動きのための add_updater
- rules/seamless-transitions.md - スムーズなトランジション
レイアウトとビジュアル
- rules/layout-spacing.md - 間隔、画面領域
- rules/mobject-grouping.md - VGroup による整理
- rules/visual-quality.md - 品質チェック
- rules/camera-work.md - MovingCameraScene
コンテンツの種類
- rules/equations.md - LaTeX、MathTex
- rules/graphs.md - 関数のプロット
- rules/3d-surfaces.md - ThreeDScene
音声と同期
- rules/audio-sync.md - 音声と映像の同期
- rules/strict-sync.md - StrictSyncScene
方針
- rules/pedagogy.md - 形式化より直感を優先
必須事項/禁止事項
必須
- 背景には
#1c1c1cを使用する - 連鎖的な効果には
LaggedStartMapを使用する - 関連する要素は VGroup と辞書でグループ化する
- 余白を設けるため、最後に
self.wait(2)を入れる - NODE_GAP を 1.5 以上に保つ
- エッジラベルはエッジに対して垂直に配置する
禁止
- 純粋な黒(#000000)の背景を使用する
- 個別の play() 呼び出しで要素を1つずつアニメーションさせる
- ノードを近づけすぎる(間隔を 1.5 単位未満にする)
- 直感を形成する前に数式を表示する
- wait() を入れずに play() を終了する
コメント
Markdown 対応