---
name: YouTube
slug: youtube
category: Automation
description: "YouTube extracts captions from YouTube video URLs without an API key or audio download. Use it to ingest a video's transcript, and optionally generate a structured summary with an LLM."
github: "https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/youtube"
language: Python
stars: 1012
forks: 122
install: "npx degit https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/youtube ~/.claude/skills/youtube"
installs_to: ~/.claude/skills/youtube
source_path: synthadoc/skills/youtube/SKILL.md
collection_size: 10
category_size: 1523
collection_url: "https://dirskills.com/collections/axoviq-ai/synthadoc"
added: 2026-08-21T05:14:33.228Z
last_synced: 2026-08-21T05:14:33.228Z
canonical_url: "https://dirskills.com/skills/youtube"
---

# YouTube

YouTube extracts captions from YouTube video URLs without an API key or audio download. Use it to ingest a video's transcript, and optionally generate a structured summary with an LLM.

**Install:**

```bash
npx degit https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/youtube ~/.claude/skills/youtube
```

## README

# YouTube Skill

Extracts the transcript (captions) from a YouTube video using the YouTube
caption system — no API key or audio download required. Optionally uses a
vision-capable LLM to produce a structured summary (Overview, Topics,
Key takeaways) before the raw transcript.

## Setup

```bash
pip install youtube-transcript-api
```

## Standalone usage

**Transcript only** (no LLM required):

```python
import asyncio
from synthadoc.skills.youtube.scripts.main import YoutubeSkill

skill = YoutubeSkill()          # no provider — returns raw timestamped transcript

async def main():
    result = await skill.extract("https://www.youtube.com/watch?v=dQw4w9WgXcQ")
    print(result.text)          # "[0:00] text [0:04] text ..."
    print(result.metadata)      # {"video_id": "...", "title": "...", "url": "..."}

asyncio.run(main())
```

**With LLM summarization** (pass any provider that implements `complete()`):

```python
skill = YoutubeSkill(provider=my_provider)
result = await skill.extract(url)
# result.text contains:
#   ## Executive Summary
#   <Overview / Topics / Key takeaways>
#
#   ## Transcript
#   [0:00] ...
```

The provider must implement:
```python
async def complete(messages, system=None, temperature=0.0, max_tokens=4096)
    -> object with .text (str), .input_tokens (int), .output_tokens (int)
```

`Message` (used to build the `messages` list) is importable from
`synthadoc.skills.base`:
```python
from synthadoc.skills.base import Message
```

## When this skill is used

- Source starts with `https://www.youtube.com/`, `https://youtu.be/`, or
  `https://www.youtubekids.com/`

To search YouTube by topic instead of ingesting a specific URL, use the web
search skill — it filters Tavily results to YouTube domains automatically:

```bash
synthadoc ingest "youtube Moore's Law"
synthadoc ingest "youtube kids: Sesame Street"
synthadoc ingest "search for youtube: history of computing"
```

## Limitations

- Only works for videos that have captions (auto-generated or manually added).
  If no captions are available the source is skipped with a warning.
- Private or deleted videos are skipped gracefully.
