{"id":"bf3208b8-3d0b-4695-a5b5-adebd3cc82f0","shortId":"gFR45V","kind":"skill","title":"tubescribe","tagline":"YouTube video summarizer with speaker detection, formatted documents, and audio output.","description":"metadata:\n  {\n    \"claudeclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\": { \"bins\": [\"summarize\"] }\n      }\n  }\n---\n\n# TubeScribe 🎬\n\n**Turn any YouTube video into a polished document + audio summary.**\n\nDrop 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.\n\n### 💸 Free & No Paid APIs\n\n- **No subscriptions or API keys** — works out of the box\n- **Local processing** — transcription, speaker detection, and TTS run on your machine\n- **Network access** — fetching from YouTube (captions, metadata, comments) requires internet\n- **No data uploaded** — nothing is sent to external services; all processing stays on your machine\n- **Safe sub-agent** — spawned sub-agent has strict instructions: no software installation, no network calls beyond YouTube\n\n### ✨ Features\n\n- **📄 Transcript with summary and key quotes** — Export as DOCX, HTML, or Markdown\n- **🎯 Smart Speaker Detection** — Automatically identifies participants\n- **🔊 Audio Summaries** — Listen to key points (MP3/WAV)\n- **📝 Clickable Timestamps** — Every quote links directly to that moment in the video\n- **💬 YouTube Comments** — Viewer sentiment analysis and best comments\n- **📋 Queue Support** — Send multiple links, they get processed in order\n- **🚀 Non-Blocking Workflow** — Conversation continues while video processes in background\n\n### 🎬 Works With Any Video\n\n- Interviews & podcasts (multi-speaker detection)\n- Lectures & tutorials (single speaker)\n- Music videos (lyrics extraction)\n- News & documentaries\n- Any YouTube content with captions\n\n## Quick Start\n\nWhen user sends a YouTube URL:\n1. Spawn sub-agent with the full pipeline task **immediately**\n2. Reply: \"🎬 TubeScribe is processing — I'll let you know when it's ready!\"\n3. Continue conversation (don't wait!)\n4. Sub-agent notification will announce completion with title and details\n\n**DO NOT BLOCK** — spawn and move on instantly.\n\n## First-Time Setup\n\nRun setup to check dependencies and configure defaults:\n\n```bash\npython skills/tubescribe/scripts/setup.py\n```\n\nThis checks: `summarize` CLI, `pandoc`, `ffmpeg`, `Kokoro TTS`\n\n## Full Workflow (Single Sub-Agent)\n\nSpawn ONE sub-agent that does the entire pipeline:\n\n```python\nsessions_spawn(\n    task=f\"\"\"\n## TubeScribe: Process {youtube_url}\n\n⚠️ CRITICAL: Do NOT install any software.\nNo pip, brew, curl, venv, or binary downloads.\nIf a tool is missing, STOP and report what's needed.\n\nRun the COMPLETE pipeline — do not stop until all steps are done.\n\n### Step 1: Extract\n```bash\npython3 skills/tubescribe/scripts/tubescribe.py \"{youtube_url}\"\n```\nNote the **Source** and **Output** paths printed by the script. Use those exact paths in subsequent steps.\n\n### Step 2: Read source JSON\nRead the Source path from Step 1 output and note:\n- metadata.title (for filename)\n- metadata.video_id\n- metadata.channel, upload_date, duration_string\n\n### Step 3: Create formatted markdown\nWrite to the Output path from Step 1:\n\n1. `# **<title>**`\n---\n2. Video info block — Channel, Date, Duration, URL (clickable). Empty line between each field.\n---\n3. `## **Participants**` — table with bold headers:\n   ```\n   | **Name** | **Role** | **Description** |\n   |----------|----------|-----------------|\n   ```\n---\n4. `## **Summary**` — 3-5 paragraphs of prose\n---\n5. `## **Key Quotes**` — 5 best with clickable YouTube timestamps. Format each as:\n   ```\n   \"Quote text here.\" - [12:34](https://www.youtube.com/watch?v=ID&t=754s)\n\n   \"Another quote.\" - [25:10](https://www.youtube.com/watch?v=ID&t=1510s)\n   ```\n   Use regular dash `-`, NOT em dash `—`. Do NOT use blockquotes `>`. Plain paragraphs only.\n---\n6. `## **Viewer Sentiment**` (if comments exist)\n---\n7. `## **Best Comments**` (if comments exist) — Top 5, NO lines between them:\n   ```\n   Comment text here.\n\n   *- ▲ 123 @AuthorName*\n\n   Next comment text here.\n\n   *- ▲ 45 @AnotherAuthor*\n   ```\n   Attribution line: dash + italic. Just blank line between comments, NO `---` separators.\n\n---\n8. `## **Full Transcript**` — merge segments, speaker labels, clickable timestamps\n\n### Step 4: Create DOCX\nClean the title for filename (remove special chars), then:\n```bash\npandoc <output_path> -o ~/Documents/TubeScribe/<safe_title>.docx\n```\n\n### Step 5: Generate audio\nWrite the summary text to a temp file, then use TubeScribe's built-in audio generation:\n```bash\n# Write summary to temp file (use python3 to write, avoids shell escaping issues)\npython3 -c \"\ntext = '''YOUR SUMMARY TEXT HERE'''\nwith open('<temp_dir>/tubescribe_<video_id>_summary.txt', 'w') as f:\n    f.write(text)\n\"\n\n# Generate audio (auto-detects engine, voice, format from config)\npython3 skills/tubescribe/scripts/tubescribe.py \\\n  --generate-audio <temp_dir>/tubescribe_<video_id>_summary.txt \\\n  --audio-output ~/Documents/TubeScribe/<safe_title>_summary\n```\nThis reads `~/.tubescribe/config.json` and uses the configured TTS engine (mlx/kokoro/builtin), voice blend, and speed automatically. Output format (mp3/wav) comes from config.\n\n### Step 6: Cleanup\n```bash\npython3 skills/tubescribe/scripts/tubescribe.py --cleanup <video_id>\n```\n\n### Step 7: Open folder\n```bash\nopen ~/Documents/TubeScribe/\n```\n\n### Report\nTell what was created: DOCX name, MP3 name + duration, video stats.\n\"\"\",\n    label=\"tubescribe\",\n    runTimeoutSeconds=900,\n    cleanup=\"delete\"\n)\n```\n\n**After spawning, reply immediately:**\n> 🎬 TubeScribe is processing - I'll let you know when it's ready!\nThen continue the conversation. The sub-agent notification announces completion.\n\n## Configuration\n\nConfig file: `~/.tubescribe/config.json`\n\n```json\n{\n  \"output\": {\n    \"folder\": \"~/Documents/TubeScribe\",\n    \"open_folder_after\": true,\n    \"open_document_after\": false,\n    \"open_audio_after\": false\n  },\n  \"document\": {\n    \"format\": \"docx\",\n    \"engine\": \"pandoc\"\n  },\n  \"audio\": {\n    \"enabled\": true,\n    \"format\": \"mp3\",\n    \"tts_engine\": \"mlx\"\n  },\n  \"mlx_audio\": {\n    \"path\": \"~/.claudeclaw/tools/mlx-audio\",\n    \"model\": \"mlx-community/Kokoro-82M-bf16\",\n    \"voice\": \"af_heart\",\n    \"lang_code\": \"a\",\n    \"speed\": 1.05\n  },\n  \"kokoro\": {\n    \"path\": \"~/.claudeclaw/tools/kokoro\",\n    \"voice_blend\": { \"af_heart\": 0.6, \"af_sky\": 0.4 },\n    \"speed\": 1.05\n  },\n  \"processing\": {\n    \"subagent_timeout\": 600,\n    \"cleanup_temp_files\": true\n  }\n}\n```\n\n### Output Options\n| Option | Default | Description |\n|--------|---------|-------------|\n| `output.folder` | `~/Documents/TubeScribe` | Where to save files |\n| `output.open_folder_after` | `true` | Open output folder when done |\n| `output.open_document_after` | `false` | Auto-open generated document |\n| `output.open_audio_after` | `false` | Auto-open generated audio summary |\n\n### Document Options\n| Option | Default | Values | Description |\n|--------|---------|--------|-------------|\n| `document.format` | `docx` | `docx`, `html`, `md` | Output format |\n| `document.engine` | `pandoc` | `pandoc` | Converter for DOCX (falls back to HTML) |\n\n### Audio Options\n| Option | Default | Values | Description |\n|--------|---------|--------|-------------|\n| `audio.enabled` | `true` | `true`, `false` | Generate audio summary |\n| `audio.format` | `mp3` | `mp3`, `wav` | Audio format (mp3 needs ffmpeg) |\n| `audio.tts_engine` | `mlx` | `mlx`, `kokoro`, `builtin` | TTS engine (mlx = fastest on Apple Silicon) |\n\n### MLX-Audio Options (preferred on Apple Silicon)\n| Option | Default | Description |\n|--------|---------|-------------|\n| `mlx_audio.path` | `~/.claudeclaw/tools/mlx-audio` | mlx-audio venv location |\n| `mlx_audio.model` | `mlx-community/Kokoro-82M-bf16` | MLX model to use |\n| `mlx_audio.voice` | `af_heart` | Voice preset (used if no voice_blend) |\n| `mlx_audio.voice_blend` | `{af_heart: 0.6, af_sky: 0.4}` | Custom voice mix (weighted blend) |\n| `mlx_audio.lang_code` | `a` | Language code (a=US English) |\n| `mlx_audio.speed` | `1.05` | Playback speed (1.0 = normal, 1.05 = 5% faster) |\n\n### Kokoro PyTorch Options (fallback)\n| Option | Default | Description |\n|--------|---------|-------------|\n| `kokoro.path` | `~/.claudeclaw/tools/kokoro` | Kokoro repo location |\n| `kokoro.voice_blend` | `{af_heart: 0.6, af_sky: 0.4}` | Custom voice mix |\n| `kokoro.speed` | `1.05` | Playback speed (1.0 = normal, 1.05 = 5% faster) |\n\n### Processing Options\n| Option | Default | Description |\n|--------|---------|-------------|\n| `processing.subagent_timeout` | `600` | Seconds for sub-agent (increase for long videos) |\n| `processing.cleanup_temp_files` | `true` | Remove /tmp files after completion |\n\n### Comment Options\n| Option | Default | Description |\n|--------|---------|-------------|\n| `comments.max_count` | `50` | Number of comments to fetch |\n| `comments.timeout` | `90` | Timeout for comment fetching (seconds) |\n\n### Queue Options\n| Option | Default | Description |\n|--------|---------|-------------|\n| `queue.stale_minutes` | `30` | Consider a processing job stale after this many minutes |\n\n## Output Structure\n\n```\n~/Documents/TubeScribe/\n├── {Video Title}.html         # Formatted document (or .docx / .md)\n└── {Video Title}_summary.mp3  # Audio summary (or .wav)\n```\n\nAfter generation, opens the folder (not individual files) so you can access everything.\n\n## Dependencies\n\n**Required:**\n- `summarize` CLI — `brew install steipete/tap/summarize`\n- Python 3.8+\n\n**Optional (better quality):**\n- `pandoc` — DOCX output: `brew install pandoc`\n- `ffmpeg` — MP3 audio: `brew install ffmpeg`\n- `yt-dlp` — YouTube comments: `brew install yt-dlp`\n- mlx-audio — Fastest TTS on Apple Silicon: `pip install mlx-audio` (uses MLX backend for Kokoro)\n- Kokoro TTS — PyTorch fallback: see https://github.com/hexgrad/kokoro\n\n### yt-dlp Search Paths\n\nTubeScribe checks these locations (in order):\n\n| Priority | Path | Source |\n|----------|------|--------|\n| 1 | `which yt-dlp` | System PATH |\n| 2 | `/opt/homebrew/bin/yt-dlp` | Homebrew (Apple Silicon) |\n| 3 | `/usr/local/bin/yt-dlp` | Homebrew (Intel) / Linux |\n| 4 | `~/.local/bin/yt-dlp` | pip install --user |\n| 5 | `~/.local/pipx/venvs/yt-dlp/bin/yt-dlp` | pipx |\n| 6 | `~/.claudeclaw/tools/yt-dlp/yt-dlp` | TubeScribe auto-install |\n\nIf not found, setup downloads a standalone binary to the tools directory.\nThe tools directory version doesn't conflict with system installations.\n\n## Queue Handling\n\nWhen user sends multiple YouTube URLs while one is processing:\n\n### Check Before Starting\n```bash\npython skills/tubescribe/scripts/tubescribe.py --queue-status\n```\n\n### If Already Processing\n```bash\n# Add to queue instead of starting parallel processing\npython skills/tubescribe/scripts/tubescribe.py --queue-add \"NEW_URL\"\n# → Replies: \"📋 Added to queue (position 2)\"\n```\n\n### After Completion\n```bash\n# Check if more in queue\npython skills/tubescribe/scripts/tubescribe.py --queue-next\n# → Automatically pops and processes next URL\n```\n\n### Queue Commands\n| Command | Description |\n|---------|-------------|\n| `--queue-status` | Show what's processing + queued items |\n| `--queue-add URL` | Add URL to queue |\n| `--queue-next` | Process next item from queue |\n| `--queue-clear` | Clear entire queue |\n\n### Batch Processing (multiple URLs at once)\n```bash\npython skills/tubescribe/scripts/tubescribe.py url1 url2 url3\n```\nProcesses all URLs sequentially with a summary at the end.\n\n## Error Handling\n\nThe script detects and reports these errors with clear messages:\n\n| Error | Message |\n|-------|---------|\n| Invalid URL | ❌ Not a valid YouTube URL |\n| Private video | ❌ Video is private — can't access |\n| Video removed | ❌ Video not found or removed |\n| No captions | ❌ No captions available for this video |\n| Age-restricted | ❌ Age-restricted video — can't access without login |\n| Region-blocked | ❌ Video blocked in your region |\n| Live stream | ❌ Live streams not supported — wait until it ends |\n| Network error | ❌ Network error — check your connection |\n| Timeout | ❌ Request timed out — try again later |\n\nWhen an error occurs, report it to the user and don't proceed with that video.\n\n## Tips\n\n- For long videos (>30 min), increase sub-agent timeout to 900s\n- Speaker detection works best with clear interview/podcast formats\n- Single-speaker videos (tutorials, lectures) skip speaker labels automatically\n- Timestamps link directly to YouTube at that moment\n- Use batch mode for multiple videos: `tubescribe url1 url2 url3`","tags":["tubescribe","sprut","agent","kit","alekseiul","agent-skills","ai-agents","ai-assistant","automation","claude-code","claudeclaw","memory"],"capabilities":["skill","source-alekseiul","skill-tubescribe","topic-agent-skills","topic-ai-agents","topic-ai-assistant","topic-automation","topic-claude-code","topic-claudeclaw","topic-memory","topic-self-hosted","topic-starter-kit","topic-telegram-bot"],"categories":["sprut-agent-kit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AlekseiUL/sprut-agent-kit/tubescribe","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AlekseiUL/sprut-agent-kit","source_repo":"https://github.com/AlekseiUL/sprut-agent-kit","install_from":"skills.sh"}},"qualityScore":"0.481","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 63 github stars · SKILL.md body (12,363 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:57:12.791Z","embedding":null,"createdAt":"2026-05-13T12:58:22.482Z","updatedAt":"2026-05-18T18:57:12.791Z","lastSeenAt":"2026-05-18T18:57:12.791Z","tsv":"'-5':456 '/.claudeclaw/tools/kokoro':772,963 '/.claudeclaw/tools/mlx-audio':756,900 '/.claudeclaw/tools/yt-dlp/yt-dlp':1181 '/.local/bin/yt-dlp':1173 '/.local/pipx/venvs/yt-dlp/bin/yt-dlp':1178 '/.tubescribe/config.json':642,723 '/documents/tubescribe':565,638,674,727,797,1052 '/hexgrad/kokoro':1140 '/kokoro-82m-bf16':761,910 '/opt/homebrew/bin/yt-dlp':1163 '/tmp':1009 '/tubescribe_':611,633 '/usr/local/bin/yt-dlp':1168 '/watch?v=id&t=1510s)':486 '/watch?v=id&t=754s)':479 '0.4':780,932,974 '0.6':777,929,971 '1':230,367,402,428,429,1155 '1.0':950,982 '1.05':769,782,947,952,979,984 '10':483 '12':475 '123':521 '2':241,392,430,1162,1253 '25':482 '3':255,417,444,455,1167 '3.8':1089 '30':1040,1438 '34':476 '4':261,453,550,1172 '45':527 '5':460,463,513,568,953,985,1177 '50':1020 '6':500,662,1180 '600':786,994 '7':506,669 '8':540 '90':1027 '900':690 '900s':1446 'access':87,1079,1358,1383 'ad':1249 'add':1233,1245,1288,1290 'af':763,775,778,916,927,930,969,972 'age':1375,1378 'age-restrict':1374,1377 'agent':114,118,234,264,309,314,716,999,1443 'alreadi':1230 'analysi':172 'announc':267,718 'anoth':480 'anotherauthor':528 'api':64,68 'appl':886,894,1121,1165 'attribut':529 'audio':11,28,52,149,570,586,619,632,636,737,745,754,821,828,853,864,870,890,903,1064,1101,1117,1127 'audio-output':635 'audio.enabled':859 'audio.format':866 'audio.tts':875 'authornam':522 'auto':621,816,825,1184 'auto-detect':620 'auto-instal':1183 'auto-open':815,824 'automat':146,654,1267,1464 'avail':1370 'avoid':598 'back':46,850 'backend':1130 'background':196 'bash':293,369,562,588,664,672,1223,1232,1256,1314 'batch':1308,1474 'beauti':36 'best':174,464,507,1450 'better':1091 'beyond':128 'bin':17 'binari':341,1193 'blank':534 'blend':651,774,924,926,937,968 'block':188,275,433,1388,1390 'blockquot':496 'bold':448 'box':74 'brew':337,1085,1096,1102,1110 'built':584 'built-in':583 'builtin':880 'c':603 'call':127 'caption':91,221,1367,1369 'channel':434 'char':560 'check':288,297,1147,1220,1257,1408 'claudeclaw':14 'clean':553 'cleanup':663,667,691,787 'clear':1304,1305,1340,1452 'cli':299,1084 'clickabl':156,438,466,547 'code':766,939,942 'come':658 'command':1274,1275 'comment':93,169,175,504,508,510,518,524,537,1013,1023,1030,1109 'comments.max':1018 'comments.timeout':1026 'communiti':760,909 'complet':268,356,719,1012,1255 'config':627,660,721 'configur':291,646,720 'conflict':1204 'connect':1410 'consid':1041 'content':219 'continu':191,256,710 'convers':190,257,712 'convert':846 'count':1019 'creat':418,551,679 'critic':329 'curl':338 'custom':933,975 'dash':489,492,531 'data':97 'date':413,435 'default':292,794,833,856,897,960,990,1016,1036 'delet':692 'depend':289,1081 'descript':452,795,835,858,898,961,991,1017,1037,1276 'detail':272 'detect':7,79,145,206,622,1334,1448 'direct':161,1467 'directori':1197,1200 'dlp':1107,1114,1143,1159 'document':9,27,733,740,812,819,830,1057 'document.engine':843 'document.format':836 'documentari':216 'docx':139,552,566,680,742,837,838,848,1059,1094 'doesn':1202 'done':365,810 'download':342,1190 'drop':30 'durat':414,436,684 'em':491 'emoji':15 'empti':439 'enabl':746 'end':1329,1403 'engin':623,648,743,751,876,882 'english':945 'entir':318,1306 'error':1330,1338,1342,1405,1407,1420 'escap':600 'everi':158 'everyth':1080 'exact':386 'exist':505,511 'export':137 'extern':103 'extract':214,368 'f':324,615 'f.write':616 'fall':849 'fallback':958,1136 'fals':735,739,814,823,862 'faster':954,986 'fastest':884,1118 'featur':130 'fetch':88,1025,1031 'ffmpeg':301,874,1099,1104 'field':443 'file':578,593,722,789,801,1006,1010,1075 'filenam':408,557 'first':282 'first-tim':281 'folder':671,726,729,803,808,1072 'format':8,419,469,625,656,741,748,842,871,1056,1454 'found':1188,1363 'free':61 'full':237,304,541 'generat':569,587,618,631,818,827,863,1069 'generate-audio':630 'get':34,182 'github.com':1139 'github.com/hexgrad/kokoro':1138 'go':60 'handl':1209,1331 'header':449 'heart':764,776,917,928,970 'homebrew':1164,1169 'html':140,839,852,1055 'id':410 'identifi':147 'immedi':240,696 'increas':1000,1440 'individu':1074 'info':432 'instal':124,332,1086,1097,1103,1111,1124,1175,1185,1207 'instant':280 'instead':1236 'instruct':121 'intel':1170 'internet':95 'interview':201 'interview/podcast':1453 'invalid':1344 'issu':601 'ital':532 'item':1285,1299 'job':1044 'json':395,724 'key':41,69,135,153,461 'know':250,704 'kokoro':302,770,879,955,964,1132,1133 'kokoro.path':962 'kokoro.speed':978 'kokoro.voice':967 'label':40,546,687,1463 'lang':765 'languag':941 'later':1417 'lectur':207,1460 'let':248,702 'line':440,515,530,535 'link':33,45,160,180,1466 'linux':1171 'listen':56,151 'live':1394,1396 'll':247,701 'local':75 'locat':905,966,1149 'login':1385 'long':1002,1436 'lyric':213 'machin':85,110 'mani':1048 'markdown':142,420 'md':840,1060 'merg':543 'messag':1341,1343 'metadata':13,92 'metadata.channel':411 'metadata.title':406 'metadata.video':409 'min':1439 'minut':1039,1049 'miss':347 'mix':935,977 'mlx':752,753,759,877,878,883,889,902,908,911,1116,1126,1129 'mlx-audio':888,901,1115,1125 'mlx-commun':758,907 'mlx/kokoro/builtin':649 'mlx_audio.lang':938 'mlx_audio.model':906 'mlx_audio.path':899 'mlx_audio.speed':946 'mlx_audio.voice':915,925 'mode':1475 'model':757,912 'moment':164,1472 'move':278 'mp3':682,749,867,868,872,1100 'mp3/wav':155,657 'multi':204 'multi-speak':203 'multipl':179,1213,1310,1477 'music':211 'name':450,681,683 'need':353,873 'network':86,126,1404,1406 'new':1246 'news':215 'next':523,1266,1271,1296,1298 'non':187 'non-block':186 'normal':951,983 'note':374,405 'noth':99 'notif':265,717 'number':1021 'o':564 'occur':1421 'one':311,1217 'open':610,670,673,728,732,736,806,817,826,1070 'option':792,793,831,832,854,855,891,896,957,959,988,989,1014,1015,1034,1035,1090 'order':185,1151 'output':12,378,403,424,637,655,725,791,807,841,1050,1095 'output.folder':796 'output.open':802,811,820 'paid':63 'pandoc':300,563,744,844,845,1093,1098 'paragraph':457,498 'parallel':1239 'particip':148,445 'path':379,387,399,425,755,771,1145,1153,1161 'pip':336,1123,1174 'pipelin':238,319,357 'pipx':1179 'plain':497 'playback':948,980 'podcast':202 'point':154 'polish':26 'pop':1268 'posit':1252 'prefer':892 'preset':919 'print':380 'prioriti':1152 'privat':1351,1355 'proceed':1430 'process':76,106,183,194,245,326,699,783,987,1043,1219,1231,1240,1270,1283,1297,1309,1320 'processing.cleanup':1004 'processing.subagent':992 'prose':459 'python':294,320,1088,1224,1241,1262,1315 'python3':370,595,602,628,665 'pytorch':956,1135 'qualiti':1092 'queu':1284 'queue':176,1033,1208,1227,1235,1244,1251,1261,1265,1273,1278,1287,1293,1295,1301,1303,1307 'queue-add':1243,1286 'queue-clear':1302 'queue-next':1264,1294 'queue-status':1226,1277 'queue.stale':1038 'quick':222 'quot':42,136,159,462,472,481 'read':393,396,641 'readi':254,708 'region':1387,1393 'region-block':1386 'regular':488 'remov':558,1008,1360,1365 'repli':242,695,1248 'repo':965 'report':350,675,1336,1422 'request':1412 'requir':16,94,1082 'restrict':1376,1379 'role':451 'run':82,285,354 'runtimeoutsecond':689 'safe':111 'save':800 'script':383,1333 'search':1144 'second':995,1032 'see':1137 'segment':544 'send':178,226,1212 'sent':101 'sentiment':171,502 'separ':539 'sequenti':1323 'servic':104 'session':321 'setup':284,286,1189 'shell':599 'show':1280 'silicon':887,895,1122,1166 'singl':209,306,1456 'single-speak':1455 'skill' 'skill-tubescribe' 'skills/tubescribe/scripts/setup.py':295 'skills/tubescribe/scripts/tubescribe.py':371,629,666,1225,1242,1263,1316 'skip':1461 'sky':779,931,973 'smart':143 'softwar':123,334 'sourc':376,394,398,1154 'source-alekseiul' 'spawn':115,231,276,310,322,694 'speaker':6,39,78,144,205,210,545,1447,1457,1462 'special':559 'speed':653,768,781,949,981 'stale':1045 'standalon':1192 'start':223,1222,1238 'stat':686 'status':1228,1279 'stay':107 'steipete/tap/summarize':1087 'step':363,366,390,391,401,416,427,549,567,661,668 'stop':348,360 'stream':1395,1397 'strict':120 'string':415 'structur':1051 'sub':113,117,233,263,308,313,715,998,1442 'sub-ag':112,116,232,262,307,312,714,997,1441 'subag':784 'subscript':66 'subsequ':389 'summar':4,18,298,1083 'summari':29,53,133,150,454,573,590,606,639,829,865,1065,1326 'summary.mp3':1063 'summary.txt':612,634 'support':177,1399 'system':1160,1206 'tabl':446 'task':239,323 'tell':676 'temp':577,592,788,1005 'text':473,519,525,574,604,607,617 'time':283,1413 'timeout':785,993,1028,1411,1444 'timestamp':43,157,468,548,1465 'tip':1434 'titl':270,555,1054,1062 'tool':345,1196,1199 'top':512 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-assistant' 'topic-automation' 'topic-claude-code' 'topic-claudeclaw' 'topic-memory' 'topic-self-hosted' 'topic-starter-kit' 'topic-telegram-bot' 'transcript':37,77,131,542 'tri':1415 'true':731,747,790,805,860,861,1007 'tts':81,303,647,750,881,1119,1134 'tubescrib':1,19,243,325,581,688,697,1146,1182,1479 'turn':20 'tutori':208,1459 'upload':98,412 'url':229,328,373,437,1215,1247,1272,1289,1291,1311,1322,1345,1350 'url1':1317,1480 'url2':1318,1481 'url3':1319,1482 'us':944 'use':384,487,495,580,594,644,914,920,1128,1473 'user':225,1176,1211,1426 'valid':1348 'valu':834,857 'venv':339,904 'version':1201 'video':3,23,49,167,193,200,212,431,685,1003,1053,1061,1352,1353,1359,1361,1373,1380,1389,1433,1437,1458,1478 'viewer':170,501 'voic':624,650,762,773,918,923,934,976 'w':613 'wait':260,1400 'wav':869,1067 'weight':936 'without':1384 'work':70,197,1449 'workflow':189,305 'write':421,571,589,597 'www.youtube.com':478,485 'www.youtube.com/watch?v=id&t=1510s)':484 'www.youtube.com/watch?v=id&t=754s)':477 'youtub':2,22,32,90,129,168,218,228,327,372,467,1108,1214,1349,1469 'yt':1106,1113,1142,1158 'yt-dlp':1105,1112,1141,1157","prices":[{"id":"5b2fc9f7-7a11-4457-a042-4319e595095e","listingId":"bf3208b8-3d0b-4695-a5b5-adebd3cc82f0","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AlekseiUL","category":"sprut-agent-kit","install_from":"skills.sh"},"createdAt":"2026-05-13T12:58:22.482Z"}],"sources":[{"listingId":"bf3208b8-3d0b-4695-a5b5-adebd3cc82f0","source":"github","sourceId":"AlekseiUL/sprut-agent-kit/tubescribe","sourceUrl":"https://github.com/AlekseiUL/sprut-agent-kit/tree/main/skills/tubescribe","isPrimary":false,"firstSeenAt":"2026-05-13T12:58:22.482Z","lastSeenAt":"2026-05-18T18:57:12.791Z"}],"details":{"listingId":"bf3208b8-3d0b-4695-a5b5-adebd3cc82f0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AlekseiUL","slug":"tubescribe","github":{"repo":"AlekseiUL/sprut-agent-kit","stars":63,"topics":["agent-skills","ai-agents","ai-assistant","automation","claude-code","claudeclaw","memory","self-hosted","starter-kit","telegram-bot"],"license":"mit","html_url":"https://github.com/AlekseiUL/sprut-agent-kit","pushed_at":"2026-05-13T11:20:57Z","description":"Ready-to-use AI agent with soul, memory, and 23 skills for ClaudeClaw ⚡","skill_md_sha":"155811a0da875975a402ce2c6f24e3e13edf4feb","skill_md_path":"skills/tubescribe/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AlekseiUL/sprut-agent-kit/tree/main/skills/tubescribe"},"layout":"multi","source":"github","category":"sprut-agent-kit","frontmatter":{"name":"tubescribe","description":"YouTube video summarizer with speaker detection, formatted documents, and audio output."},"skills_sh_url":"https://skills.sh/AlekseiUL/sprut-agent-kit/tubescribe"},"updatedAt":"2026-05-18T18:57:12.791Z"}}