YouTube Content — Setup Guide¶
Source: nousresearch/hermes-agent (160 installs) Category: Media / Content Extraction Status: Native Hermes Agent skill (built-in)
Extract transcripts from any YouTube video and transform them into structured content: chapter breakdowns, summaries, X/Twitter threads, blog posts, and timestamped quotes. Essential for content repurposing, research synthesis, and competitive analysis.
Installation¶
This is a native Hermes Agent skill — it ships with Hermes and is available by default. If you need the standalone skills.sh version:
npx skills add nousresearch/hermes-agent --skill youtube-content
Dependency Setup¶
The transcript fetcher uses youtube-transcript-api. Install once:
uv pip install youtube-transcript-api
Prerequisites¶
| Requirement | Details |
|---|---|
| Hermes Agent | Any version (skill is built-in) |
| uv | Python package manager (bundled with Hermes) |
| youtube-transcript-api | Install via uv pip install youtube-transcript-api |
| Network access | Fetching transcripts requires outbound HTTPS to YouTube |
Key Capabilities¶
Core Features¶
| Capability | How to Trigger | Notes |
|---|---|---|
| Transcript extraction | Share any YouTube URL — full video ID, shorts, youtu.be, embeds, or live links | Returns JSON with metadata: title, channel, duration, language |
| Chapter breakdown | "Break this video into chapters" or "timestamped summary" | Auto-detects topic shifts, outputs HH:MM:SS — description format |
| Video summary | "Summarize this video" | 5-10 sentence overview (default output if no format specified) |
| X/Twitter thread | "Turn this into a thread" | Numbered posts, each ≤280 characters |
| Blog post | "Write a blog post from this video" | Full article with title, sections, key takeaways |
| Quote extraction | "Pull out the best quotes" | Notable quotes with timestamps |
| Multi-language | Specify --language tr,en for fallback chain |
Retries without --language if specified language unavailable |
CLI Command Reference¶
# JSON output with metadata
uv run python3 SKILL_DIR/scripts/fetch_transcript.py "https://youtube.com/watch?v=VIDEO_ID"
# Plain text for piping
uv run python3 SKILL_DIR/scripts/fetch_transcript.py "URL" --text-only
# Timestamped output
uv run python3 SKILL_DIR/scripts/fetch_transcript.py "URL" --timestamps
# Language fallback chain
uv run python3 SKILL_DIR/scripts/fetch_transcript.py "URL" --language tr,en
Processing Workflow¶
- Fetch: Run
fetch_transcript.pywith--text-only --timestampsviauv run python3 - Validate: Confirm non-empty output in expected language; retry without
--languageif empty - Chunk: Split >50K char transcripts into ~40K overlapping chunks, summarize each, then merge
- Transform: Convert to requested format (summary → chapters → thread → blog post → quotes)
- Verify: Re-read output for coherence, correct timestamps, and completeness
CorpusIQ Use Cases¶
| Use Case | How |
|---|---|
| Competitive video analysis | Extract transcripts from competitor product demos, founder interviews, and industry panels — feed into research pipeline |
| Content repurposing | Turn YouTube interviews/podcasts into blog posts for the CorpusIQ content engine, X threads for social, or email newsletter content |
| Creator partnership research | Analyze potential creator partners' content — extract key talking points, audience engagement patterns, and content quality before outreach |
| Market intelligence | Monitor AI agent ecosystem videos — product launches, framework comparisons, architecture discussions — extract insights for product roadmap |
| Lead qualification | When a prospect mentions a YouTube video, extract the transcript and find specific timestamps that match their pain points for personalized follow-up |
Troubleshooting¶
| Issue | Fix |
|---|---|
| "Transcript disabled" | Video owner disabled subtitles. Verify on the YouTube page directly — if no CC button, no transcript exists |
| "Private/unavailable video" | Ask the user to verify the URL. Private, unlisted-without-link, or region-blocked videos return errors |
| Wrong language returned | Retry without --language flag to get any available transcript, then note the actual language to the user |
| Dependency missing | Run uv pip install youtube-transcript-api and retry |
| Empty transcript | Retry without --language to get any available transcript. If still empty, the video likely has transcripts disabled entirely |
| Large video times out | The script handles standard videos. For 3+ hour videos, the transcript may be large — the chunking workflow handles this automatically |
Verification¶
# Verify skill is available
hermes skills list | grep youtube-content
# Quick functional test
uv run python3 ~/.hermes/skills/media/youtube-content/scripts/fetch_transcript.py "dQw4w9WgXcQ" --text-only | head -5
← Skills Catalog | Media Skills → Powered by CorpusIQ