youtube

Extract transcripts from YouTube videos via the YouTube caption system

SKILL.md

GitHub

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

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.