How this skill is triggered — by the user, by Claude, or both
Slash command
/yt-study:yt-studyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
YouTube video study notes with adaptive depth based on video length.
YouTube video study notes with adaptive depth based on video length.
Trigger Phrase: "유튜브 정리해줘 [URL]" or "YouTube study", "영상 요약", "transcript 번역", "영상 퀴즈", or any YouTube URL.
Search for ## YT Study Settings in this order:
~/.claude/memory/MEMORY.md (shared across all projects)If found in either location: read the settings and proceed to Step 1.
If NOT found in either location: STOP. You MUST run the setup wizard below before doing ANY metadata extraction or file writing. Do NOT infer, guess, or use default paths.
save_target: notion (no file path needed)## YT Study Settings:
~/.claude/memory/MEMORY.md## YT Study Settings
- **Save path**: {chosen path}
- **Save target**: file | notion
- **Language**: {language code: ko, en, ja, etc.}
- **Categories**: {comma-separated list}
Precedence: If config exists in BOTH project and global, project config wins (allows per-project override).
scripts/extract_metadata.sh "<URL>"
Extract: title, channel, upload_date, duration, duration_seconds, tags, is_live.
is_live is true: "Live stream is still in progress. Please try again after it ends." -> stop.list= or playlist: "Playlist URLs are not supported. Please provide a single video URL." -> stop.Determine preset from duration_seconds:
| Preset | Duration | Template | Transcript Output | Quiz |
|---|---|---|---|---|
| SHORT | < 1800s (~30min) | references/templates/short.md | Full translation | 9 (3x3) |
| MEDIUM | 1800-7200s (30min-2h) | references/templates/medium.md | Key quotes | 9 (3x3) |
| LONG | > 7200s (2h+) | references/templates/long.md | Key quotes | 12-15 (4-5 x 3) |
Boundary handling: exactly 1800s = MEDIUM, exactly 7200s = LONG. Note: For very short videos (<60s), use SHORT preset but reduce quiz to 6 questions (2 per level).
Announce to user: "This is a {preset} video ({duration}). Using {preset} analysis template."
scripts/extract_transcript.sh "<URL>" [output_dir]
Priority: manual subtitles (ko > en) > auto-generated (ko > en).
If no subtitles available: inform user "Cannot extract subtitles for this video." and stop.
SHORT videos skip this step entirely.
Pass 1 - Table of Contents:
Read transcript in chunks (~3000 lines per read, reduce to ~2000 if context issues). While reading, identify topic transitions:
Produce a numbered TOC:
Part 1 [00:00~15:30] Opening & Market Overview
Part 2 [15:30~35:20] Topic A Analysis
Part 3 [35:20~55:00] Topic B Deep Dive
...
Pass 2 - Per-Part Analysis:
For each part, re-read the relevant transcript section and analyze:
Web search for proper nouns and domain context:
"{video title}" {channel} summary"{speaker}" {topic keywords}Replace auto-subtitle misrecognitions with correct terms from web search:
[unclear]Load the template for the determined preset: references/templates/{preset}.md
Generate the document following the template structure exactly. Fill all sections with analysis from Steps 2.5 and 3-4.
Suggest category from the user's configured category list. If ambiguous, ask user via AskUserQuestion with their categories as options. If no matching category, offer to create a new one (and update MEMORY.md config).
If save_target: notion:
Check if Notion MCP tools are available (e.g., notion_create_page, notion_append_block_children).
With Notion MCP (recommended):
Without Notion MCP (fallback):
Skip file write and duplicate check steps below for both cases.
If file-based save (Obsidian / local / custom path):
Save path: {configured_path}/{category}/{YYYY-MM-DD}-{sanitized-title}.md
Sanitization rules:
Duplicate check: If file already exists at target path, ask user:
-2)After saving, verify file exists and report path to user.
Refer to references/quiz-patterns.md for question patterns and scaling rules.
| Preset | Questions | Calls |
|---|---|---|
| SHORT | 9 (3x3) | 3 |
| MEDIUM | 9 (3x3, distributed across parts) | 3 |
| LONG | 12-15 (4-5 x 3) | 6 |
After grading, append quiz results to the saved document:
## Quiz Results
Score: 7/9 (78%) | Level 1: 3/3 | Level 2: 2/3 | Level 3: 2/3
### Wrong Answer Notes
**Q5**: {question}
- Selected: B -> Correct: C
- {1-2 sentence explanation}
After quiz, ask via AskUserQuestion:
references/deep-research.md)| Situation | Response |
|---|---|
| No subtitles | "Cannot extract subtitles." -> stop |
| Very low quality subtitles | Use [unclear] markers, supplement with web search |
| Live stream in progress | "Still live. Try after it ends." -> stop |
| yt-dlp or python3 not installed | "Install with: brew install yt-dlp python3 (macOS) / see README for Linux/Windows" -> stop |
| Playlist URL | "Playlist URLs not supported. Provide a single video URL." -> stop |
| Transcript exceeds context | Reduce chunk size (3000 -> 2000 lines) |
| Save path inaccessible | Error message + suggest alternative path |
| Age-restricted video | "Age-restricted video. Try with browser cookies: yt-dlp --cookies-from-browser chrome" -> stop |
| Members-only / premium | "This video requires membership access and cannot be processed." -> stop |
Output language is determined by the user's configured language setting from Step 0.
scripts/extract_metadata.sh - metadata extractionscripts/extract_transcript.sh - subtitle extraction (SRT)references/templates/short.md - SHORT preset templatereferences/templates/medium.md - MEDIUM preset templatereferences/templates/long.md - LONG preset templatereferences/quiz-patterns.md - quiz patterns + scalingreferences/deep-research.md - Deep Research workflownpx claudepluginhub kim-jeonghyun/jh-claude-plugins --plugin yt-studyExtracts YouTube transcripts/metadata, generates Korean summaries/insights Markdown docs, tests comprehension with 9 tiered quizzes (easy/medium/hard), and enables deep research follow-ups.
Extracts YouTube video transcripts and metadata, then creates a vault note with synthesized content. Triggers on any YouTube URL or phrases like "summarize this video."
Extracts transcripts from YouTube videos via youtube-transcript-api Python library or web scraping and generates detailed STAR + R-I-S-E summaries for educational content documentation.