skills/youtube-analysis/SKILL.md
Extract YouTube transcripts and produce structured concept analysis with multi-level summaries, key concepts, takeaways. Uses youtube-transcript-api with yt-dlp fallback. Triggers on: "analyze youtube video", "youtube transcript", "summarize this video", "extract concepts from video", "video key points", or any youtube.com/youtu.be URL.
npx skillsauth add mathews-tom/armory youtube-analysisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extract transcripts from YouTube videos and produce structured concept analysis — key ideas, arguments, technical terms, takeaways, and multi-level summaries — all without API keys or MCP servers.
| File | Purpose |
| --------------------------------- | ------------------------------------------------------ |
| scripts/fetch_transcript.py | Core transcript + metadata fetcher (CLI + importable) |
| scripts/analyze_video.py | Orchestrator: fetch → structure → export scaffold |
| scripts/utils.py | URL parsing, timestamp formatting, transcript chunking |
| references/analysis-patterns.md | Prompt patterns for each video type |
| assets/output-template.md | Markdown template for final output |
User provides YouTube URL
│
▼
┌─────────────────────┐
│ Step 0: Deps check │
└────────┬────────────┘
▼
┌─────────────────────┐
│ Step 1: Parse URL │
└────────┬────────────┘
▼
┌─────────────────────┐ ┌──────────────┐
│ Step 2: Transcript │────▶│ yt-dlp │
│ (youtube-t-api) │fail │ (fallback) │
└────────┬────────────┘ └──────┬───────┘
│◀───────────────-────────┘
▼
┌─────────────────────┐
│ Step 3: Metadata │
│ (yt-dlp --dump-json│
└────────┬────────────┘
▼
┌─────────────────────┐
│ Step 4: Claude │
│ analyzes transcript│
└────────┬────────────┘
▼
┌─────────────────────┐
│ Step 5: Export MD │
└─────────────────────┘
Before running any script, verify dependencies are installed:
uv pip install youtube-transcript-api yt-dlp -q
Or run scripts directly with uv run:
uv run --with youtube-transcript-api --no-project python scripts/fetch_transcript.py "URL"
Verify:
python -c "from youtube_transcript_api import YouTubeTranscriptApi; print('OK')"
yt-dlp --version
Use scripts/utils.py:parse_youtube_url() to extract the video ID. Supported formats:
| Format | Example |
| -------------- | -------------------------------------------------- |
| Standard watch | youtube.com/watch?v=dQw4w9WgXcQ |
| Short URL | youtu.be/dQw4w9WgXcQ |
| Shorts | youtube.com/shorts/dQw4w9WgXcQ |
| Embed | youtube.com/embed/dQw4w9WgXcQ |
| Live | youtube.com/live/dQw4w9WgXcQ |
| With params | youtube.com/watch?v=dQw4w9WgXcQ&t=120&list=PLxxx |
| Bare ID | dQw4w9WgXcQ |
| Mobile | m.youtube.com/watch?v=dQw4w9WgXcQ |
| Music | music.youtube.com/watch?v=dQw4w9WgXcQ |
If parsing fails, ask the user to provide the URL in a standard format.
Run fetch_transcript.py to get the transcript:
cd <skill_dir>/scripts
python fetch_transcript.py "YOUTUBE_URL" --lang en
This outputs JSON to stdout. The script:
youtube-transcript-api to scrape captions directly (no API key)yt-dlp --write-sub --write-auto-sub to extract subtitle filesThe returned JSON contains both individual timestamped segments and a joined transcript_text field.
Or import as a module (used by analyze_video.py):
from fetch_transcript import fetch_video
data = fetch_video("https://youtube.com/watch?v=VIDEO_ID", lang="en")
Metadata is fetched automatically by fetch_transcript.py via yt-dlp --dump-json:
No separate step needed — fetch_video() returns everything.
This is where you (Claude) do the work. The scripts provide raw data; you perform the analysis.
Choose based on user request or video duration:
| Depth | When to Use | Sections to Fill |
| ---------- | ------------------------------------------------ | --------------------------------------------- |
| quick | User wants fast overview, or video < 10 min | TL;DR, Key Concepts, Takeaways |
| standard | Default for most videos | All template sections |
| deep | User wants thorough breakdown, or video > 30 min | All sections + timestamped section-by-section |
references/analysis-patterns.md for type-specific guidanceUse utils.chunk_transcript() to break the transcript into 5-minute segments, then analyze each chunk with timestamps:
from utils import chunk_transcript
chunks = chunk_transcript(data["transcript"], chunk_minutes=5)
for chunk in chunks:
print(f"[{chunk['start_formatted']} - {chunk['end_formatted']}]")
print(chunk["text"])
Or run the orchestrator with --depth deep:
python analyze_video.py "YOUTUBE_URL" --depth deep
| Type | Key Extraction Focus | See |
| --------- | ------------------------------------------------- | --------------------------------- |
| Lecture | Thesis, arguments, citations, definitions | references/analysis-patterns.md |
| Tutorial | Steps, tools, prerequisites, gotchas | references/analysis-patterns.md |
| Interview | Perspectives, disagreements, attributed positions | references/analysis-patterns.md |
| Podcast | Topic threads, opinions, recommendations | references/analysis-patterns.md |
| Tech Talk | Architecture, trade-offs, benchmarks, lessons | references/analysis-patterns.md |
| Panel | Consensus vs. disagreement, per-speaker views | references/analysis-patterns.md |
Read references/analysis-patterns.md for detailed extraction guidance per type.
The orchestrator generates a scaffold:
cd <skill_dir>/scripts
python analyze_video.py "YOUTUBE_URL" --output ./analysis.md --depth standard --type auto
Flags:
--output PATH: Where to write (default: ./{sanitized_title}.md)--depth quick|standard|deep: Analysis depth--type auto|lecture|tutorial|interview|podcast|tech-talk|panel: Video type hint--lang CODE: Transcript language (default: en)--json: Output raw JSON instead of Markdown scaffoldThe scaffold contains populated metadata and [TO BE ANALYZED] placeholders. Claude replaces these with actual analysis.
Preferred workflow: Run fetch_transcript.py to get JSON, analyze in context, then produce the final Markdown directly using assets/output-template.md as the structure guide. The orchestrator is useful for batch processing or when the user wants a file written.
| Error | Exit Code | Cause | Resolution | | -------------------- | --------- | -------------------------------------- | ------------------------------------------------ | | URL parse failure | 1 | Invalid or unsupported URL format | Ask user for standard YouTube URL | | No transcript | 2 | Video has no captions (manual or auto) | Inform user; suggest a different video | | Video unavailable | 1 | Private, deleted, or geo-blocked | Inform user of the restriction | | Age-restricted | 1 | Requires authentication | Inform user; yt-dlp may work with cookies | | Metadata fetch fail | 0 | yt-dlp network issue | Transcript still works; metadata shows "Unknown" | | Language unavailable | 0 | Requested lang not available | Auto-falls back to available language | | yt-dlp not installed | 1 | Missing dependency | Run Step 0 dependency installation |
testing
Manages dependent branch stacks and stacked pull requests using safe Git topology rules. Triggers on: "create stacked PRs", "publish this stack", "sync my PR stack", "rebase this stack", "merge the stack", "retarget child PRs", "split this branch into stacked PRs", "validate this stack", "cleanup stacked branches". Use when local branches or one source branch need to become a dependency-ordered PR stack with correct parent bases, validation, synchronization, merge order, and cleanup.
development
Scaffolds per-repository agent context so coding agents share the same issue tracker rules, triage label vocabulary, domain glossary, ADR layout, and handoff conventions. Triggers on: "set up project context", "configure agent docs", "create CONTEXT.md", "setup agent workflow", "agent issue tracker setup", "triage labels", "domain glossary for agents". Use when a repo needs durable context files before planning, triage, debugging, TDD, architecture review, or multi-agent implementation.
testing
Produces phased task boards from feature requests: dependency-mapped work items, parallelization flags, risk flags, edge cases, test matrices. Triggers on: "decompose this feature", "task breakdown with dependencies", "phased implementation plan", "work breakdown structure". NOT for effort estimates, use estimate-calibrator.
development
Hypothesis-driven debugging with ranked hypotheses, git bisect strategy, instrumentation planning, and minimal reproduction design. Triggers on: "debug this systematically", "root cause analysis", "bisect this bug", "rank hypotheses", "isolate this issue", "minimal reproduction". NOT for general reasoning.