{"id":"8c36b56a-be4d-44a6-91df-37909c6b6b7e","shortId":"E7mzmd","kind":"skill","title":"elevenlabs","tagline":"Convert documents and text to audio using ElevenLabs text-to-speech.\nUse this skill when the user wants to create a podcast, narrate a document,\nread aloud text, generate audio from a file, or convert text to speech.","description":"# ElevenLabs - Text-to-Speech & Podcast Skill\n\n## Overview\n\nThis skill converts text and documents into high-quality audio using ElevenLabs TTS API. It supports two modes: single-voice narration and two-host conversational podcast generation.\n\n## When to Use This Skill\n\nActivate when the user mentions:\n- \"create podcast\", \"generate podcast\", \"podcast from document\"\n- \"narrate document\", \"narrate this file\", \"read aloud\"\n- \"text to speech\", \"TTS\", \"convert to audio\"\n- \"audio from document\", \"audio version of\"\n\n## Setup\n\nConfig at `skills/elevenlabs/config.json`:\n```json\n{\n  \"api_key\": \"your-elevenlabs-api-key\",\n  \"default_voice\": \"JBFqnCBsd6RMkjVDRZzb\",\n  \"default_model\": \"eleven_multilingual_v2\",\n  \"podcast_voice1\": \"JBFqnCBsd6RMkjVDRZzb\",\n  \"podcast_voice2\": \"EXAVITQu4vr4xnSDxMaL\"\n}\n```\n\nOnly `api_key` is required. Or set `ELEVENLABS_API_KEY` env var.\n\nDependencies: `pip install PyPDF2 python-docx` (only needed for PDF/DOCX files).\n\nRequires `ffmpeg` for multi-chunk narration and podcasts.\n\n## Commands\n\n### List Voices\n\n```bash\npython skills/elevenlabs/scripts/elevenlabs.py voices\npython skills/elevenlabs/scripts/elevenlabs.py voices --json\n```\n\nUse this to find voice IDs for the user.\n\n### Single-Voice TTS\n\n```bash\n# From text\npython skills/elevenlabs/scripts/elevenlabs.py tts --text \"Hello world\" --output ~/Downloads/hello.mp3\n\n# From document\npython skills/elevenlabs/scripts/elevenlabs.py tts --file /path/to/doc.pdf --output ~/Downloads/narration.mp3\n\n# With specific voice\npython skills/elevenlabs/scripts/elevenlabs.py tts --file doc.md --voice VOICE_ID --output out.mp3\n```\n\nThe script handles text extraction, chunking at sentence boundaries (~4000 chars), TTS per chunk with voice continuity, and ffmpeg concatenation automatically.\n\n### Podcast Generation\n\nPodcast mode requires a JSON script file with conversation segments:\n\n```json\n[\n  {\"speaker\": \"host1\", \"text\": \"Welcome to our podcast! Today we're diving into...\"},\n  {\"speaker\": \"host2\", \"text\": \"That's right! I found the section on...\"},\n  {\"speaker\": \"host1\", \"text\": \"Let's break that down...\"}\n]\n```\n\n```bash\npython skills/elevenlabs/scripts/elevenlabs.py podcast --script /tmp/script.json --voice1 ID1 --voice2 ID2 --output ~/Downloads/podcast.mp3\n```\n\n## Podcast Workflow (for Claude)\n\nWhen the user asks to create a podcast from a document:\n\n1. **Extract the document text**:\n   ```bash\n   python skills/elevenlabs/scripts/extract.py /path/to/document.pdf\n   ```\n\n2. **Generate a two-host conversation script** from the extracted text. Follow these guidelines:\n   - Write as a natural, engaging discussion between two hosts\n   - Host 1 typically leads/introduces topics, Host 2 adds analysis and reactions\n   - Start with a brief intro welcoming listeners and stating the topic\n   - End with a summary/outro\n   - Keep each turn under 3000 characters\n   - Vary turn lengths - mix short reactions with longer explanations\n   - Use conversational language: \"That's a great point\", \"What I found interesting was...\"\n   - Reference specific details from the source document\n   - Avoid reading the document verbatim - discuss and interpret it\n\n3. **Write the script** as a JSON array to a temp file:\n   ```python\n   # Write to /tmp/podcast_script.json\n   [\n     {\"speaker\": \"host1\", \"text\": \"Welcome to today's episode...\"},\n     {\"speaker\": \"host2\", \"text\": \"Thanks for having me...\"},\n     ...\n   ]\n   ```\n\n4. **Generate the podcast**:\n   ```bash\n   python skills/elevenlabs/scripts/elevenlabs.py podcast --script /tmp/podcast_script.json --output ~/Downloads/podcast.mp3\n   ```\n\n5. **Clean up** the temp script file.\n\n## Tips\n\n- Run `voices` first to let the user pick voices they like\n- For podcasts, suggest voice pairs with contrasting qualities (e.g., one deep, one bright)\n- Default output to `~/Downloads/` unless the user specifies otherwise\n- For large documents, warn the user about character usage on their ElevenLabs plan","tags":["elevenlabs","skills","sanjay3290","agent-skills","ai-skills","atlassian","azure-devops","claude-code","claude-skills","confluence","deep-research","gmail"],"capabilities":["skill","source-sanjay3290","skill-elevenlabs","topic-agent-skills","topic-ai-skills","topic-atlassian","topic-azure-devops","topic-claude-code","topic-claude-skills","topic-confluence","topic-deep-research","topic-elevenlabs","topic-gmail","topic-google-calendar","topic-google-drive"],"categories":["ai-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sanjay3290/ai-skills/elevenlabs","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sanjay3290/ai-skills","source_repo":"https://github.com/sanjay3290/ai-skills","install_from":"skills.sh"}},"qualityScore":"0.574","qualityRationale":"deterministic score 0.57 from registry signals: · indexed on github topic:agent-skills · 248 github stars · SKILL.md body (3,929 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-02T18:54:10.305Z","embedding":null,"createdAt":"2026-04-18T22:05:11.743Z","updatedAt":"2026-05-02T18:54:10.305Z","lastSeenAt":"2026-05-02T18:54:10.305Z","tsv":"'/downloads':505 '/downloads/hello.mp3':209 '/downloads/narration.mp3':218 '/downloads/podcast.mp3':308,469 '/path/to/doc.pdf':216 '/path/to/document.pdf':332 '/tmp/podcast_script.json':442,467 '/tmp/script.json':302 '1':324,358 '2':333,363 '3':427 '3000':387 '4':458 '4000':241 '5':470 'activ':84 'add':364 'aloud':29,102 'analysi':365 'api':63,121,126,143,150 'array':434 'ask':316 'audio':7,32,59,109,110,113 'automat':252 'avoid':418 'bash':178,199,297,329,462 'boundari':240 'break':294 'brief':371 'bright':501 'char':242 'charact':388,518 'chunk':171,237,245 'claud':312 'clean':471 'command':175 'concaten':251 'config':117 'continu':248 'contrast':495 'convers':76,263,339,399 'convert':2,37,51,107 'creat':22,89,318 'deep':499 'default':128,131,502 'depend':154 'detail':413 'discuss':353,423 'dive':276 'doc.md':226 'document':3,27,54,95,97,112,211,323,327,417,421,513 'docx':160 'e.g':497 'eleven':133 'elevenlab':1,9,41,61,125,149,522 'end':379 'engag':352 'env':152 'episod':450 'exavitqu4vr4xnsdxmal':141 'explan':397 'extract':236,325,343 'ffmpeg':167,250 'file':35,100,165,215,225,261,438,476 'find':189 'first':480 'follow':345 'found':285,408 'generat':31,78,91,254,334,459 'great':404 'guidelin':347 'handl':234 'hello':206 'high':57 'high-qual':56 'host':75,338,356,357,362 'host1':267,290,444 'host2':279,452 'id':191,229 'id1':304 'id2':306 'instal':156 'interest':409 'interpret':425 'intro':372 'jbfqncbsd6rmkjvdrzzb':130,138 'json':120,185,259,265,433 'keep':383 'key':122,127,144,151 'languag':400 'larg':512 'leads/introduces':360 'length':391 'let':292,482 'like':488 'list':176 'listen':374 'longer':396 'mention':88 'mix':392 'mode':67,256 'model':132 'multi':170 'multi-chunk':169 'multilingu':134 'narrat':25,71,96,98,172 'natur':351 'need':162 'one':498,500 'otherwis':510 'out.mp3':231 'output':208,217,230,307,468,503 'overview':48 'pair':493 'pdf/docx':164 'per':244 'pick':485 'pip':155 'plan':523 'podcast':24,46,77,90,92,93,136,139,174,253,255,272,300,309,320,461,465,490 'point':405 'pypdf2':157 'python':159,179,182,202,212,222,298,330,439,463 'python-docx':158 'qualiti':58,496 're':275 'reaction':367,394 'read':28,101,419 'refer':411 'requir':146,166,257 'right':283 'run':478 'script':233,260,301,340,430,466,475 'section':287 'segment':264 'sentenc':239 'set':148 'setup':116 'short':393 'singl':69,196 'single-voic':68,195 'skill':16,47,50,83 'skill-elevenlabs' 'skills/elevenlabs/config.json':119 'skills/elevenlabs/scripts/elevenlabs.py':180,183,203,213,223,299,464 'skills/elevenlabs/scripts/extract.py':331 'sourc':416 'source-sanjay3290' 'speaker':266,278,289,443,451 'specif':220,412 'specifi':509 'speech':13,40,45,105 'start':368 'state':376 'suggest':491 'summary/outro':382 'support':65 'temp':437,474 'text':5,11,30,38,43,52,103,201,205,235,268,280,291,328,344,445,453 'text-to-speech':10,42 'thank':454 'tip':477 'today':273,448 'topic':361,378 'topic-agent-skills' 'topic-ai-skills' 'topic-atlassian' 'topic-azure-devops' 'topic-claude-code' 'topic-claude-skills' 'topic-confluence' 'topic-deep-research' 'topic-elevenlabs' 'topic-gmail' 'topic-google-calendar' 'topic-google-drive' 'tts':62,106,198,204,214,224,243 'turn':385,390 'two':66,74,337,355 'two-host':73,336 'typic':359 'unless':506 'usag':519 'use':8,14,60,81,186,398 'user':19,87,194,315,484,508,516 'v2':135 'var':153 'vari':389 'verbatim':422 'version':114 'voic':70,129,177,181,184,190,197,221,227,228,247,479,486,492 'voice1':137,303 'voice2':140,305 'want':20 'warn':514 'welcom':269,373,446 'workflow':310 'world':207 'write':348,428,440 'your-elevenlabs-api-key':123","prices":[{"id":"88e8cd96-c260-473b-b427-fbfccf21c512","listingId":"8c36b56a-be4d-44a6-91df-37909c6b6b7e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sanjay3290","category":"ai-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:05:11.743Z"}],"sources":[{"listingId":"8c36b56a-be4d-44a6-91df-37909c6b6b7e","source":"github","sourceId":"sanjay3290/ai-skills/elevenlabs","sourceUrl":"https://github.com/sanjay3290/ai-skills/tree/main/skills/elevenlabs","isPrimary":false,"firstSeenAt":"2026-04-18T22:05:11.743Z","lastSeenAt":"2026-05-02T18:54:10.305Z"}],"details":{"listingId":"8c36b56a-be4d-44a6-91df-37909c6b6b7e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sanjay3290","slug":"elevenlabs","github":{"repo":"sanjay3290/ai-skills","stars":248,"topics":["agent-skills","ai-skills","atlassian","azure-devops","claude-code","claude-skills","confluence","deep-research","elevenlabs","gmail","google-calendar","google-drive","google-workspace","imagen","jira","mcp","mysql","notebooklm","postgresql","text-to-speech"],"license":"apache-2.0","html_url":"https://github.com/sanjay3290/ai-skills","pushed_at":"2026-04-13T14:16:19Z","description":"Collection of agent skills for AI coding assistants","skill_md_sha":"f83f2b589f3ac891ab7fe38d93188cef58294762","skill_md_path":"skills/elevenlabs/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sanjay3290/ai-skills/tree/main/skills/elevenlabs"},"layout":"multi","source":"github","category":"ai-skills","frontmatter":{"name":"elevenlabs","license":"Apache-2.0","description":"Convert documents and text to audio using ElevenLabs text-to-speech.\nUse this skill when the user wants to create a podcast, narrate a document,\nread aloud text, generate audio from a file, or convert text to speech."},"skills_sh_url":"https://skills.sh/sanjay3290/ai-skills/elevenlabs"},"updatedAt":"2026-05-02T18:54:10.305Z"}}