agentleFS
valtterimelkkovaltterimelkko/agent-workflow-skills/skills/youtube-caption/SKILL.md

youtube-caption

Skill2 starsChanged 44 days agoMITView on GitHub

Fetch YouTube video captions/transcripts and metadata. Use when you need to download video transcripts, extract captions from YouTube URLs, get video descriptions and metadata, or process YouTube video text content. Supports residential proxy for reliable caption and metadata fetching (credentials can be auto-loaded from environment or a shell startup file).

  • Installs packages

The file

Files
SKILL.md

YouTube Caption Fetcher

Download captions/transcripts and metadata from any YouTube video using the youtube-transcript-api library with optional residential proxy support.

Prerequisites

Required Python package:

pip install youtube-transcript-api

Residential Proxy Credentials (auto-loaded from environment or a shell startup file):

# Reddit proxy for YouTube caption and metadata fetching
export YOUTUBE_PROXY_URL="http://username:password@host:port"
# legacy fallback also supported:
export REDDIT_PROXY_URL="http://username:password@host:port"

The skill automatically fetches these credentials from the environment or a shell startup file when caption or metadata fetching requires proxy support.

Quick Start

Fetch captions and metadata:

python3 ./scripts/fetch_caption.py --url "https://www.youtube.com/watch?v=VIDEO_ID"

Fetch only metadata (uses proxy):

python3 ./scripts/fetch_caption.py --url "https://youtu.be/VIDEO_ID" --metadata-only

Fetch captions only (uses proxy):

python3 ./scripts/fetch_caption.py --url "https://www.youtube.com/watch?v=VIDEO_ID" --captions-only

Parameters

ParameterRequiredDefaultDescription
--url or -uYes-YouTube video URL (supports various formats)
--metadata-onlyNofalseFetch only video metadata (uses proxy)
--captions-onlyNofalseFetch only captions (uses proxy)
--language or -lNoenLanguage code for captions (e.g., en, es, fr)
--output or -oNo-Save output to JSON file

Output Format

Returns JSON with both captions and metadata:

{
  "success": true,
  "video_id": "dQw4w9WgXcQ",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "metadata": {
    "title": "Video Title",
    "description": "Full video description...",
    "channel": "Channel Name",
    "channel_id": "UC...",
    "published_at": "2025-01-15T10:00:00Z",
    "duration": "10:30",
    "duration_seconds": 630,
    "view_count": 1000000,
    "thumbnail": "https://i.ytimg.com/vi/...",
    "links_in_description": [
      "https://example.com/link1",
      "https://example.com/link2"
    ]
  },
  "captions": {
    "text": "Full transcript text...",
    "language": "en",
    "is_generated": true,
    "word_count": 1500,
    "duration_seconds": 630
  }
}

How It Works

  1. Caption fetching: Uses youtube-transcript-api with residential proxy (to avoid IP blocks)
  2. Metadata fetching: Uses urllib with residential proxy (to bypass YouTube bot detection)
  3. Proxy credentials: Automatically loaded from the environment or a shell startup file (YOUTUBE_PROXY_URL, or legacy REDDIT_PROXY_URL)

Error Handling

ErrorCauseSolution
TranscriptsDisabledVideo has captions disabledTry another video
NoTranscriptFoundNo captions in requested languageTry --language with different code
VideoUnavailableVideo is private/deletedCheck video URL
ProxyErrorProxy connection failedCheck proxy credentials in your environment or shell startup file

Usage Examples

Get full video data:

python3 ./scripts/fetch_caption.py --url "https://www.youtube.com/watch?v=VIDEO_ID" -o output.json

Get captions in Spanish:

python3 ./scripts/fetch_caption.py --url "https://youtu.be/VIDEO_ID" --language es

Extract just the transcript text:

python3 ./scripts/fetch_caption.py --url "URL" --captions-only | jq -r '.captions.text'

Get metadata with links from description:

python3 ./scripts/fetch_caption.py --url "URL" --metadata-only | jq '.metadata.links_in_description'

Notes

  • Proxy is used for both caption AND metadata fetching to bypass YouTube bot detection
  • Supports auto-generated and manual captions
  • Falls back gracefully if captions are unavailable
  • Metadata includes links_in_description array extracted from the video description

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.