mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-28 06:51:16 +08:00
For 14 of 74 compressed skills, the original description contained trigger keywords, technique counts, attribution, or use-case phrases not covered by the existing body content. Prepends a 'When to use' / 'What's inside' block near the top so the agent still has the full context when the skill is loaded. Skills salvaged: - codex, ascii-video, creative-ideation, excalidraw, manim-video, p5js - gif-search, heartmula, youtube-content - lm-evaluation-harness, obliteratus, vllm, axolotl - powerpoint Remaining 60 skills were verified to already cover the dropped content in their existing body sections (When to Use, overview, intro prose) or had short descriptions fully captured by the new compressed form.
73 lines
3.1 KiB
Markdown
73 lines
3.1 KiB
Markdown
---
|
|
name: youtube-content
|
|
description: "YouTube transcripts to summaries, threads, blogs."
|
|
---
|
|
|
|
# YouTube Content Tool
|
|
|
|
## When to use
|
|
|
|
Use when the user shares a YouTube URL or video link, asks to summarize a video, requests a transcript, or wants to extract and reformat content from any YouTube video. Transforms transcripts into structured content (chapters, summaries, threads, blog posts).
|
|
|
|
Extract transcripts from YouTube videos and convert them into useful formats.
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
pip install youtube-transcript-api
|
|
```
|
|
|
|
## Helper Script
|
|
|
|
`SKILL_DIR` is the directory containing this SKILL.md file. The script accepts any standard YouTube URL format, short links (youtu.be), shorts, embeds, live links, or a raw 11-character video ID.
|
|
|
|
```bash
|
|
# JSON output with metadata
|
|
python3 SKILL_DIR/scripts/fetch_transcript.py "https://youtube.com/watch?v=VIDEO_ID"
|
|
|
|
# Plain text (good for piping into further processing)
|
|
python3 SKILL_DIR/scripts/fetch_transcript.py "URL" --text-only
|
|
|
|
# With timestamps
|
|
python3 SKILL_DIR/scripts/fetch_transcript.py "URL" --timestamps
|
|
|
|
# Specific language with fallback chain
|
|
python3 SKILL_DIR/scripts/fetch_transcript.py "URL" --language tr,en
|
|
```
|
|
|
|
## Output Formats
|
|
|
|
After fetching the transcript, format it based on what the user asks for:
|
|
|
|
- **Chapters**: Group by topic shifts, output timestamped chapter list
|
|
- **Summary**: Concise 5-10 sentence overview of the entire video
|
|
- **Chapter summaries**: Chapters with a short paragraph summary for each
|
|
- **Thread**: Twitter/X thread format — numbered posts, each under 280 chars
|
|
- **Blog post**: Full article with title, sections, and key takeaways
|
|
- **Quotes**: Notable quotes with timestamps
|
|
|
|
### Example — Chapters Output
|
|
|
|
```
|
|
00:00 Introduction — host opens with the problem statement
|
|
03:45 Background — prior work and why existing solutions fall short
|
|
12:20 Core method — walkthrough of the proposed approach
|
|
24:10 Results — benchmark comparisons and key takeaways
|
|
31:55 Q&A — audience questions on scalability and next steps
|
|
```
|
|
|
|
## Workflow
|
|
|
|
1. **Fetch** the transcript using the helper script with `--text-only --timestamps`.
|
|
2. **Validate**: confirm the output is non-empty and in the expected language. If empty, retry without `--language` to get any available transcript. If still empty, tell the user the video likely has transcripts disabled.
|
|
3. **Chunk if needed**: if the transcript exceeds ~50K characters, split into overlapping chunks (~40K with 2K overlap) and summarize each chunk before merging.
|
|
4. **Transform** into the requested output format. If the user did not specify a format, default to a summary.
|
|
5. **Verify**: re-read the transformed output to check for coherence, correct timestamps, and completeness before presenting.
|
|
|
|
## Error Handling
|
|
|
|
- **Transcript disabled**: tell the user; suggest they check if subtitles are available on the video page.
|
|
- **Private/unavailable video**: relay the error and ask the user to verify the URL.
|
|
- **No matching language**: retry without `--language` to fetch any available transcript, then note the actual language to the user.
|
|
- **Dependency missing**: run `pip install youtube-transcript-api` and retry.
|