{"slug":"youtube","title":"youtube","summary":"Extract transcripts from YouTube videos via the YouTube caption system","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T17:51:04.631098Z","repo":{"url":"https://github.com/axoviq-ai/synthadoc","stars":1410,"forks":136,"license":"AGPL-3.0","updatedAt":"2026-09-26T14:38:45Z"},"bodyHtml":"<hr>\n<p>name: youtube\nversion: \"1.0\"\ndescription: Extract transcripts from YouTube videos via the YouTube caption system\nentry:\nscript: scripts/main.py\nclass: YoutubeSkill\ntriggers:\nextensions:\n- \"https://www.youtube.com/\"\n- \"https://youtu.be/\"\n- \"https://www.youtubekids.com/\"\nintents: []\nrequires:</p>\n<ul>\n<li>youtube-transcript-api\nauthor: axoviq.com\nlicense: AGPL-3.0-or-later</li>\n</ul>\n<hr>\n<h1>YouTube Skill</h1>\n<p>Extracts the transcript (captions) from a YouTube video using the YouTube\ncaption system — no API key or audio download required. Optionally uses a\nvision-capable LLM to produce a structured summary (Overview, Topics,\nKey takeaways) before the raw transcript.</p>\n<h2>Setup</h2>\n<pre><code>pip install youtube-transcript-api\n</code></pre>\n<h2>Standalone usage</h2>\n<p><strong>Transcript only</strong> (no LLM required):</p>\n<pre><code>import asyncio\nfrom synthadoc.skills.youtube.scripts.main import YoutubeSkill\n\nskill = YoutubeSkill()          # no provider — returns raw timestamped transcript\n\nasync def main():\n    result = await skill.extract(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\")\n    print(result.text)          # \"[0:00] text [0:04] text ...\"\n    print(result.metadata)      # {\"video_id\": \"...\", \"title\": \"...\", \"url\": \"...\"}\n\nasyncio.run(main())\n</code></pre>\n<p><strong>With LLM summarization</strong> (pass any provider that implements <code>complete()</code>):</p>\n<pre><code>skill = YoutubeSkill(provider=my_provider)\nresult = await skill.extract(url)\n# result.text contains:\n#   ## Executive Summary\n#   &lt;Overview / Topics / Key takeaways&gt;\n#\n#   ## Transcript\n#   [0:00] ...\n</code></pre>\n<p>The provider must implement:</p>\n<pre><code>async def complete(messages, system=None, temperature=0.0, max_tokens=4096)\n    -&gt; object with .text (str), .input_tokens (int), .output_tokens (int)\n</code></pre>\n<p><code>Message</code> (used to build the <code>messages</code> list) is importable from\n<code>synthadoc.skills.base</code>:</p>\n<pre><code>from synthadoc.skills.base import Message\n</code></pre>\n<h2>When this skill is used</h2>\n<ul>\n<li>Source starts with <code>https://www.youtube.com/</code>, <code>https://youtu.be/</code>, or\n<code>https://www.youtubekids.com/</code></li>\n</ul>\n<p>To search YouTube by topic instead of ingesting a specific URL, use the web\nsearch skill — it filters Tavily results to YouTube domains automatically:</p>\n<pre><code>synthadoc ingest \"youtube Moore's Law\"\nsynthadoc ingest \"youtube kids: Sesame Street\"\nsynthadoc ingest \"search for youtube: history of computing\"\n</code></pre>\n<h2>Limitations</h2>\n<ul>\n<li>Only works for videos that have captions (auto-generated or manually added).\nIf no captions are available the source is skipped with a warning.</li>\n<li>Private or deleted videos are skipped gracefully.</li>\n</ul>\n","files":[{"path":"requirements.txt","sizeBytes":104,"isText":true},{"path":"scripts/__init__.py","sizeBytes":0,"isText":true},{"path":"scripts/main.py","sizeBytes":6512,"isText":true},{"path":"SKILL.md","sizeBytes":2539,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-08-24T17:51:22.846288Z","sha256":"14B02EE88BE3DB843E8DF7C06E431768AEF50D0DE3954CBE40B4C799EBB8E780","sizeBytes":4186},"review":null,"source":{"repositoryUrl":"https://github.com/axoviq-ai/synthadoc","path":"synthadoc/skills/youtube","license":"AGPL-3.0","commit":"e1e48aa3a487db79907011c2bc76ea5a8bf47bcf","subtreeSha":"FFE4C1614631301D94483A4F07EBC4FC3B9583D2F8A8072486582824114599F1","lastSyncedAt":"2026-09-27T20:57:04.527866Z"},"reviewedAt":"2026-08-24T17:51:48.909385Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/youtube"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install axoviq-ai-synthadoc@llmmart"},{"target":"git","command":"git clone https://github.com/axoviq-ai/synthadoc.git"}]}