用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tegnike/nikechan-discord-public --skill youtube-notes命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
アイデア・企画案・発想・ブレストを求められたときに必ず使う。文章や既存案を主体・対象・作用に分解し、LLMの外側で乱数再結合して、普通では出にくい案を作る。
基于 SOC 职业分类
| name | youtube-notes |
| description | YouTube動画のURLから字幕を取得し、文字起こし・要約・ノート化する。「YouTube動画をまとめて」「この動画をノートにして」「文字起こしして」と言われたら使う。 |
| platforms | ["macos","linux"] |
YouTube動画から字幕を取得し、構造化されたノートを作成する。
youtube-content は無効化されているため、YouTube要約・文字起こし依頼では必ずこの youtube-notes を使う。web_search と web_extract は使わない。t.co/bit.ly 等)や youtu.be 短縮形式は、先に「最終リダイレクト先」を確認して YouTube 本体かを検証する。
ゲームをリスト化して のような依頼でも、字幕または音声解析で「動画内で確認できたゲームタイトルのみ」を列挙する。確認不能なら「動画内ソースだけでは確認不能」と明記し、外部調査で補完しない。Could not retrieve a transcript... など明確な失敗を含む場合は、要約不成立として先にその旨を明示する。
[GEMINI_AUDIO_FALLBACK] が添付されている場合のみ、まずその要約を採用して回答する。workdir は必ず /Users/nikenike/.hermes/hermes-agent にする。workdir typoや一時的な失敗時は同一URLで再実行し、検索へ逃げない。yt-dlp -J の巨大JSONをそのまま出力しない。title/channel/duration/id程度だけ抽出する。youtube_transcript_api が Subtitles are disabled や「Could not retrieve transcript」を返す場合は、字幕取得失敗として明示し、次工程へ進む。ゲームをリスト化 等の内容抽出指示があり、かつ字幕/Fallback が無い場合は、動画内情報で確認できないため「字幕取得不可のため未確認」と明記して返す。GEMINI_AUDIO_FALLBACK が添付されている場合は、それを最優先で利用し、情報が不確か/不足な箇所は「不確か」と明記する。/tmp/ytdl/<VIDEO_ID>.mp3 が存在すれば再DLしない)。ただし長時間処理が見込まれる場合は yt-dlp を background で実行して待機確認する。gemini-audio-analyze --help や analyze --help を呼ばない。help確認は usage error の時だけ。scripts/fetch_transcript.py や ../scripts/fetch_transcript.py は使わない。存在確認もしない。/Users/nikenike/.hermes/hermes-agent/venv/bin/python -m youtube_transcript_api ... を使う。/Users/nikenike/.hermes/profiles/nikechan-discord-public/bin/gemini-audio-analyze analyze --file AUDIO_PATH --mode speech を使う。Use this skill when a message contains a YouTube URL and asks for any of:
文字起こしして字幕を取って動画をまとめてこの動画をノートにして内容を要約してユーザーからYouTube URLを受け取る。
# t.co や短縮リンクから最終リダイレクト先を確認
cd /Users/nikenike/.hermes/hermes-agent && /Users/nikenike/.hermes/hermes-agent/venv/bin/python - <<'PY'
import requests,sys
url = "[URL]"
r = requests.get(url, allow_redirects=True, timeout=20)
print(r.url)
PY
r.url が youtube.com/watch?... または youtu.be/... でない場合は動画処理を中断し、要約不可を明示してユーザーに元のURL確認を依頼。# 動画メタデータ取得。巨大JSONをそのまま出さず、必要フィールドだけ表示する。
cd /Users/nikenike/.hermes/hermes-agent && /Users/nikenike/.hermes/hermes-agent/venv/bin/yt-dlp --no-playlist -J "[YouTube URL]" | /Users/nikenike/.hermes/hermes-agent/venv/bin/python -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps({k:d.get(k) for k in ["id","title","channel","uploader","duration","webpage_url"]}, ensure_ascii=False, indent=2))'
# VIDEO_IDはURLから抽出(v=以降、またはyoutu.be/以降)
/Users/nikenike/.hermes/hermes-agent/venv/bin/python -m youtube_transcript_api [VIDEO_ID] --languages ja en --format text
以下のフォーマットでノートを作成:
# [動画タイトル]
## 基本情報
- **URL:** [YouTube URL]
- **時間:** XX分XX秒
- **チャンネル:** [チャンネル名]
## 概要
動画の内容を3-5行で要約
## 内容
### [セクション1](0:00〜)
- ポイント1
- ポイント2
### [セクション2](5:00〜)
- ポイント1
- ポイント2
## 重要ポイント
- 学び1
- 学び2
- 学び3
## 用語解説
- **用語1:** 説明
- **用語2:** 説明
ノート内容をチャットに表示する。
youtube_transcript_api 失敗、字幕無効、空、短すぎる/ノイズ寄りの3条件いずれかで、字幕ベース要約が成立しない場合は fallback。
音声を抽出する。既に /tmp/ytdl/VIDEO_ID.mp3 があれば再DLしない。
長時間(>600秒・大容量)が見込まれるケースは background で実行し、完了を確認してから解析へ進む。
cd /Users/nikenike/.hermes/hermes-agent && mkdir -p /tmp/ytdl && test -s /tmp/ytdl/VIDEO_ID.mp3 || /Users/nikenike/.hermes/hermes-agent/venv/bin/yt-dlp --no-playlist -x --audio-format mp3 -o "/tmp/ytdl/%(id)s.%(ext)s" "[YouTube URL]"
ユーザー入力に [GEMINI_AUDIO_FALLBACK] が付与されている場合は、まずその結果を確認して要約へ反映する。
代わりに音声解析が必要な場合は、次を実行する。
/Users/nikenike/.hermes/profiles/nikechan-discord-public/bin/gemini-audio-analyze analyze --file /tmp/ytdl/VIDEO_ID.mp3 --mode speech --prompt "このYouTube動画の内容を要約し、動画内で確認できたゲームタイトルだけを箇条書きで列挙してください。不確かなものは不確かと明記してください。"
解析結果が返ったら、それを根拠に回答して終了する。--help は呼ばない。
「notes/に保存して」と言えば、ファイルとして保存される。