---
name: axoviq-ai/youtube
source: https://app.decimal.ai/s/axoviq-ai-youtube@1/SKILL.md
source_sha256: 5201751b0cb1
---

# 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.