Summary
course-bundleの全スクリーンショットをカタログ化。各フレームの画像分類(スライド/ブラウザ/図解/トーキングヘッド等)、テキスト内容のOCR抽出、キーワード付与を行い、visual-index.jsonとvisual-catalog.jsonを生成。「画像インデックス」「スクショ分類」「visual…
naoterumaker/manabi-skills · Archived
course-bundleの?
npx skills add naoterumaker/manabi-skills --skill visual-indexer
course-bundleの全スクリーンショットをカタログ化。各フレームの画像分類(スライド/ブラウザ/図解/トーキングヘッド等)、テキスト内容のOCR抽出、キーワード付与を行い、visual-index.jsonとvisual-catalog.jsonを生成。「画像インデックス」「スクショ分類」「visual…
This repository is archived — consider an actively maintained alternative.
講座トランスクリプトから概念・定義・暗黙知・重要引用・教え方パターンを構造化抽出しknowledge.jso…
4 installsUTAGEの動画講座からマニュアルを自動作成。Chrome操作で講座構成を把握し処理計画を立案、ffmpegでダ…
4 installsskill-plannerが生成したskill-plan.jsonに基づき、複数の独立したClaude Codeスキルを自動生成する。…
4 installscourse-bundleの抽出結果(knowledge.json, procedures.json, visual-index.json, resources-manifest…
4 installsRelated neighbors and high-traction skills in the same topics — useful to compare before installing.
Reads local files and uploads an index to a remote search service
211 installsThis skill has instructions to setup a Envio HyperIndex indexer to capture onchain smart contra…
158 installsExpert knowledge for Azure AI Video Indexer development including troubleshooting, best practic…
121 installsQuery and subscribe to Midnight blockchain data via the Indexer GraphQL API v4. Covers contract…
115 installsOther skills from naoterumaker/manabi-skills.
npx skills add naoterumaker/manabi-skills
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
main
Files included with this skill beyond the listing page.
SKILL.md
14,767 B
SUMMARY.md
509 B
course-bundleの全スクリーンショットをカタログ化し、分類・OCR・メタデータ付与を行うスキル。
モデル: sonnet 必須(opusはコスト3-5倍。精度差は小さい)
1回の実行で全フレームをReadするためコスト最大。sonnet並列を厳守。
並列化: 章をN分割してN Agent並列起動
| 章数 | 推奨並列度 | 各Agent担当章数 |
|---|---|---|
| ~12章 | 2 Agent | 6章ずつ |
| ~24章 | 4 Agent | 6章ずつ |
| ~36章 | 4-6 Agent | 6-9章ずつ |
| 36章+ | 6 Agent | 6-10章ずつ |
Agent起動テンプレート:
Agent(
model: "sonnet",
mode: "bypassPermissions",
run_in_background: true,
prompt: "Process chapters NN-NN of [bundle_path]..."
)
注意: visual-indexerは画像を全Read するため最もコスト重い。必ずsonnet+並列。opusで全章順次は禁じ手。
コースの全チャプターに含まれるスクリーンショット画像を1枚ずつ読み取り、以下を行う:
visual-index.json + 全体 visual-catalog.jsonBLOCKER: manifest.jsonが存在するか確認
→ 存在しない場合は manabi-ingest を先に実行するよう案内して停止
manifest.json を読み込み、チャプター一覧とスクリーンショットディレクトリを取得visual-index.json を{"chapter_id": "NN", "frames": []} で出力してスキップする
note等の記事由来の画像(img*)は動画フレームと性質が異なる。著者が意図的に その位置へ置いた図解なので、talkinghead/transitionのようなゴミ分類はほぼ不要。 代わりに以下を行う:
context_heading(直近の見出し)を記録するillustrates: "cNN-XX" を設定する(concept-extractor側の visual_refs と双方向リンクになる)
type: "decoration" として抽出対象外にマークv{NN}frame*)は通常の動画フレームとして扱う各章の最初の5フレームをサンプル読みし:
visual-index.json の custom_types に登録注: 完全自動化する場合は、Phase 0.5でAgent自身が判断して登録する。
並列実行時のBLOCKER: customtypesの発見・確定は先行1章のAgentだけが行う。 確定した型定義はオーケストレーターが残りAgentのプロンプトに配布する。 各Agentが独立に型を発明すると同じ画面に別名が付き、タクソノミーが分裂する (例: tmuxpane と terminal_tmux の混在)。
各チャプターについて以下を実行:
ls chapters/{chapter_id}/screenshots/
BLOCKER: 各画像は必ずReadツールで読み取ってから分類する
→ ファイル名からの推測は NG
各フレームについて:
コア型(全講座共通):
| type | 説明 | ダウンストリームでの使われ方 |
|---|---|---|
title_slide |
章タイトル | マニュアルの見出し画像 |
content_slide |
概念図・スライド | concept-extractorの補強 |
browser_screenshot |
ブラウザ画面 | procedure-extractorの手順画像 |
terminal_screenshot |
コマンドライン | procedure-extractorの手順画像 |
diagram |
フローチャート・図解 | 概念関係の可視化 |
talking_head |
話者の映像のみ | 低価値、スキップ可 |
transition |
空白・遷移フレーム | スキップ |
decoration |
アイキャッチ・バナー等の装飾(記事画像用) | 抽出対象外 |
コア型に当てはまらない繰り返し画面は 講座固有型(custom_types) として登録する(後述)。
コア型に当てはまらないが、講座内で繰り返し出現する画面は講座固有型として動的に作成する。
- 例: tmuxpane, vscodeeditor, aetimeline, figmacanvas
text_content 配列に格納visual_elements 配列に記録keywords 配列に格納confidence を high / medium / low で設定isuiwalkthrough を設定チャプターの全フレーム処理が完了したら visual-index.json を生成:
{
"chapter_id": "03",
"custom_types": {
"tmux_pane": "tmuxで複数paneに分割されたClaude Code画面(タイトルバーにtmux表記、画面分割あり)"
},
"frames": [
{
"filename": "frame_005.jpg",
"type": "content_slide",
"text_content": ["AIマインド", "壁打ち", "アイデア", "専門知識"],
"visual_elements": ["equation_diagram", "four_boxes", "arrow"],
"keywords": ["4原則", "マインド"],
"confidence": "high"
}
]
}
出力先: chapters/{chapter_id}/visual-index.json
スキーマ: schemas/visual-index.schema.json に準拠すること。
BLOCKER: 全チャプター処理完了後に1回だけ生成する。並列実行時の実行者ルールの 正本は manabi-ingestの「章内完結ルール」 を参照(並列Agentには実行させない)。
全チャプターの処理完了後、コース全体のカタログを生成:
{
"course_name": "YouTube Booster",
"total_frames": 245,
"course_custom_types": {
"tmux_pane": {"definition": "tmuxで複数paneに分割されたClaude Code画面", "frame_count": 18},
"vscode_editor": {"definition": "VS Codeのエディタ画面(ファイルツリー+エディタ+ステータスバー)", "frame_count": 8}
},
"type_distribution": {
"content_slide": 89,
"browser_screenshot": 45,
"talking_head": 67,
"diagram": 23,
"title_slide": 12,
"transition": 9
},
"chapters": [
{
"chapter_id": "03",
"frame_count": 31,
"high_value_frames": ["frame_005.jpg", "frame_012.jpg"],
"visual_index_path": "chapters/03/visual-index.json"
}
]
}
highvalueframes: contentslide, browserscreenshot, diagram のうち confidence: "high" のものtype_distribution: 全チャプターのフレームタイプを集計出力先: プロジェクトルートの visual-catalog.json
以下のチェックリストを全て通過すること:
type が設定されているかtextcontent が空の contentslide がないか(スライドには必ずテキストがある)talking_head のフレーム数が妥当か(通常20-40%)visual-catalog.json の total_frames が実際のファイル数と一致するかvisual-index.json が schemas/visual-index.schema.json に準拠しているかtypedistribution の合計が totalframes と一致するかcustom_types の数は5以下かcustom_type に定義文があるかcustom_type を使ったフレームが2枚以上あるかcustomtype の命名が snakecase か検証失敗時:
→ 不一致があれば該当チャプターを再処理
→ text_contentが空のcontent_slideがあれば画像を再読み取り
| Gate | 条件 | 未達時の対応 |
|---|---|---|
| G1 | manifest.jsonが存在する | manabi-ingestを先に実行するよう案内 |
| G2 | スクリーンショットディレクトリが存在する | manabi-ingestを先に実行するよう案内 |
| G3 | 各画像をReadツールで実際に読み取った | ファイル名推測は禁止、必ず読み取る |
| G4 | 全フレームを処理した(サンプルではなく全数) | 未処理フレームがあれば追加処理 |
| G5 | 自己検証チェックリスト全項目パス | 失敗項目を修正して再検証 |
| NG | OK | 理由 |
|---|---|---|
| ファイル名だけで分類する | 画像をReadツールで読んでから分類 | ファイル名に内容情報がない |
| talkingheadを見逃して全部contentslideにする | 人物のみのフレームは明確にtalking_headに分類 | 後段のスキルが不要な画像を処理してしまう |
| text_contentを空で済ませる | 画像内のテキストを全て抽出 | OCR情報がprocedure-extractorの紐付けに必要 |
| 一部のフレームだけサンプル処理する | 全フレームを漏れなく処理する | 抜け落ちたフレームが手順画像だった場合に手順が欠落する |
| content_slideとdiagramを区別しない | スライド形式かフローチャート形式かで明確に分ける | concept-extractorの処理方法が異なる |
| confidenceを全部highにする | 判断に迷う画像はmedium/lowにする | 後段で優先順位をつけるための情報が必要 |
| visual_elementsを省略する | 矢印、ボックス、表、コード等を記録する | ダウンストリームの画像選択精度に影響 |
| 当てはまらない画面を無理にコア型に押し込む | 講座固有型を作成 | 誤分類が後段スキルを破壊する |
| 1枚しか出ない型を作る | 最も近いコア型に割り当て | 型の無限増殖を防ぐ |
| 1講座で5型超の講座固有型を作る | 上位5つに統合 | カタログの肥大化防止 |
講座固有型の命名が汎用語(editor等) |
講座キーワードを含む(vscode_editor等) |
他講座と衝突しない |
詳細は references/frame-types.md を参照。概要:
content_slide(スライドが主体)browser_screenshotcontent_slide| ファイル | 場所 | 内容 |
|---|---|---|
| visual-index.json | chapters/{id}/visual-index.json | チャプター別フレーム情報 |
| visual-catalog.json | プロジェクトルート | コース全体のカタログ |
| スキル | 関係 |
|---|---|
| manabi-ingest | 前提: manifest.jsonとスクリーンショットを生成 |
| procedure-extractor | 後続: フレーム分類とOCRを利用 |
| concept-extractor | 並列実行可能: content_slideを補強に利用 |
Chapter 03: 31/31 frames processedconfidence: "low" で記録し、エラー内容をメモ