Youtube transcript skill
Fetch YouTube video transcripts (auto-generated or manual subtitles) without API keys, using the open-source youtube-transcript-api Python library, with yt-dlp as a fallback for blocked videos. Use when the user asks for a transcript / captions / subtitles of a YouTube video, or when summarizing / quoting a video.From its SKILL.md
npx -y skills add 0SxD/youtube-transcript-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.1 KB, 498 tokens by cl100k_base, as published. Nobody here has run it
Skill: youtube-transcript
When to invoke
User mentions:
- "get the transcript of this YouTube video"
- "summarize this YouTube link"
- "what does the speaker say at <timestamp>"
- pastes a
youtube.com/watch?v=...oryoutu.be/...URL and asks anything that requires reading what was said
How to invoke
The skill ships a uv venv at .venv/. Run:
cd <plan-root>/skills/youtube-transcript
.venv/Scripts/python.exe fetch_transcript.py VIDEO_ID
Or call from another script:
import sys
sys.path.insert(0, "<plan-root>/skills/youtube-transcript/.venv/Lib/site-packages")
from youtube_transcript_api import YouTubeTranscriptApi
api = YouTubeTranscriptApi()
fetched = api.fetch(video_id, languages=["en"])
for s in fetched:
print(f"[{s.start:.1f}s] {s.text}")
Fallback to yt-dlp
If youtube-transcript-api fails (geofence, rate limit, etc.):
.venv/Scripts/yt-dlp \
--write-auto-subs --skip-download \
--sub-langs en --sub-format vtt \
-o "%(id)s.%(ext)s" \
"https://www.youtube.com/watch?v=VIDEO_ID"
Returns
- youtube-transcript-api: list of
FetchedTranscriptSnippetobjects with.text,.start,.duration - yt-dlp: a
.vttfile in current directory named after the video ID
Constraints
- Some videos disable transcripts entirely; both tools will fail. Tell user.
- Auto-generated transcripts are imperfect; flag as "auto-generated" if
is_generated=Trueon the transcript object. - Region-blocked videos may return 403; route through yt-dlp with
--proxyif needed.
Citations
- youtube-transcript-api: https://github.com/jdepoix/youtube-transcript-api (MIT)
- yt-dlp: https://github.com/yt-dlp/yt-dlp (Unlicense)
Verified
Smoke-tested 2026-04-30 against video ID 0eKVizvYSUQ. Returned 128 segments. Skill works.
What ships with it: 5 files
3.7 KB alongside SKILL.md, 1 of them executable
- fetch_transcript.pyruns1.1 KB
- .gitignore143 B
- LICENSE1.1 KB
- LICENSE-PENDING.md224 B
- README.md1.1 KB
Gives 0 of the 12 instructions most video audio skills give in 498 tokens
Counted across 622 of the 795 authors here whose files we hold, read 2026-08-07
- Read individual rule files for detailed explanationsin 21 of 622, across 10 files
- Render final videoin 13 of 622, across 6 files
- Use WAV PCM 16kHz mono audio formatin 12 of 622, across 3 files
- Use this skill when dealing with Remotion codein 11 of 622, across 4 files
- Save generated audio to a WAV filein 11 of 622, across 4 files
- Handle conversion errors gracefullyin 10 of 622, across 6 files
- Add captions to videos alwaysin 10 of 622, across 4 files
- Generate music from text descriptions using MusicGenin 9 of 622, across 2 files
- Do not skip pipeline layersin 9 of 622, across 3 files
- Do not make one tool do everythingin 9 of 622, across 3 files
- Use Azure Document Intelligence for complex PDFsin 9 of 622, across 4 files
- Never ask the user to paste their full API keyin 9 of 622, across 3 files
Said here and by no other author read
- run python fetch script with video id
- fallback to yt-dlp on failure
- use proxy flag on region block
- inform user when transcripts disabled
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.