ElevenLabs Pro - Voice Design
Design a voice with a sentence — no recordings needed
- reference_audio
- preview_audio
- generated_voice_id
- all_voice_ids
This is the fun one. Type a sentence describing a voice - "a weary 50-year-old noir detective, gravelly, mid-Atlantic, talks like he's already solved it" - and ElevenLabs fabricates three previews of that voice from nothing. No samples, no recordings, no cloning. It's the flip side of Voice Clone in ComfyUI-ElevenLabs-Pro: clone needs audio you don't have, design needs only an imagination you do.
It's the "text-to-voice" designed-voices feature, and yes, it's a paid magic trick - every run bills credits, and it's cached by input hash so identical text + description won't re-bill you on re-queue. Worth it when you want a voice that doesn't belong to any real person (or anyone you have permission to clone).
How it works
The node POSTs your text (the sample line the previews will speak) and voice_description to /v1/text-to-voice/create-previews. The API returns three previews, each with its own generated ID and base64-encoded audio (mp3, 44.1k). The pack decodes all of that and gives you:
- preview_audio - a ComfyUI
AUDIOtensor. Which of the three you hear is controlled by preview_index (0–2), defaulting to 0. - generated_voice_id - the ID of whichever preview you've selected. This is the one you'll feed into Voice Create.
- all_voice_ids - all three IDs, newline-separated, so you can re-pick a different preview later without re-describing.
Pick up one of the pack's example workflows (07_voice_create.json) and you'll see the intended shape: Design → Create → TTS. The previews are throwaway until you run them through Voice Create with create=True - that's the node that saves your chosen preview as a permanent library voice.
The inputs that matter
- voice_description - do the work here. Age, gender, accent, tone, register, personality. "Male voice" gives you a generic male voice; "a breathy, soft-spoken female narrator in her 30s with a faint Irish lilt" gives you something you'd actually cast.
- text - the line the previews speak. It's your chance to hear the voice say something representative before you commit.
- preview_index - which of the three previews lands on
preview_audioandgenerated_voice_id. Leave at 0, preview, then bump it to audition the others.
Install
ComfyUI Manager → search ComfyUI-ElevenLabs-Pro → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-ElevenLabs-Pro.git
pip install -r ComfyUI-ElevenLabs-Pro/requirements.txt
Restart ComfyUI. Only dependencies are requests and soundfile; nothing to download locally. API key via ELEVENLABS_API_KEY env var or the node's masked api_key field (keys get scrubbed from errors and workflow metadata).
Where people get burned
The node raises if either text or voice_description is empty - both are required, and an empty description is the usual offender. The subtler gotcha: the three previews come back in a single API call, so bumping preview_index re-runs that call (and re-bills it) rather than just swapping which preview you hear. Decide on your description once, then audition cheaply. And don't be surprised that nothing persists - persistence is Voice Create's job, not this node's.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| text | STRING | Hello! This is a preview of the designed voice. | Sample text, 100-1000 characters. Shorter text is replaced by auto-generated sample text. |
| voice_description | STRING | Describe the voice you want: age, gender, accent, tone, etc. 20-1000 characters. | |
| preview_indexopt | INT | 00–2 | Which of the 3 previews to expose on preview_audio output (0..2). |
| modelopt | COMBO | eleven_multilingual_ttv_v2 | Voice design model. eleven_ttv_v3 is the only one that accepts reference_audio. |
| auto_generate_textopt | BOOLEAN | false | Generate the sample text from the voice description instead of using `text`. |
| loudnessopt | FLOAT | 0.50-1–1 | Volume of the generated voice. -1 = quietest, 1 = loudest, 0 is roughly -24 LUFS. |
| guidance_scaleopt | FLOAT | 5.00–100 | How closely the voice follows the description. High values can sound robotic. |
| seedopt | INT | 00–2147483647 | Same seed with the same inputs produces the same voice. 0 = random. |
| should_enhanceopt | BOOLEAN | false | Expand a short description into a more detailed one before generating. |
| reference_audioopt | AUDIO | Reference voice to design from. Only supported with eleven_ttv_v3. | |
| prompt_strengthopt | FLOAT | 0.500–1 | Balance of description vs reference_audio: 0 = almost no description influence, 1 = almost no reference influence. Used only with reference_audio. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| preview_audio | AUDIO | — |
| generated_voice_id | STRING | — |
| all_voice_ids | STRING | — |