Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Implement ElevenLabs text-to-speech and voice cloning workflows. Use when building TTS features, cloning voices from audio samples, streaming speech to a chatbot, or implementing the primary ElevenLabs money-path: voice generation. Trigger with "elevenlabs TTS", "text to speech", "voice cloning elevenlabs", "clone a voice", "generate speech", "elevenlabs voice".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 97% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 173% | 0% |
The primary ElevenLabs workflows: (1) Text-to-Speech with voice settings, (2) Instant Voice Cloning from audio samples, (3) streaming TTS via WebSocket for real-time applications, and (4) voice-library management. This SKILL.md walks the full flow at a high level and carries the first TTS example inline; the deep code for cloning, streaming, and management lives in the full implementation walkthrough.
elevenlabs-install-auth setupInstantiate the client, call textToSpeech.convert(voiceId, opts), and pipe the returned stream to a file. The voice_settings block is where you tune delivery:
typescriptimport { ElevenLabsClient } from "@elevenlabs/elevenlabs-js"; import { createWriteStream } from "fs"; import { Readable } from "stream"; import { pipeline } from "stream/promises"; const client = new ElevenLabsClient(); async function generateSpeech( text: string, voiceId: string, outputPath: string ) { const audio = await client.textToSpeech.convert(voiceId, { text, model_id: "eleven_multilingual_v2", voice_settings: { stability: 0.5, // Lower = more expressive, higher = more consistent similarity_boost: 0.75, // How closely to match the original voice style: 0.3, // Amplify the speaker's style (adds latency if > 0) speed: 1.0, // 0.7 to 1.2 range }, // Optional: enforce language for multilingual model // language_code: "en", // ISO 639-1 }); await pipeline(Readable.fromWeb(audio as any), createWriteStream(outputPath)); console.log(`Generated: ${outputPath}`); } await generateSpeech("Welcome to our platform.", "21m00Tcm4TlvDq8ikWAM", "stable.mp3");
Clone a voice from 1-25 audio samples with client.voices.add({ name, description, files }), which returns a voice_id you can use immediately in textToSpeech.convert. Use similarity_boost: 0.85 on cloned voices to stay close to the original. Full cloneVoice implementation: implementation.md, Step 2.
For real-time apps (chatbots, live narration), open wss://api.elevenlabs.io/v1/text-to-speech/{voiceId}/stream-input with the low-latency eleven_flash_v2_5 model. Send a space as Beginning-of-Stream, stream text chunks, then an empty string as End-of-Stream; collect base64 audio frames until isFinal. Full streamTTSWebSocket implementation: implementation.md, Step 3.
List, inspect, update, and delete voices with client.voices.getAll(), getSettings, editSettings, and delete. Full helpers: implementation.md, Step 4.
Two lookup tables — the voice-cloning input requirements and the full voice_settings range/effect guide with per-use-case starting points — live in implementation.md. Quick defaults:
stability=0.5, similarity_boost=0.75, style=0.0stability=0.4, similarity_boost=0.6, style=0.3stability=0.5, similarity_boost=0.85, style=0.0outputPath (e.g. stable.mp3); console logs Generated: plus the output path.voice_id (logged as Cloned voice created: plus the id) plus an immediately-usable audio stream in the cloned timbre.Buffer of base64-decoded audio chunks assembled as frames arrive.| Error | HTTP | Cause | Solution | |-------|------|-------|----------| | voice_not_found | 404 | Invalid voice_id | List voices first: GET /v1/voices | | text_too_long | 400 | Over 5,000 chars per request | Split text and use previous_text/next_text for prosody | | quota_exceeded | 401 | Character limit reached | Check usage, upgrade plan | | too_many_concurrent_requests | 429 | Exceeds plan concurrency | Queue requests; see concurrency limits | | invalid_voice_sample | 400 | Bad audio file for cloning | Use clean audio, supported format, 30s+ | | WebSocket model_not_supported | N/A | eleven_v3 not available for WS | Use eleven_flash_v2_5 or eleven_multilingual_v2 |
Four complete input-to-audio scenarios are in references/examples.md:
voice_id.For speech-to-speech, sound effects, and audio isolation, see the companion skill elevenlabs-core-workflow-b, which covers the remaining ElevenLabs audio-transformation endpoints.
Other measured skills in the registry, with their headline benchmark lift.