Communitygithub.com

jjietay/clayducation

ソフトな3Dクレイ調のサイレントマスコットが登場するナレーション付き学習解説ビデオ(MP4)を作成します。スクリプトは音声生成前に別のエージェントがチェックします。ユーザーが「固有ベクトルを解説するビデオを作って」「I2Cの解説を生成して」「アテンションの仕組みをアニメーションにして」などと依頼した場合に使用します。現在の会話とプロジェクトの内容を活用するため、話題が出た会話内で実行してください。

clayducation とは?

このスキルは、ソフトな3Dクレイ調のビジュアルとサイレントマスコットを用いたナレーション付き学習解説ビデオ(MP4)を生成します。ユーザーが「固有ベクトルを解説するビデオ」や「I2Cの説明アニメーション」などを依頼した際に、現在の会話やプロジェクトのコンテキストを活用して、概念を視覚的にわかりやすく説明します。主な機能として、スクリプト作成後の内容チェック、ストーリーボードの作成、3Dレンダリング、音声・音楽・効果音の合成、字幕生成を自動的に行います。ユーザーはビデオのスタイル(クレイ調3D、クラシック2Dなど)、対象視聴者(試験対策向け、初心者向けなど)、チェックポイント、BGMの種類を選択できます。スキルはClaude Code, Cursor, CodexなどのAIエージェントプラットフォーム上で動作し、会話の流れを保持したままシームレスにビデオ制作を支援します。エンジンは`~/.claude/skills/clayducation/engine/`に配置され、`node ~/.claude/skills/clayducation/engine/make.mjs <command> <project-dir>`の形式でコマンドを実行します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jjietay/clayducation/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

解説ビデオ

あなたはユーザーが学習するためのビデオを作成します。新しいツールよりも大きな利点が一つあります。この会話とプロジェクトを知っていることです。その知識を活用してください。

エンジンは ~/.claude/skills/clayducation/engine/ にあります。このファイルでは、make は以下のコマンドを意味します。

node ~/.claude/skills/clayducation/engine/make.mjs <command> <project-dir>

ステップ0: まずは質問する(スキル起動のたびに行う)

ユーザーが /clayducation と入力したか、言葉でビデオを依頼したかに関わらず、最初に行うことは、AskUserQuestion を使用して以下の質問をクリック可能なオプションとともに尋ねることです。ユーザーのメッセージやこの会話ですでに答えられている質問(例:「ニュース映画風で」という指定は見た目を、「ローファイ音楽で」は音楽を回答している)は省略してください。推奨オプションを最初に配置し、「(推奨)」とマークします。4つの質問すべてを1回の呼び出しで尋ねてください(ツールは最大4つまで受け付けます)。トピック自体が不明確で、省略された質問がない場合は、トピックについて最初に別の呼び出しで尋ねてください。

質問ヘッダーオプション(最初=デフォルト)
ビデオの見た目はどれにしますか?見た目クレイ3D: ソフトなクレイ調、サイレントマスコットが作業を行う · クラシック2D、混合: パートごとに異なる2Dスタイル · クラシック2D、単一スタイル: ユーザーが指定(ニュース映画、ホワイトボードなど)
誰向けの、どのくらいの長さのビデオですか?視聴者試験対策、標準: 講義の表記法、計算例、試験の落とし穴、5~6分 · 試験対策、詳細: 同上、8~9分、導出の全ステップ · 初心者、短め: 直感を優先、記号は少なめ、2~4分 · (その他:ユーザーが視聴者と長さを指定、例:「エキスパート向け復習、短め」)
いつ確認しますか?チェックポイント一発本番: 完成したビデオを持って戻る · ストーリーボード後: 計画を見せて承認を待つ · 最初の見た目後: 最初のフレームを見せて待つ
どの音楽にしますか?音楽落ち着いた (current): ソフトなパッド、ビートなし · ローファイ (lofi): 軽いビート、よりエネルギッシュ · なし

会話から推奨オプションが示唆される場合(来週試験がある場合:試験対策、詳細)、それを最初に配置します。メッセージが視聴者に関する質問の半分だけに答えている場合(例:「試験用に」)、質問は残し、その半分と一致するオプションのみを提示します。視聴者は試験対策、初心者、エキスパート向け復習(高速で密度が高い)です。長さは短め(2~4分)、標準(5~6分)、詳細(8~9分)です。回答はステップ4で video.json に書き込みます。"_look" (clay または classic)、"_brief": { "viewer": ..., "length": ..., "checkpoint": ..., "style": ... }、"_render": { "music": "current" | "lofi" | false }。その後のすべてのステップと再ビルドはここから読み取り、再度尋ねることはありません。ユーザーが質問を却下した場合は、各質問の最初のオプションを使用します。

一発本番。ユーザーがチェックポイントを選択した場合を除く

ステップ0の後、以下のすべてのステップを停止せずに実行し、完成してチェック済みのビデオのみを持って戻ります。「続けましょうか?」と尋ねたり、ドラフトを見せたり、ステップ間で待ったりしないでください。以下のすべてのチェックはあなたが実行し、それに基づいて行動するものです。唯一の停止ポイントはユーザーが選択したチェックポイントです。「ストーリーボード後」はステップ7の後で停止します(ストーリーボードとスクリプトエージェントの判定を表示し、待機します)。「最初の見た目後」はステップ9の最初の make look で停止します(その画像を表示し、待機します)。

ユーザーが望む見た目(ステップ6の前に読むこと)

動くものにはクレイ、プロットにはManim、そしてすべてのビデオにマスコットが登場します。 styles/clay.md を読んでください。ユーザーは、ビデオ間での一貫性を保つために、古いスタイルの混合ではなくクレイの見た目を選択しました。2Dスタイルはオプトインのクラシックな見た目です。以下のセクションを参照してください。

  • プロットをクレイに無理に押し込めないでください(ユーザーが依頼)。 2DのManim画像がクレイよりも視聴者の理解に役立つ場合(曲線、分布、等高線、投影、または平面内のその他の幾何学形状)、その部分はManimパートにし、Manimの暗い背景(styles/math-manim.md)を使用します。数学的な曲線をコピーするクレイモデルを決して構築しないでください。ユーザーはそれらを削除しました。動作するオブジェクトとマスコットの物理的な作業はクレイに残ります。ビデオはクレイパートからManimパートへ、そして戻ることができ、同じものには同じ色を使用します。

  • 一つの見た目、多くのパート。 ビデオは約15〜40秒のパート(フック、各アイデア、あなたの事例、クロージング)に分割されます。各パートには独自の単色背景、カメラ、設定があります。隣り合う2つのパートは決して背景を共有しません。

  • マスコットが作業を行います。 マスコットは無言で、リップシンクはなく、ナレーターはボイスオーバーです。マスコットは歩き、引き、押し、運び、自分の手で物をオフにします。そのため、スクリプト内の力は視聴者がマスコットが行うのを見るものになります。ユーザーは、マスコットが立って見ているだけだったビデオの後にこれを依頼しました。マスコットはデフォルトで無表情を保ち、make check はマスコットが一箇所に留まっている場合にWARNを出力します。作業にバリエーションを持たせてください。各パートで異なるアクションヘルパーを使用します(carry、knock、press、grip、pointAt、pushOn。styles/clay.mdの「異なるアクションを使用する」を参照)。ユーザーはマスコットがすべてのパートで押しているのを発見しました。

  • ものは接続されていなければなりません。 バネは壁に届き、ピンは地図に触れ、手は持っているものに触れます。ユーザーは、すべてのチェックを通過した後も壁に届いていないバネを発見しました。make bake は models.js (JOINS) 内のすべての接合部を測定するため、新しい接合部をそこに追加し、スチル画像で接触を確認してください。

  • 自分たちのモデルのみ使用します。 styles/library/clay のキットを使用してください。モデルをダウンロードしないでください。ビデオに新しいオブジェクトが必要な場合は、同じ見た目でキットに追加してください。

  • 各パートはワンカットの連続撮影です。 パート内にカットや新しいスライドはありません。ナレーターの声に合わせてオブジェクトが到着し、移動し、結合し、カメラはゆっくりと動きます。パートは次のパートが開始する状態で終了するか、次のパートの背景でワイプして終了します。

  • 絵が説明し、テキストは名前を付けるだけです。 テキストは平坦でシャープなまま、3Dの上にHTMLで表示されます。フレームごとに:キッカー(小さな大文字、パートとソース)、最大8単語のタイトル、それぞれ1〜4単語のラベル(細いリーダー線付き)、下部に最大1行のキャプション。文の列、箇条書き、色の意味の凡例は絶対に使用しないでください。 画面上の単語は最大約15語です。

  • 数式はナレーターの声を表現します(ユーザーが依頼)。 固定された数式はノートを読むのと同じです。各数式は eqn() で構築します。項は言及されたときに到着し、声が動かすときに移動し、「キャンセル」と言ったときに打ち消し線とバーストが発生し、重要なものを名指ししたときだけバウンドします。make look は、静止している数式や、画面上でキャンセルがないのに「キャンセルします」という文がある場合にエラーを出力します。styles/clay.md を参照してください。

  • 物理的な動き。 ものはオブジェクトのように動きます。腕が伸び、ボールが落ちて跳ね、ブロックが落ちて落ち着き、パルスが伝わります。静的なボックスが積み上がることはありません。

  • 同じオブジェクトはすべてのビデオで同じ色を保ちます(ロボットは常にオレンジ、地図は常に黄色)。

ストーリーボードがこれらのいずれかに違反している場合は、コードを書く前にストーリーボードを変更してください。

ハードルール

  • デフォルトで並列実行(ユーザーが依頼、2026-11-09)。 同時に実行できるものはすべて同時に実行します。13分のビデオは、すべてのフレームを1つのChromeページで測定すると3時間かかりました(1コアビジー、GPU使用率10%)。エンジンは現在、look、collide、review、stable を複数のページで同時に測定します(レンダリングの workers:コア数の半分、最大8、空きメモリが許す限り)。build は sheet、stable、review を一緒に実行します。フレームを巡回するステップを追加する場合は、同様に複数のページに分割します(make.mjs 内の measureParallel、traceParallel、idParallel)。自分の作業でも、独立したジョブは一緒に開始し(ルックとセルフテスト、Manimレンダリングとチェック)、他のジョブが実行可能なときにジョブを待たないでください。

  • ここ、メインの会話で思考してください。 スクリプト、ストーリーボード、シーンは、コンテキストがここにあるため、あなた自身が記述します。これらのステップをサブエージェントに決して委譲しないでください。サブエージェントはコンテキストなしで開始します。ステップ7のスクリプトエージェントは唯一の例外であり、意図的にコールドスタートします。

  • コアとなる説明を急がないでください。 ユーザーはこれらのビデオから学習します。reference/script.md のペーシングルールに従い、すべてのペーシングWARNを修正してください。

  • 事実をでっち上げないでください。 すべての数値、数式、主張は、あなたが確認したソース(ユーザーのコード、データシート、仕様書、論文、ドキュメント)から取得します。それらを storyboard.md にリストしてください。確認できなかったものがあれば報告してください。

  • 「あなたの事例」はオプションです。 この会話またはプロジェクトに本当に一致する例(ユーザーが遭遇したバグ、修正、測定された数値)がある場合のみ追加してください。決してでっち上げないでください。

  • オーバーラップ禁止。 いかなるビジュアルも他のビジュアルを覆ってはいけません。テキストの上にテキスト、テキストの上にグラフィック、または他のグラフィックを隠すグラフィック。各ラベル、数式、矢印、オブジェクトは独自のスペースを確保します。check はテキストのオーバーラップをWARNし、review は測定されたすべてのオーバーラップを overlaps.md に書き込みます。混雑はユーザーの判断に委ねられるため、フルサイズのフレームで確認してください。IDパスが役立ちます。make look は最も狭いギャップの画像を追加し、テキストが他のものから12ピクセル未満の場合、テキストが図面上にある場合、テキストのコントラストが低い場合、モデルが他のものに隠れている場合にWARNを出力します。make final の前にすべてのオーバーラップを修正してください。

  • 字幕は1行です。 各キューは最大42文字で、2つのキューが同時に表示されることはありません。これにより、プレーヤーが2行を表示することはありません。エンジンがこれを処理します。verify はルールを破るキューを報告します。キューを収めるために make.mjs の SUB_MAX を変更しないでください。

  • クローズドループ(ユーザーが依頼、エンジンが強制)。 編集後は毎回:make look を実行し、リストされたすべての画像を読み、表示された問題を修正し、再度確認します。その後でのみビルドします。ビルドは時間がかかり、ルックは数秒で完了するため、決して盲目的に編集およびビルドしないでください。各画像の右上にはCHECK数字があり、ゲートはすべての画像の数字が順番に揃った場合のみ開きます。

    1. 編集。script.md を変更した場合は make voice を実行します。ビデオにManimパートがあり、manim_scenes.py または音声を変更した場合は make manim を実行します。make look はManimフレームを描画しますが、作成はしません。
    2. make look <dir>:変更された各シーンをすべてのフレームで測定し、近接フレームと動的部分を描画します。すべてを読みます。次に make look <dir> --ok <digits> を実行します。これがないと make build は停止します。すでに読み取って確認済みの同じフレームとラベルの画像は「READ BEFORE」と表示され、数字は必要ありません(すべての画像が以前に読み取られた場合は --ok -)。新しい画像はすべて読み取ってください。ストリップについても同じルールが適用されます。
    3. make build <dir>。衝突があると停止します。
    4. build/review/moving.md のすべてのストリップを読みます。次に make look <dir> --moving-ok <digits> を実行します。
    5. make final <dir>。ルックまたはビルドの後にソースが変更された場合、または衝突またはオーバーラップが解決されていない場合に停止します。 各ステップを独自のコマンドとして実行し、最初の失敗で停止し、編集が適用されたことを確認してください。
  • すべてのレビュアーは近接フレームと動的部分を確認します。 ビデオを評価するエージェントまたはセッションは、編集された各パートの近接フレーム、および動くもの(マスコットとオブジェクト)の全フレームを、その動きの全体にわたって読み取ります。ビデオのサンプルでは不十分です。サンプリングされたフレームの間で手がテーブルを貫通する可能性があります。

  • 新しい欠陥にはガードレールを追加します。 ユーザーが欠陥を発見した場合、まずそれを reference/faults.md と engine/test/selftest.mjs に追加し、テストがその欠陥で失敗することを確認します。その後、ビデオを修正します。ビデオだけを修正しないでください。チェックを変更するたびに make selftest を実行します。

ユーザーが依頼した内容(これらを保持すること)

各項目は耳で依頼または選択されました。エンジンはほとんどの項目を自動的に実行します。

トピック内容自動?
音声Chatterboxの内蔵音声、engine/tts/slow-reference.wav で約160語/分にスロー;各段落を一息で読み、トーンを維持はい
間句点は正確に0.6秒、読点は最大0.3秒、スクリプトの句読点から設定はい;voice は間を配置できない場合にWARN
悪いテイクスクリプトと単語が異なるパート(Whisperチェック)は新しいシードで再収録、最大3回;最良のテイクが保持されるはい;それでも間違っている場合はWARN
速い箇所ビデオの通常のペースの1.3倍を超える節(記号語は2倍にカウント)は再収録;ユーザーは「lambda v is v, scaled by lambda」が速すぎると発見はい;「速い」をWARN:独自の短い文と [pause] を与える
負の数「マイナス」ではなく「負の」と読むvoice はERRORで停止
繰り返し語「one one」にはカンマを入れる(「one, one」)、または音声が滑るはい
書き方接続された段落;アイデアが終わるかアニメーションが再生される場合のみ [pause]。却下:すべての文の後の間、途切れ途切れの文、速い声、引き伸ばされた(こもった)声、Kokoroあなた、reference/script.md を参照
音楽聞こえ、安定しており、音声より約13 dB低い(musicVolume 0.37;ユーザーが0.26から3 dB上げた);穏やかなダッキング;承認された2つのトラック、current(デフォルト)と lofi。却下:ラウド-ソフトのポンピング、聞こえないほど小さい音楽、他の4トラックはい;あなたがトラックを選択、SOUND.md を参照
効果音engine/sfx.mjs のキット、耳で承認;フライインのウーシュ音は他のアクセントより4 dB低い(ユーザーが少し大きすぎると発見)。新しいビデオではオン(_render.sfx: true)、古いビデオではオフあなたがキューで s.sfx を追加;エンジンがミックス
オーディオ48 kHz ステレオはい;verify がチェック
字幕ソフト、焼き込みなし;ユーザーのmpvは小さく表示(sub-scale=0.7)はい
1行字幕キューごとに1行、最大42文字、2つのキューが同時に表示されない。ユーザーはROS 2セットのビデオ1で2行を確認はい;verify はルールを破るキューを報告
オーバーラップなしテキストやグラフィックが他のものを覆わないcheck はテキストをWARN、overlaps.md とあなたのフレームチェックリストで残りを確認
見た目サイレントマスコットと独自モデルを使用した1つの3Dクレイ調;曲線とプロットには暗い背景のManimパート(ユーザー依頼:クレイにプロットを無理に押し込まないでください。Manimの方が優れているため)はい(あなたが選択を適用)
パート約15~40秒、各パートは独自の背景、カメラ、設定;内部にカットや新しいスライドなし;オブジェクトは到着、移動、結合;カメラはゆっくりと動くはい
動き物理的な動き:腕が伸び、ボールが落ちて跳ねる;静的なボックスの積み上げは禁止look は剛体でない動きをWARN
色同じオブジェクトはすべてのビデオで同じ色あなた(kit で定義)
数式eqn() を使用して構築;項は言及されたときに到着、声が動かすときに移動、キャンセル時に打ち消し線とバースト、重要時にバウンドlook は静止またはキャンセルなしの「キャンセル」文にエラー
キャプションとラベルテキストは平坦でシャープ、HTML;キッカー(小さな大文字)、最大8単語のタイトル、各1~4単語のラベルとリーダー線、下部に最大1行のキャプション;画面上の単語は最大15語はい(あなたがスタイルを適用)
テキストの密度文の列、箇条書き、凡例は禁止check は密度をWARN
ストーリーボードパートに分割:フック(問題)、アイデア1、アイデア2、...、あなたの事例、クロージング;各パートは15~40秒あなたが記述(ルールを参照)
スクリプトナレーター用の完全なスクリプト、ストーリーボードに基づく、reference/script.md のペーシングルールに従うあなたが記述(サブエージェントがレビュー)
音声生成Chatterbox TTS、make voice;スクリプトと一致しないパート(Whisper)は再収録エンジン
レンダリングmake look → 編集 → make build → make final;閉ループエンジン
品質チェックmake check:オーバーラップ、ペーシング、動き、接合部;make verify:オーディオと字幕エンジン

レンダリングワークフロー(高レベル)

  1. ストーリーボードの作成:storyboard.md を記述します。各パートの説明、キービジュアル、アクション。
  2. スクリプトの作成:script.md を記述します。ナレーターのフルテキスト。reference/script.md のペーシングルールに従います。
  3. スクリプトのレビュー:サブエージェントが事実の正確性と明確さを確認します。
  4. モデルとシーンの設定:scenes/ ディレクトリを設定します。各シーンの models.js を作成します。kit のモデルとアクションを使用します。
  5. 音声生成:make voice を実行します。make look を実行する前に、変更後の script.md に対してのみ実行します。
  6. 反復的なルック&ビルド:make look を実行し、画像を確認し、編集し、再度 make look を実行し、make build を実行します。各パートに閉ループパターンを使用します。
  7. 最終確定:make final を実行します。これにより、ソースの変更、未解決の衝突、オーバーラップがないかチェックされたビデオが生成されます。
  8. 配信:出力MP4ファイルをユーザーに提示します。

トラブルシューティングとメンテナンス

  • 欠陥:新しい欠陥は reference/faults.md に追加し、engine/test/selftest.mjs に対応するテストを追加します。ビデオを修正します。
  • エンジンの更新:エンジンは ~/.claude/skills/clayducation/engine/ にあります。変更はスキルのアップデート時に適用されます。
  • 既知の問題:reference/ のファイルを参照してください。

使用例

カレントディレクトリがプロジェクトのルートであると仮定します。

# プロジェクトの初期化(最初の一度のみ)
node ~/.claude/skills/clayducation/engine/make.mjs init my-video-project

# ストーリーボードの作成後、スクリプトが変更された場合の音声生成
node ~/.claude/skills/clayducation/engine/make.mjs voice my-video-project

# 閉ループの開始
node ~/.claude/skills/clayducation/engine/make.mjs look my-video-project
# 画像を確認し、必要に応じて編集
node ~/.claude/skills/clayducation/engine/make.mjs look my-video-project --ok 1234
node ~/.claude/skills/clayducation/engine/make.mjs build my-video-project
# ストリップを確認
node ~/.claude/skills/clayducation/engine/make.mjs look my-video-project --moving-ok 5678
node ~/.claude/skills/clayducation/engine/make.mjs final my-video-project

エンジンのアーキテクチャ

エンジンは、ビデオ制作プロセスを管理する make.mjs(Node.js)スクリプトを中心に構成されています。主要なコンポーネントは次のとおりです。

  • make.mjs:中央オーケストレーター。ステップを実行し、チェックポイントとゲートを管理します。
  • scenes/:各ビデオのプロジェクトディレクトリ。各シーンの models.js、script.md、storyboard.md、manim_scenes.py(該当する場合)を含みます。
  • engine/:コアエンジンのコード。styles/、kit/、reference/、test/ を含みます。
  • styles/clay.md:クレイの見た目に関する詳細なスタイルガイド。
  • styles/math-manim.md:Manimのプロットに関するスタイルガイド。
  • reference/script.md:ペーシングと書き方のルール。
  • reference/faults.md:既知の欠陥と修正のログ。

スキルの範囲

このスキルは、ユーザーが明確な学習目標を念頭に置いて概念の説明を依頼した場合にトリガーされるように設計されています。

トリガーの例:

  • 「固有ベクトルを説明するビデオを作って」
  • 「I2Cの解説を生成して」
  • 「アテンションの仕組みをアニメーションにして」
  • 「フーリエ変換のビジュアルウォークスルー」
  • 「ROS 2アクションの説明ビデオ」

トリガーしない例:

  • 単なる「ビデオを作って」(トピックが不明確)
  • ソーシャルメディア投稿用のビデオ(学習目的ではない)
  • 一般的なプロジェクトに関する質問のみで、ビデオ制作の意図がない場合

ユーザーが /clayducation スラッシュコマンドを使用して明示的にスキルを呼び出すことも、自然言語でビデオ制作を依頼することもできます。どちらの場合も、上記のステップ0で質問が行われます。

関連スキル