executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
elevenlabs-core-workflow-aImplement 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 vo…
Independent GitHub snapshot · Automated classification · Original documentation governs
name: elevenlabs-core-workflow-a description: | 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". allowed-tools: Read, Write, Bash(npm:), Bash(curl:) version: 1.6.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:
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:
import { 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.