$npx -y skills add AlekseiUL/sprut-agent-kit --skill tubescribeYouTube video summarizer with speaker detection, formatted documents, and audio output.
| 1 | metadata: |
| 2 | { |
| 3 | "claudeclaw": |
| 4 | { |
| 5 | "emoji": "🎬", |
| 6 | "requires": { "bins": ["summarize"] } |
| 7 | } |
| 8 | } |
| 9 | --- |
| 10 | |
| 11 | # TubeScribe 🎬 |
| 12 | |
| 13 | **Turn any YouTube video into a polished document + audio summary.** |
| 14 | |
| 15 | Drop a YouTube link → get a beautiful transcript with speaker labels, key quotes, timestamps that link back to the video, and an audio summary you can listen to on the go. |
| 16 | |
| 17 | ### 💸 Free & No Paid APIs |
| 18 | |
| 19 | - **No subscriptions or API keys** — works out of the box |
| 20 | - **Local processing** — transcription, speaker detection, and TTS run on your machine |
| 21 | - **Network access** — fetching from YouTube (captions, metadata, comments) requires internet |
| 22 | - **No data uploaded** — nothing is sent to external services; all processing stays on your machine |
| 23 | - **Safe sub-agent** — spawned sub-agent has strict instructions: no software installation, no network calls beyond YouTube |
| 24 | |
| 25 | ### ✨ Features |
| 26 | |
| 27 | - **📄 Transcript with summary and key quotes** — Export as DOCX, HTML, or Markdown |
| 28 | - **🎯 Smart Speaker Detection** — Automatically identifies participants |
| 29 | - **🔊 Audio Summaries** — Listen to key points (MP3/WAV) |
| 30 | - **📝 Clickable Timestamps** — Every quote links directly to that moment in the video |
| 31 | - **💬 YouTube Comments** — Viewer sentiment analysis and best comments |
| 32 | - **📋 Queue Support** — Send multiple links, they get processed in order |
| 33 | - **🚀 Non-Blocking Workflow** — Conversation continues while video processes in background |
| 34 | |
| 35 | ### 🎬 Works With Any Video |
| 36 | |
| 37 | - Interviews & podcasts (multi-speaker detection) |
| 38 | - Lectures & tutorials (single speaker) |
| 39 | - Music videos (lyrics extraction) |
| 40 | - News & documentaries |
| 41 | - Any YouTube content with captions |
| 42 | |
| 43 | ## Quick Start |
| 44 | |
| 45 | When user sends a YouTube URL: |
| 46 | 1. Spawn sub-agent with the full pipeline task **immediately** |
| 47 | 2. Reply: "🎬 TubeScribe is processing — I'll let you know when it's ready!" |
| 48 | 3. Continue conversation (don't wait!) |
| 49 | 4. Sub-agent notification will announce completion with title and details |
| 50 | |
| 51 | **DO NOT BLOCK** — spawn and move on instantly. |
| 52 | |
| 53 | ## First-Time Setup |
| 54 | |
| 55 | Run setup to check dependencies and configure defaults: |
| 56 | |
| 57 | ```bash |
| 58 | python skills/tubescribe/scripts/setup.py |
| 59 | ``` |
| 60 | |
| 61 | This checks: `summarize` CLI, `pandoc`, `ffmpeg`, `Kokoro TTS` |
| 62 | |
| 63 | ## Full Workflow (Single Sub-Agent) |
| 64 | |
| 65 | Spawn ONE sub-agent that does the entire pipeline: |
| 66 | |
| 67 | ```python |
| 68 | sessions_spawn( |
| 69 | task=f""" |
| 70 | ## TubeScribe: Process {youtube_url} |
| 71 | |
| 72 | ⚠️ CRITICAL: Do NOT install any software. |
| 73 | No pip, brew, curl, venv, or binary downloads. |
| 74 | If a tool is missing, STOP and report what's needed. |
| 75 | |
| 76 | Run the COMPLETE pipeline — do not stop until all steps are done. |
| 77 | |
| 78 | ### Step 1: Extract |
| 79 | ```bash |
| 80 | python3 skills/tubescribe/scripts/tubescribe.py "{youtube_url}" |
| 81 | ``` |
| 82 | Note the **Source** and **Output** paths printed by the script. Use those exact paths in subsequent steps. |
| 83 | |
| 84 | ### Step 2: Read source JSON |
| 85 | Read the Source path from Step 1 output and note: |
| 86 | - metadata.title (for filename) |
| 87 | - metadata.video_id |
| 88 | - metadata.channel, upload_date, duration_string |
| 89 | |
| 90 | ### Step 3: Create formatted markdown |
| 91 | Write to the Output path from Step 1: |
| 92 | |
| 93 | 1. `# **<title>**` |
| 94 | --- |
| 95 | 2. Video info block — Channel, Date, Duration, URL (clickable). Empty line between each field. |
| 96 | --- |
| 97 | 3. `## **Participants**` — table with bold headers: |
| 98 | ``` |
| 99 | | **Name** | **Role** | **Description** | |
| 100 | |----------|----------|-----------------| |
| 101 | ``` |
| 102 | --- |
| 103 | 4. `## **Summary**` — 3-5 paragraphs of prose |
| 104 | --- |
| 105 | 5. `## **Key Quotes**` — 5 best with clickable YouTube timestamps. Format each as: |
| 106 | ``` |
| 107 | "Quote text here." - [12:34](https://www.youtube.com/watch?v=ID&t=754s) |
| 108 | |
| 109 | "Another quote." - [25:10](https://www.youtube.com/watch?v=ID&t=1510s) |
| 110 | ``` |
| 111 | Use regular dash `-`, NOT em dash `—`. Do NOT use blockquotes `>`. Plain paragraphs only. |
| 112 | --- |
| 113 | 6. `## **Viewer Sentiment**` (if comments exist) |
| 114 | --- |
| 115 | 7. `## **Best Comments**` (if comments exist) — Top 5, NO lines between them: |
| 116 | ``` |
| 117 | Comment text here. |
| 118 | |
| 119 | *- ▲ 123 @AuthorName* |
| 120 | |
| 121 | Next comment text here. |
| 122 | |
| 123 | *- ▲ 45 @AnotherAuthor* |
| 124 | ``` |
| 125 | Attribution line: dash + italic. Just blank line between comments, NO `---` separators. |
| 126 | |
| 127 | --- |
| 128 | 8. `## **Full Transcript**` — merge segments, speaker labels, clickable timestamps |
| 129 | |
| 130 | ### Step 4: Create DOCX |
| 131 | Clean the title for filename (remove special chars), then: |
| 132 | ```bash |
| 133 | pandoc <output_path> -o ~/Documents/TubeScribe/<safe_title>.docx |
| 134 | ``` |
| 135 | |
| 136 | ### Step 5: Generate audio |
| 137 | Write the summary text to a temp file, then use TubeScribe's built-in audio generation: |
| 138 | ```bash |
| 139 | # Write summary to temp file (use python3 to write, avoids shell escaping issues) |
| 140 | python3 -c " |
| 141 | text = '''YOUR SUMMARY TEXT HERE''' |
| 142 | with open('<temp_dir>/tubescribe_<video_id>_summary.txt', 'w') as f: |
| 143 | f.write(text) |
| 144 | " |
| 145 | |
| 146 | # Generate audio (auto-detects engine, voice, format from config) |
| 147 | python3 skills/tubescribe/scripts/t |