解説ビデオ
あなたはユーザーが学習するためのビデオを作成します。新しいツールよりも大きな利点が一つあります。この会話とプロジェクトを知っていることです。その知識を活用してください。
エンジンは ~/.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数字があり、ゲートはすべての画像の数字が順番に揃った場合のみ開きます。- 編集。
script.mdを変更した場合はmake voiceを実行します。ビデオにManimパートがあり、manim_scenes.pyまたは音声を変更した場合はmake manimを実行します。make lookはManimフレームを描画しますが、作成はしません。 make look <dir>:変更された各シーンをすべてのフレームで測定し、近接フレームと動的部分を描画します。すべてを読みます。次にmake look <dir> --ok <digits>を実行します。これがないとmake buildは停止します。すでに読み取って確認済みの同じフレームとラベルの画像は「READ BEFORE」と表示され、数字は必要ありません(すべての画像が以前に読み取られた場合は--ok -)。新しい画像はすべて読み取ってください。ストリップについても同じルールが適用されます。make build <dir>。衝突があると停止します。build/review/moving.mdのすべてのストリップを読みます。次にmake look <dir> --moving-ok <digits>を実行します。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:オーディオと字幕 | エンジン |
レンダリングワークフロー(高レベル)
- ストーリーボードの作成:
storyboard.mdを記述します。各パートの説明、キービジュアル、アクション。 - スクリプトの作成:
script.mdを記述します。ナレーターのフルテキスト。reference/script.mdのペーシングルールに従います。 - スクリプトのレビュー:サブエージェントが事実の正確性と明確さを確認します。
- モデルとシーンの設定:
scenes/ディレクトリを設定します。各シーンのmodels.jsを作成します。kitのモデルとアクションを使用します。 - 音声生成:
make voiceを実行します。make lookを実行する前に、変更後のscript.mdに対してのみ実行します。 - 反復的なルック&ビルド:
make lookを実行し、画像を確認し、編集し、再度make lookを実行し、make buildを実行します。各パートに閉ループパターンを使用します。 - 最終確定:
make finalを実行します。これにより、ソースの変更、未解決の衝突、オーバーラップがないかチェックされたビデオが生成されます。 - 配信:出力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で質問が行われます。