Communitygithub.com

Youtube-note-forge

YouTube および Bilibili の動画を Obsidian 対応の学習ノートに変換するエージェントスキルです。

Youtube-note-forge とは?

このスキルは、YouTube や Bilibili の動画からトランスクリプトとフレームを抽出し、構造化された学習ノートを生成します。主な実行環境は Obsidian デスクトッププラグイン「youtube-note-reader」で、決定性状態機械として動作し、設定可能な OpenAI 互換モデルを呼び出しながらスクリプトを実行、ノートを Vault に書き込みます。Chrome 拡張機能は動画 URL とブラウザ Cookie の提供のみ行い、OpenCode はオプションのエントリポイントです。スキルは厳格なステートマシンとして設計されており、規定外の抽出パスを実行してはなりません。バージョン確認、トランスクリプト抽出、フレーム計画、フレーム抽出、ノート整形、バリデーションの各ステップを順に実行し、エラーが発生した場合は即座に停止して詳細を報告します。最終的なノートは Obsidian の Wiki 埋め込み形式(`![[...]]`)でスクリーンショットを参照し、中国語を主体として英語の専門用語は初出時に説明します。

対応~Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add yinbaozong/Youtube-note-forge

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

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

ドキュメント

YouTube Transcript v4.0.0

主要なフルプロダクトランタイムは、Obsidian デスクトッププラグイン「youtube-note-reader」です。このプラグインは決定性状態機械を所有し、設定された OpenAI 互換モデルを呼び出し、これらのスクリプトを実行し、タスク状態を永続化し、完成したノートをアクティブな Vault に書き込みます。Chrome 拡張機能は現在の動画 URL とブラウザ Cookie を提供するだけです。OpenCode はオプションのスキル専用エントリポイントであり、フルブラウザ + Obsidian インストールでは必須ではありません。

このスキルは厳格な状態機械として使用してください。代替の抽出パスを即興で実行しないでください。

バージョン

ユーザーが現在のバージョンを尋ねた場合は、以下を実行します:

python .obsidian/skills/youtube-transcript/scripts/video_note.py --version

コマンドの出力を返します。記憶から答えないでください。インストールされているバージョン、ソースパス、およびコアファイルの SHA-256 値を報告します。

固定ワークフロー

各 URL について、次の URL に進む前に以下のステップを完了します。スクリプト結果が最初に非ゼロになった時点でバッチ全体を停止します。

  1. ソースマテリアルを抽出します:
python .obsidian/skills/youtube-transcript/scripts/extract_transcript.py "<url>" --output-dir "YouTube video" --deadline 300
  1. 生成されたノートとその SRT を読み取ります。article_outline と frames を持つ 1 つの JSON 計画を作成します。article_outline にはトランスクリプトから派生した 3~8 のチャプターが含まれ、各項目は section_id、title、start、end、core_claims、learning_goal を持ちます。学習価値に基づいてフレームを選択します。通常、視覚的に意味のあるチャプターごとに 1 つの必須フレームに加え、異なるステップや結果の証拠としてオプションのフレームを配置します。ほとんどの動画では 6~14 フレームが必要です。24 は単なるハードな安全制限であり、目標ではありません。単にカウントを増やすために、ほぼ同一の時間ポイントを複数作成しないでください。すべてのフレームは section_id、timestamp、purpose、required を持ちます。同じ section_id を使用して、各スクリーンショットを詳細サマリのチャプターにバインドします。ノートの名前を変更したり書き換えたりしないでください。プローブスクリプトを作成したり、ビデオ形式を手動で検査したりしないでください。
  2. 計画されたフレームを正確に 1 回抽出します。マテリアル結果が成功した後、これが許可される唯一の次の実行可能コマンドです:
python .obsidian/skills/youtube-transcript/scripts/extract_frames.py "<url>" --plan "<plan.json>" --note "<generated-note.md>" --output-dir "YouTube video" --deadline 120
  1. フレーム結果に status: ok、少なくとも 1 つのスクリーンショット、および実際の manifest パスがあることを確認します。スクリプトは自動的に frame_manifest をノートの YAML に書き込みます。これらのいずれかが欠けている場合は停止し、最終ノートを書き込まず、カバー画像も代用しないでください。
  2. 生成されたノートを適宜 references/note-contract.md に従って名前を変更し、その場で書き換えます。「## 詳細内容总结」の下で、article_outline の各 title を正確な ### 見出しとして使用し、その中核的主張を説明し、成功した各必須フレームを対応するチャプターに中国語の説明とともに挿入します。Vault ローカルのスクリーンショットには、常に ![[YouTube video/assets/VIDEO_ID/frame.jpg]] のような Obsidian Wiki 埋め込みを使用します。スペースを含むエスケープされていない Markdown ターゲットは決して使用しないでください。マニフェストにリストされている画像のみがスクリーンショットとしてカウントされます。
  3. 検証します:
python .obsidian/skills/youtube-transcript/scripts/validate_note.py "<finished-note.md>"
  1. 検証が失敗した場合、そのノートを 1 回だけ編集し、バリデーターをもう一度実行します。この修復中に、抽出の実行、一時スクリプトの作成、実装コードの検査、またはプラットフォームの動作の診断を行わないでください。それでも失敗する場合は停止し、返されたエラーを報告します。検証が成功すると、バリデーターは同じフォルダ内にある YAML の url が最終ノートと完全に一致する「待命名 - ...」Markdown ドラフトのみを削除します。一致しない中断されたドラフトは再開のために残されます。

障害ポリシー

PIPELINE_RESULT が真実の情報源です。「status: error」の場合はすぐに停止し、URL、ステージ、コード、メッセージ、アクション、完了した URL、未開始の URL を報告します。

障害に対して、別のダウンローダー、ブラウザ、Puppeteer、Chrome/Edge Cookie 抽出、ウェブ検索、音声録音、または 2 回目の試行を実行して応答しないでください。唯一制御された再試行はスクリプト内にあります:ターゲットフレーム抽出中の、最後に正常だった Cookie チェック 1 回とビデオストリーム URL リフレッシュ 1 回です。

ASR はデフォルトで無効です。ユーザーが明示的に音声ダウンロードと低速処理を受け入れた場合のみ --allow-asr を使用してください。

視覚要件

  • スクリーンショットは証拠であり、装飾ではありません。
  • デモ、インターフェース、図、パラメータ、比較状態、結果を使用してください。
  • フレームスクリプトは最初に yt-dlp リクエストヘッダーを使用してリモートの 720p 以下のストリームを試みます。リモートシークが失敗した場合、計画された各時間ポイントの周囲の 8 秒間の範囲セグメントのみをダウンロードすることがあります。一時セグメントはすぐに削除され、スクリーンショットのために完全な動画がダウンロードされることはありません。
  • 必須フレームの失敗、または 70% 未満のフレーム計画カバレッジはハード障害です。
  • カバー、サムネイル、手動でコピーされた画像、または重複した埋め込みはキーフレームとしてカウントされません。
  • 全体的なレイアウトが似ていても、計画されたフレームは保持します。ターミナルテキスト、コード、スライド、UI 状態の変更は有用です。実質的に空白の黒/白フレームのみを拒否します。OCR、AI 画像分析、または知覚的重複フィルタリングは使用しないでください。
  • frame_manifest が存在し、必須のすべてのマニフェストフレームが「## 詳細内容总结」に現れない限り、完了を主張しないでください。
  • Canvas ファイルを作成しないでください。

最終ノート要件

  • ファイル名:「中文标题 - English Title」
  • YAML には skill_version: 4.0.0、quality_profile_version: 1、および extract_frames.py によって書き込まれた有効な frame_manifest が含まれます。
  • 本文は「## 一句话摘要」から始まり、重複する H1 タイトルはありません。
  • ソースステータス、動画の説明、ビジュアルマテリアルインデックス、抽出警告、タスク指示、セルフチェックセクションを最終本文から削除します。YAML は既にソースメタデータを保持しています。
  • 中国語を優先して使用し、必要な英語の専門用語は初出時に説明します。
  • トランスクリプトに記事の概要と深さを決定させます。画像は説明をサポートします。一致するフレームが利用できないという理由だけで、重要な内容を省略したり短縮したりしないでください。
  • 記事の深さを動画の長さに合わせます。計画された各チャプターには、実際の説明、ビデオ証拠または例、および明確な学習への示唆が必要です。一般的な埋め草や繰り返しの段落は避けてください。
  • 最後に SRT をリンクします。生のトランスクリプトテキストを貼り付けないでください。
  • 最終完了前にセルフチェックリストを削除します。

関連スキル