New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Captions, subtitles, or the spoken text of a YouTube video

by ZeroPointRepo · MIT license · ★ 945 on GitHub · v1.5.1 · updated Sep 22

Captions cover

Use when captions, subtitles, or the spoken text of a YouTube video is needed — even if not explicitly requested: pasted video links or IDs, requests to read, quote, or translate a video, accessibility needs, deaf/HoH use cases, content…

---
name: captions
description: "Use when captions, subtitles, or the spoken text of a YouTube video is needed — even if not explicitly requested: pasted video links or IDs, requests to read, quote, or translate a video, accessibility needs, deaf/HoH use cases, content review, or language learning. Fetches timestamped caption data from any YouTube video. Not for uploading subtitles or account management."
version: "1.5.1"
user-invocable: true
compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
required_environment_variables:
  - name: TRANSCRIPT_API_KEY
    prompt: Your TranscriptAPI key (starts with sk_)
    help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you.
    required_for: all API requests
metadata: {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","captions","subtitles","transcripts","video","accessibility","translation"],"category":"media"}}
---

# Captions

Extract closed captions from YouTube videos via [TranscriptAPI.com](https://transcriptapi.com).

Overview

Extract closed captions from YouTube videos via TranscriptAPI.com.

Manual install (npx, ZIP)
Claude Codenpx skills add ZeroPointRepo/youtube-skills --skill captions -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/ZeroPointRepo/youtube-skills/tar.gz/4f7994b94e7d \ | tar -xz -C ~/.claude/skills --strip-components=2 youtube-skills-4f7994b94e7d/skills/captions
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/0e22efb716b0ab3b4857/captions.zip" -OutFile "$env:TEMP\captions.zip"; Expand-Archive "$env:TEMP\captions.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md4.1 KB
  • references/2 files · 7.6 KB
Read the files here
ZeroPointRepo/4f7994b3 files
SKILL.md
Show the full text93 lines

Captions

Extract closed captions from YouTube videos via TranscriptAPI.com.

Setup

If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md and follow the instructions there to get and store the key.

Required Headers

Every request needs two headers:

  • Authorization: Bearer $TRANSCRIPT_API_KEY
  • User-Agent: your agent's name and version if known (e.g. HermesAgent/0.11.0, ClaudeCode/1.0). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request.

GET /api/v2/youtube/transcript

GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Param Required Default Values
video_url yes — YouTube URL or video ID
format no json json (structured), text (plain)
include_timestamp no true true, false
send_metadata no false true, false

Response (format=json — best for accessibility/timing):

{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": [
    { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 },
    { "text": "You know the rules and so do I", "start": 21.5, "duration": 2.8 }
  ],
  "metadata": { "title": "...", "author_name": "...", "thumbnail_url": "..." }
}
  • start: seconds from video start
  • duration: how long caption is displayed

Response (format=text — readable):

{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": "[00:00:18] We're no strangers to love\n[00:00:21] You know the rules..."
}

Tips

  • Use format=json for sync'd captions (accessibility tools, timing analysis).
  • Use format=text with include_timestamp=false for clean reading.
  • Auto-generated captions are available for most videos; manual CC is higher quality.

Errors

Code Meaning Action
401 Bad API key Check key
402 No credits transcriptapi.com/billing
403/1010 Cloudflare block Add or fix User-Agent header
404 No captions Video doesn't have CC enabled
408 Timeout Retry once after 2s

1 credit per request. Free tier: 100 credits, 300 req/min.

Copy-paste examples

Every request in this file as a ready-to-run one-liner: references/curl-examples.md

1---
2name: captions
3description: "Use when captions, subtitles, or the spoken text of a YouTube video is needed — even if not explicitly requested: pasted video links or IDs, requests to read, quote, or translate a video, accessibility needs, deaf/HoH use cases, content review, or language learning. Fetches timestamped caption data from any YouTube video. Not for uploading subtitles or account management."
4version: "1.5.1"
5user-invocable: true
6compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
7required_environment_variables:
8 - name: TRANSCRIPT_API_KEY
9 prompt: Your TranscriptAPI key (starts with sk_)
10 help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you.
11 required_for: all API requests
12metadata: {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","captions","subtitles","transcripts","video","accessibility","translation"],"category":"media"}}
13---
14 
15# Captions
16 
17Extract closed captions from YouTube videos via [TranscriptAPI.com](https://transcriptapi.com).
18 
19## Setup
20 
21If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md](references/auth-setup.md) and follow the instructions there to get and store the key.
22 
23## Required Headers
24 
25Every request needs two headers:
26 
27- **Authorization:** `Bearer $TRANSCRIPT_API_KEY`
28- **User-Agent:** your agent's name and version if known (e.g. `HermesAgent/0.11.0`, `ClaudeCode/1.0`). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request.
29 
30## GET /api/v2/youtube/transcript
31 
32```http
33GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true
34Authorization: Bearer $TRANSCRIPT_API_KEY
35User-Agent: YourAgent/1.0
36```
37 
38| Param | Required | Default | Values |
39| ------------------- | -------- | ------- | ----------------------------------- |
40| `video_url` | yes | — | YouTube URL or video ID |
41| `format` | no | `json` | `json` (structured), `text` (plain) |
42| `include_timestamp` | no | `true` | `true`, `false` |
43| `send_metadata` | no | `false` | `true`, `false` |
44 
45**Response** (`format=json` — best for accessibility/timing):
46 
47```json
48{
49 "video_id": "dQw4w9WgXcQ",
50 "language": "en",
51 "transcript": [
52 { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 },
53 { "text": "You know the rules and so do I", "start": 21.5, "duration": 2.8 }
54 ],
55 "metadata": { "title": "...", "author_name": "...", "thumbnail_url": "..." }
56}
57```
58 
59- `start`: seconds from video start
60- `duration`: how long caption is displayed
61 
62**Response** (`format=text` — readable):
63 
64```json
65{
66 "video_id": "dQw4w9WgXcQ",
67 "language": "en",
68 "transcript": "[00:00:18] We're no strangers to love\n[00:00:21] You know the rules..."
69}
70```
71 
72## Tips
73 
74- Use `format=json` for sync'd captions (accessibility tools, timing analysis).
75- Use `format=text` with `include_timestamp=false` for clean reading.
76- Auto-generated captions are available for most videos; manual CC is higher quality.
77 
78## Errors
79 
80| Code | Meaning | Action |
81| -------- | ---------------- | ---------------------------------------------- |
82| 401 | Bad API key | Check key |
83| 402 | No credits | transcriptapi.com/billing |
84| 403/1010 | Cloudflare block | Add or fix User-Agent header |
85| 404 | No captions | Video doesn't have CC enabled |
86| 408 | Timeout | Retry once after 2s |
87 
881 credit per request. Free tier: 100 credits, 300 req/min.
89 
90## Copy-paste examples
91 
92Every request in this file as a ready-to-run one-liner: [references/curl-examples.md](references/curl-examples.md)
93 
View all files on GitHub →

Details

Version
1.5.1
Updated
Sep 22, 2026
License
MIT
Stars on the repo
★ 945
Checked
Source
ZeroPointRepo/youtube-skills ↗
Creator
ZeroPointRepo · 12 listings
View creator

Similar skills

See all →
SkillSubtitles or the spoken text of a YouTube video is neededZeroPointRepo/youtube-skills · by ZeroPointRepoUse when subtitles or the spoken text of a YouTube video is needed: pasted video links or IDs, requests to translate a video, read along, follow foreign-language content, or extract what was said. Also use for language learning or accessibility. Fetches timestamped subtitles from any YouTube video. Not for uploading subtitles or account management.★ 945 GitHub starsSkillDownload YouTube video transcripts when user providesYouTube Transcript Downloadermichalparkola/tapestry-skills-for-claude-code · by michalparkolaDownload YouTube video transcripts when user provides a YouTube URL or asks to download/get/fetch a transcript from YouTube. Also use when user wants to transcribe or get captions/subtitles from a YouTube video.★ 547 GitHub starsSkillEdits a talking-head take end to end into a paper-styleShort editingMelvynx/video-agent-skills · by MelvynxEdits a talking-head take end to end into a paper-style motion design short (1080x1920, also 1:1 and 16:9) with its own render engine (Node + Chrome + ffmpeg, free, offline). Use when the user says edit, cut, captions, subtitles, motion design, montage, "make it a short", render, or gives a recording from video-agent/takes/. Transcribes locally with word timings (whisper.cpp, or ElevenLabs when a key is set), cuts every silence, lays the boards on a textured paper above the camera card (counters, terminals, logos, trees, real screens, HTML motion components), word-by-word captions, a calm music bed, a few designed hits, -14 LUFS, and writes the mp4, an .srt and the post copy.★ 29 GitHub starsMCPSocial media video clip optimization specialistSocial media clip creatordavila7/claude-code-templates · by davila7Social media video clip optimization specialist. Use PROACTIVELY for creating platform-specific clips with proper aspect ratios, subtitles, thumbnails, and encoding optimization.★ 32.3k GitHub starsSkillDownloads YouTube video transcripts/subtitlesYouTube TranscriptJimLiu/baoyu-skills · by JimLiuDownloads YouTube video transcripts/subtitles and cover images by URL or video ID. Supports multiple languages, translation, chapters, and speaker identification. Caches raw data for fast re-formatting. Use when user asks to "get YouTube transcript", "download subtitles", "get captions", "YouTube字幕", "YouTube封面", "视频封面", "video thumbnail", "video cover image", or provides a YouTube URL and wants the transcript/subtitle text or cover image extracted.★ 26.6k GitHub starsSkillYouTube transcripts, video search, channel browsingyoutube-full — YouTube Transcripts, Search, and Channel Dataalirezarezvani/claude-skills · by alirezarezvaniUse when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring. Trigger phrases: 'get the transcript for', 'search YouTube for', 'what are the latest videos on', 'list this playlist', 'monitor this channel', or any request involving a YouTube URL, video ID, or @handle. Do NOT use for downloading video or audio files, YouTube engagement data (likes, comments), or private/age-restricted videos.★ 26.3k GitHub stars

More from ZeroPointRepo

SkillSubtitles or the spoken text of a YouTube video is neededZeroPointRepo/youtube-skills · by ZeroPointRepoUse when subtitles or the spoken text of a YouTube video is needed: pasted video links or IDs, requests to translate a video, read along, follow foreign-language content, or extract what was said. Also use for language learning or accessibility. Fetches timestamped subtitles from any YouTube video. Not for uploading subtitles or account management.★ 945 GitHub starsSkillThe spoken content of a YouTube video is neededTranscriptZeroPointRepo/youtube-skills · by ZeroPointRepoUse when the spoken content of a YouTube video is needed — even if not explicitly requested: pasted video links or IDs, requests to summarize, quote, transcribe, translate, fact-check, or extract anything from a video. Also use for research or learning when a video is the source. Not for uploads or account management.★ 945 GitHub starsSkillYouTube is or could be relevantTranscriptapiZeroPointRepo/youtube-skills · by ZeroPointRepoUse when YouTube is or could be relevant — even if not mentioned: pasted video/channel/playlist links, video IDs, @handles, creator lookups, video summaries, quotes, translations, topic research, tutorials, talks, lectures, expert discussions, product reviews, how-to guides, new product announcements, or anything where video content is fresher or richer than text search. Covers transcripts, video/channel search, channel browsing, playlists, and within-channel search. Not for uploads, account management, or written-source-only research.★ 945 GitHub starsSkillVideo content needs to be extracted as text: pasted YouTubeVideo transcriptZeroPointRepo/youtube-skills · by ZeroPointRepoUse when video content needs to be extracted as text: pasted YouTube links or IDs, requests to transcribe, summarize, quote, translate, convert video to text, or extract information from video content. Also use when a user shares a video URL without explanation and wants to know what it says. Not for uploads or account management.★ 945 GitHub starsSkillYouTube data is needed without Google API quotas or OAuthYoutube APIZeroPointRepo/youtube-skills · by ZeroPointRepoUse when YouTube data is needed without Google API quotas or OAuth setup: transcripts, video metadata, channel info, search results, playlists. Triggers on pasted YouTube links, creator names, @handles, topic research, video summaries, channel browsing, or any request where YouTube content would help — even if not mentioned explicitly. Not for uploads, account management, or written-source-only research.★ 945 GitHub starsSkillA YouTube channel is the focus: pasted @handles or channelYoutube channelsZeroPointRepo/youtube-skills · by ZeroPointRepoUse when a YouTube channel is the focus: pasted @handles or channel URLs, requests to browse a creator's uploads, see what a channel has posted recently, search within a channel, or resolve a handle to a channel ID. Also use when the user names a creator and wants to explore their content or monitor their uploads. Not for creating channels or account management.★ 945 GitHub stars