Youtube-skills subtitles

Get subtitles from YouTube videos for translation, language learning, or reading along. Use when the user asks for subtitles, subs, foreign language text, or wants to read video content. Supports multiple languages and timestamped output for sync'd reading.

install
source · Clone the upstream repo
git clone https://github.com/ZeroPointRepo/youtube-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ZeroPointRepo/youtube-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/clawhub/subtitles" ~/.claude/skills/zeropointrepo-youtube-skills-subtitles && rm -rf "$T"
manifest: clawhub/subtitles/SKILL.md
source content

Subtitles

Fetch YouTube video subtitles via TranscriptAPI.com.

Setup

If

$TRANSCRIPT_API_KEY
is not set, help the user create an account (100 free credits, no card):

Step 1 — Register: Ask user for their email.

node ./scripts/tapi-auth.js register --email USER_EMAIL

→ OTP sent to email. Ask user: "Check your email for a 6-digit verification code."

Step 2 — Verify: Once user provides the OTP:

node ./scripts/tapi-auth.js verify --token TOKEN_FROM_STEP_1 --otp CODE

API key saved to

~/.openclaw/openclaw.json
. See File Writes below for details. Existing file is backed up before modification.

Manual option: transcriptapi.com/signup → Dashboard → API Keys.

File Writes

The verify and save-key commands save the API key to

~/.openclaw/openclaw.json
(sets
skills.entries.transcriptapi.apiKey
and
enabled: true
). Existing file is backed up to
~/.openclaw/openclaw.json.bak
before modification.

To use the API key in terminal/CLI outside the agent, add to your shell profile manually:

export TRANSCRIPT_API_KEY=<your-key>

GET /api/v2/youtube/transcript

curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_URL&format=text&include_timestamp=false&send_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
ParamValuesUse case
video_url
YouTube URL or video IDRequired
format
json
,
text
json
for sync'd subs with timing
include_timestamp
true
,
false
false
for clean text for reading/translation
send_metadata
true
,
false
Include title, channel, description

For language learning — clean text without timestamps:

curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=text&include_timestamp=false" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY"

For translation — structured segments:

curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=json&include_timestamp=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY"

Response (

format=json
):

{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": [
    { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 }
  ]
}

Response (

format=text
,
include_timestamp=false
):

{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": "We're no strangers to love\nYou know the rules and so do I..."
}

Tips

  • Many videos have auto-generated subtitles in multiple languages.
  • Use
    format=json
    to get timing for each line (great for sync'd reading).
  • Use
    include_timestamp=false
    for clean text suitable for translation apps.

Errors

CodeAction
402No credits — transcriptapi.com/billing
404No subtitles available
408Timeout — retry once after 2s

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