yt-digest
Paste a YouTube link. Get a vault-ready research digest in ~90 seconds for ~$0.04.
A Claude Code skill that turns any YouTube video into a single markdown note you can actually use: a TL;DR, 5–10 key takeaways each deep-linked to the exact second they happen, screenshots of the slides/demos/dashboards the speaker points at, and a collapsed full transcript at the bottom. The source video is downloaded, used for frame grabs, then deleted — your vault keeps ~3 MB per video, not 100.
It is not a content-repurposing factory. It does not turn one video into thirty social posts. It does the opposite: it turns a video into knowledge you keep — queryable, timestamped, and screenshotted in your second brain. Built for people who bookmark 40 videos a week and watch four.
Why this exists
The bottleneck was never finding good videos. It's that a 48-minute talk costs 48 minutes, and "I'll watch it later" is where good videos go to die. yt-digest makes "I watched it" a 90-second job: skim the TL;DR, jump to the two takeaways that matter via the timestamp deep-links, read the slide off the screenshot, move on. The full transcript is there if you need to go deeper, collapsed so it doesn't get in the way.
The digest lands as a plain markdown file in your Obsidian vault (or any markdown notes app). It's searchable forever, it links into the rest of your notes, and six months from now you can grep "the unlimited offer construct" and land on the exact 17-second clip that taught it to you.
What you get per video
vault/research/youtube/<slug>.md # the digest
vault/attachments/youtube/<slug>/ # frame-MM-SS.png screenshots
A real example (a 47:55 interview) produced: 8 TL;DR bullets, 10 numbered takeaways, 6 embedded screenshots, and timestamp deep-links back to the source — generated in about 90 seconds for roughly four cents.
Repo structure
yt-digest/
├── README.md # you are here
├── SKILL.md # the skill — drop into .claude/skills/yt-digest/
├── scripts/
│ ├── fetch.sh # yt-dlp: metadata + captions + (optional) 720p video
│ ├── parse_vtt.py # VTT → clean sentence-level transcript with timestamps
│ └── extract_frames.sh # ffmpeg: one frame per requested timestamp
├── LICENSE
└── .gitignore
Four files. No SaaS dependencies — yt-dlp and ffmpeg run locally and cost nothing. The only spend is the model pass that picks the takeaways (~1–4 cents).
Install
Prerequisites: Claude Code, yt-dlp, ffmpeg, and python3.
# 1. macOS (Homebrew) — Linux users swap in apt/pacman
brew install yt-dlp ffmpeg
# 2. Drop the skill into your project
git clone https://github.com/tga-cheetung/yt-digest.git
mkdir -p .claude/skills/yt-digest
cp -r yt-digest/SKILL.md yt-digest/scripts .claude/skills/yt-digest/
chmod +x .claude/skills/yt-digest/scripts/*.sh
# 3. Make sure your output dirs exist (or change the paths in SKILL.md)
mkdir -p vault/research/youtube vault/attachments/youtube
Use
Inside Claude Code:
/yt-digest https://youtu.be/BI-MNjm1tTQ
Or just paste a link and say "digest this." Optional flags:
--no-screenshots— transcript-only, skips the video download (~$0.01, ~5s)--tags ai-agents,pricing— adds tags to the digest frontmatter--slug my-name— override the auto-generated filename
The skill prints DIGEST: <absolute path> as its final line, so any orchestrator, cron job, or chat bot that shells out can read the result back. (More on that in Run it headless.)
How to tune it for your own research
Three places to edit, all in SKILL.md:
- Where digests land. Change
vault/research/youtube/andvault/attachments/youtube/to wherever your notes live. The skill writes plain markdown with Obsidian![[...]]embed syntax; if you don't use Obsidian, the fallbackform works in any markdown renderer. - What counts as a "key moment." Step 3 of the skill is the selection brief — the criteria for which 5–10 moments earn a bullet (frameworks, specific numbers, counterintuitive claims, on-screen references). Tighten or loosen it for your domain. Researching pricing strategy? Tell it to prioritize every dollar figure and offer construct. Researching code? Tell it to screenshot every terminal and editor pane.
- When to screenshot. The skill only grabs a frame when the speaker is clearly pointing at something visual. If you're digesting talking-head podcasts, run
--no-screenshotsand skip the video download entirely.
Run it headless
The skill takes all its input from CLI args, never prompts mid-run, and writes to a deterministic path. That means you can dispatch it from anything that can run a shell command — a cron job, a CI step, or a chat bot.
The pattern that makes it feel magical: wire a Slack/Telegram bot to shell out to Claude Code with the skill and the URL, then read the final DIGEST: line back and post the path (or the TL;DR) into the thread. Now "drop a YouTube link in Slack, get a digest in your vault 90 seconds later" is a one-message workflow from your phone.
One gotcha worth knowing if you do this: in a headless claude -p run, a small/cheap model will sometimes describe what the skill would do instead of actually invoking the scripts (turns burned, zero tool calls, nothing written). If you see that, route the headless dispatch to a more capable model — the interactive run is fine on the cheap model, it's the unattended path that needs the upgrade.
Cost
| Component | Cost per 30-min video |
|---|---|
| yt-dlp transcript + 720p video | $0 |
| Model pass to pick takeaways (~7K in / 800 out) | ~$0.01–0.04 |
| ffmpeg frame extraction | $0 |
| Vault storage (digest + screenshots) | ~3 MB |
The ~100 MB source video is deleted after frame extraction.
License
MIT. Fork it, change the paths, point it at your own vault. Built by The GTM Architects.
No comments yet
Be the first to share your take.