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
bashpip install youtube-transcript-api
Standalone usage
Transcript only (no LLM required):
pythonimport 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()):
pythonskill = 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:
pythonasync 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:
pythonfrom synthadoc.skills.base import Message
When this skill is used
- Source starts with
https://www.youtube.com/,https://youtu.be/, orhttps://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:
bashsynthadoc 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.

