ElevenLabs Pro - Voice Create
Saving a preview before it evaporates
- voice_id
- status
Voice Design is the fun part; this node is the part that makes it real. A designed voice preview only exists as a temporary ID until you save it - and that's exactly what ElevenLabs Pro - Voice Create does. You feed it the generated_voice_id from the Voice Design node, give the voice a name, and it becomes a permanent member of your library that every TTS node in the pack can use from then on.
It's a small node with a big default that will trip you up: create is False, and until you flip it to True nothing gets saved. Same safety gate as Voice Clone, same reason - older versions of this pack saved on every queue and quietly burned through voice slots (ElevenLabs limits how many you can hold). So the pipeline feels broken the first time you run it: Design gives you a voice, Create gives you a DRY-RUN status and an empty voice_id. Flip the switch, run once, and you're permanent.
How it works
The node POSTs to /v1/text-to-voice/create-voice-from-preview with the generated_voice_id, your chosen voice_name, and an optional description. On success the API returns a permanent voice_id, which is what you wire into TTS going forward. Outputs are voice_id and status - and on dry-run, voice_id is empty while status explains exactly what would have happened. That status string is your friend; read it before assuming the node is broken.
The inputs that matter
- generated_voice_id - required, and the error message is blunt if you skip it: "Connect from Voice Design node." It's the ID of the specific preview you auditioned.
- create - the switch. False by default, must be True to save.
- voice_name - pick something you'll recognize in a month, because it now lives in your library.
- voice_description - optional, but a good habit if you'll share the account or revisit this later.
The workflow is literally three nodes: Voice Design → Voice Create → TTS (with the voice_id output feeding TTS). One thing worth doing once you've saved a voice you like: strip Design and Create out of the workflow and just use a Voice Selector or a raw voice_id string. No point re-running the paid preview call every time you want to narrate something.
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. Dependencies are just requests and soundfile; no local model files - everything runs on ElevenLabs' API. You'll need an API key (ELEVENLABS_API_KEY env var or the masked api_key field).
Where people get burned
Two spots. First, create=False + a "why is my voice_id empty" moment - flip the switch. Second, realizing you saved preview #0 when preview #2 was the good one. If that happens, don't panic: go back to Voice Design, bump preview_index to 2, re-run, and Create again. You can also read all_voice_ids off the Design node to see exactly what you're working with before you commit.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| generated_voice_id | STRING | The generated_voice_id from Voice Design node. | |
| voice_name | STRING | My Designed Voice | Name to save the voice as. |
| create | BOOLEAN | false | MUST be True to actually save. Default False prevents accidental voice-slot burn. |
| voice_descriptionopt | STRING | Optional description for the saved voice. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| voice_id | STRING | — |
| status | STRING | — |