with one click
fetch-youtube
// 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.
// 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.
| name | fetch-youtube |
| description | 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. |
| allowed-tools | Bash(uv run *) |
| argument-hint | ["video-url-or-id"] |
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:
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.
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.
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.
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.
Run and fix stylint checks for prose, Markdown, lessons, workshops, docs, and agent-written text. Use when editing written content or when the user asks for style, polish, or lint cleanup.
Transcribe local audio files with the OpenAI Audio Transcriptions API without adding OpenAI dependencies to the target project.