Communitygithub.com

master-class-render

マスタークラスのレッスンスクリプトを、ナレーション付き手描きダイアグラム動画(MP4、1080p、字幕焼き込み、ローカルKokoro音声)とObsidianレッスンノート、コースMOCにレンダリングします。

master-class-render とは?

このスキルは、master-classスキルが生成したスクリプト(.script.md)を基に、ナレーション付きの手描き風ダイアグラム動画(MP4、1080p、字幕焼き込み)を完全ローカル環境で生成します。D2で図をレイアウト、Kokoro-82Mで音声合成、Chromiumでフレームキャプチャ、ffmpegでエンコードし、外部サービスには一切送信しません。レッスン動画に加え、Obsidian用のレッスンノート(動画埋め込み、ゴール、キーアイデア、セルフチェック、文字起こし付き)とコースMOCも自動生成します。対応プラットフォームはローカルターミナル環境で、Claude CodeやClineなどのエージェントフレームワークから利用可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/carlos-carvajal-slalom/master-class-skills/tree/HEAD/master-class-render

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

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

ドキュメント

Master class render

入力: <source>/scripts/NN - Title.script.md(master-class によって作成) あなたが作成: <source>/scenes/NN.scenes.md(D2テキスト、座標・タイミングなし) 1つのコマンドで生成: <videos>/NN - Title.mp4 + <notes>/NN - Title.md + <notes>/<MOC>.md

すべてローカルで実行: D2が図をレイアウト(スケッチスタイル)、Kokoro-82Mが音声を合成、タイミングは実際の音声から取得、Chromiumがビジュアル変更のたびに1フレームをキャプチャ、ffmpegがエンコード。外部サービスには一切送信されません。消費されるトークンはシーンファイルのみ(スクリプトサイズの約1倍)。

0 · セットアップ(マシンごとに1回; 再実行しても安全)

bash ~/.copilot/skills/master-class-render/scripts/setup.sh

d2、ffmpeg、uv(Homebrew)、scripts/.venv内のvenv(kokoro-onnx、soundfile、playwright(Chromium))、および~/.cache/kokoro内のKokoroモデル(約350MB)をインストールします。scripts/.venv/bin/pythonが存在すればセットアップは完了です。

1 · シーンを書く

最初にreferences/scenes-guide.mdと承認済みの例をお読みください: 01、05、08。各例は~/.copilot/skills/master-class/examples/内のスクリプトとペアになっているので、各Screenがどのように図になったかを正確に確認できます。この手順は小さく高速なモデルでも問題なく動作します: 一度に1レッスンずつ進め、バリデータが正しいと教えてくれるのを待ちます。次に、各スクリプトについて、ビートごとに## Beat N + 1つの```d2ブロックを書き、そのビートのScreen説明を翻訳します:

  • # @at "frase"(そのビートのナレーションから3~7単語をそのままコピー)は、ナレーターがそのフレーズを発したときに次が明らかになることを示します。最終レイアウトは一度だけ計算されるため、何もジャンプしません; 新しい部品は一瞬光ります。
  • # @continue は前のビートの図を拡張します。
  • クラス: model、code、tool、data、person、bad、good、note(結論付きの付箋; これらがレッスンノートのキーアイデアになります)、muted、wrong。
  • ガイドにはD2の注意点が記載されています(\$、{}ブロック内では@at不可、|||mdテーブル、スタイル変更はアニメーションしない)。

各レッスンを作成しながら検証します(ok: と表示され、warning: がないことを確認):

cd ~/.copilot/skills/master-class-render/scripts && export PATH=/opt/homebrew/bin:$PATH
.venv/bin/python render.py "<source>/scripts/NN - Title.script.md" "<source>/scenes/NN.scenes.md" /tmp/check.html

多くのレッスンがある場合 → 並列サブエージェント(各約4レッスン)に分割し、ガイドと例を渡します。

2 · コースをビルドする

cd ~/.copilot/skills/master-class-render/scripts && export PATH=/opt/homebrew/bin:$PATH
.venv/bin/python build_course.py \
  --source "<lab>/_attachments/master-class/source" \
  --videos "<lab>/_attachments/master-class" \
  --notes  "<lab>/Master class" \
  --moc    "<Lab name> · Master class" \
  --course "<label shown top-left in the video>" \
  --tags   "course/<course-tag>,section/labs,topic/<x>,type/lesson" \
  --intro  "MOC用の1パラグラフ: コースが何から構築されているか([[ソースノートリンク]])とその意図。" \
  --voice am_michael --lang en-us
  • 言語/音声: 英語 --voice am_michael --lang en-us(代替 am_puck、bm_george --lang en-gb); スペイン語 --voice em_alex --lang es(女性: ef_dora)。
  • --only 03,07 で選択したレッスンのみ再ビルド(ノートは常にすべて再生成されます)。--notes-only は動画なしでノートを再生成します。
  • 音声がキャッシュされた後はレッスンあたり約15秒(初回合成はレッスンあたり約1分)。出力は一時フォルダでエンコードされ、その後コピーされます(OneDrive同期フォルダに直接書き込むとタイムアウトするため)。
  • --tags をソースノートで使用されているタグに一致させます。

3 · 報告前に検証する

  • ビルドがすべてのレッスンで ok: を出力し、!! … @at phrase(s) not found がないこと。
  • 1つまたは2つのMP4から2フレームを抽出して確認します(毎回新しいファイル名を使用; 画像ビューアはキャッシュします): ffmpeg -v error -ss 120 -i "<mp4>" -frames:v 1 -vf scale=1280:-1 /tmp/mc_check_<n>.png 確認: 図が判読可能であること(小さな帯になっていない)、キャプションが一致していること、正しいビートが表示されていること。
  • 図が小さすぎる? レンダラーは自動的に他のレイアウト方向も試しますが、それでも小さい場合は、ビートの図を分割するか、@continue をやめて以前の手順を1つの muted ボックスにまとめます。
  • MOCノートと1つのレッスンノートを開く: 動画埋め込み ![[NN - Title.mp4]]、ゴール、キーアイデア、セルフチェック(質問 + 折りたたまれた回答)、折りたたまれた文字起こし、前へ/次へのリンク。

各レッスンノートの内容(自動生成、トークン消費なし)

フロントマター(タグ、レッスン、時間、コースリンク)・埋め込みMP4・ゴール・誤解・キーアイデア(note 付箋から)・セルフチェック(Retrieval pause ビートから)・折りたたまれた文字起こし・← 前へ・コースインデックス・次へ →。

ファイル

scripts/: build_course.py(エントリポイント)・render.py(スクリプト+シーン→オーディオとタイムライン付き中間HTML)・export_mp4.py(HTML→MP4)・make_notes.py(ノート+MOC)・player.html(中間テンプレート; オフラインプレーヤーとしても使用可能)・prelude.d2(クラス、フォントサイズ)・setup.sh。キャッシュ: scripts/.cache/(音声クリップ、図; 削除可能)。

関連スキル