ElevenLabs Pro - Voice Design
Design a voice with a sentence — no recordings needed
- 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 (4)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| text | STRING | Hello! This is a preview of the designed voice. | Sample text to generate the preview with. |
| voice_description | STRING | Describe the voice you want: age, gender, accent, tone, etc. | |
| preview_indexopt | INT | 00–2 | Which of the 3 previews to expose on preview_audio output (0..2). |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| preview_audio | AUDIO | — |
| generated_voice_id | STRING | — |
| all_voice_ids | STRING | — |