/youtube
Extract transcripts from YouTube videos via the YouTube caption system
$ npx -y skills add axoviq-ai/synthadoc --skill youtube --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/youtube
Context preview
The summary Claude sees to decide when to auto-load this skill.
Extract transcripts from YouTube videos via the YouTube caption system
SKILL.md
youtube.SKILL.mdname: youtube
version: "1.0"
description: Extract transcripts from YouTube videos via the YouTube caption system
entry:
script: scripts/main.py
class: YoutubeSkill
triggers:
extensions:
- "https://www.youtube.com/"
- "https://youtu.be/"
- "https://www.youtubekids.com/"
intents: []
requires:
- youtube-transcript-api
author: axoviq.com
license: AGPL-3.0-or-laterYouTube 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
pip install youtube-transcript-api
Standalone usage
**Transcript only** (no LLM required):
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()`):
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:
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`:
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:
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.
Read more
name: youtube
version: "1.0"
description: Extract transcripts from YouTube videos via the YouTube caption system
entry:
script: scripts/main.py
class: YoutubeSkill
triggers:
extensions:
- "https://www.youtube.com/"
- "https://youtu.be/"
- "https://www.youtubekids.com/"
intents: []
requires:
- youtube-transcript-api
author: axoviq.com
license: AGPL-3.0-or-laterYouTube 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
pip install youtube-transcript-api
Standalone usage
**Transcript only** (no LLM required):
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()`):
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:
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`:
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:
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.
Document version: v1.4.2 Engineered for solo users and enterprises alike, providing a domain-specific knowledge base that scales seamlessly while maintaining accuracy through autonomous self-optimization.

