skills/fetch-youtube/SKILL.md
Fetch YouTube video transcripts. Use when the user asks to get a YouTube video transcript, subtitles, or captions, or wants to analyze/summarize a YouTube video.
npx skillsauth add alexeygrigorev/.claude fetch-youtubeInstall 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.
Fetch the transcript/subtitles of a YouTube video and return it as timestamped text.
To get all video IDs and titles from a playlist:
python3 ~/.claude/skills/fetch-youtube/playlist.py <playlist-id-or-url>
Example:
python3 ~/.claude/skills/fetch-youtube/playlist.py PL3MmuxUbc_hIB4fSqLy_0AfTjVLpgjV3R
Output (tab-separated: video ID and title):
FgnelhEJFj0 LLM Zoomcamp 2025 Launch Stream
Q75JgLEXMsM LLM Zoomcamp 1.1 – Einführung in LLM und RAG
...
Note: this only fetches the first page of results (typically the first ~100 videos). For longer playlists with pagination, the script would need to be extended.
Ensure youtube-transcript-api is installed:
pip install youtube-transcript-api
Alternative - No installation required (using uv):
uv run --with youtube-transcript-api python ~/.claude/skills/fetch-youtube/youtube.py <video-id-or-url>
Run the fetch script with a YouTube video ID or URL:
uv run --with youtube-transcript-api --with python-dotenv ~/.claude/skills/fetch-youtube/youtube.py <video-id-or-url>
The script accepts either:
dQw4w9WgXcQhttps://www.youtube.com/watch?v=dQw4w9WgXcQhttps://youtu.be/dQw4w9WgXcQThe script automatically loads Oxylabs proxy credentials from ~/.config/youtube/.env if present. If the direct request fails, the retry will use the proxy. No extra flags needed - just run the same command above.
The .env file should contain:
OXYLABS_USER=...
OXYLABS_ENDPOINT=...
OXYLABS_PASSWORD=...
The script prints the transcript as timestamped subtitles to stdout:
0:00 Hello and welcome
0:05 Today we're going to talk about...
1:23:45 And that wraps up our discussion
After fetching the transcript, ask the user what they'd like to do with it. Common tasks:
development
Add the standardized CI publish workflow (`.github/workflows/publish.yml` + `make release`) to an existing Python project so PyPI releases happen on tag push. Use when a project still publishes via a local script (`publish.py`, `hatch publish`, `twine upload`) or has no automated publish at all.
development
Fetch and transcribe Google Recorder voice notes. Use when the user shares a recorder.google.com link and wants the original audio file, a transcript, or wants to act on a voice note.
development
Release the current project to its package registry and GitHub by bumping the version, pushing a tag, and letting CI publish. Works for any project (Python/PyPI, Rust/crates.io, Node/npm, etc.) that has a CI publish workflow keyed off `v*` tags.
tools
Initialize a new Python library with modern tooling, packaging, tests, and optional CLI support. Use when the user wants to scaffold a new Python package.