ElevenLabs Pro - Voice Clone
Clone a voice from eight clips — and remember to flip the switch
- audio1
- audio2
- audio3
- audio4
- audio5
- audio6
- audio7
- audio8
- voice_id
- status
Instant voice cloning: you feed it a handful of audio clips and, a few seconds later, you've got a voice_id that can read anything in that voice. No training queue, no waiting overnight. It's one of the three voice-building nodes in ComfyUI-ElevenLabs-Pro (Clone, Design, Create), and it's the one that trips up basically everyone once.
Here's the trap: the node does nothing until you flip create to True. It ships with create=False on purpose, and the status output will cheerfully tell you DRY-RUN: would clone 'My Cloned Voice' from 3 samples while handing you an empty voice_id. That's not a bug. It's a safety gate - older versions of this pack burned a voice slot and credits on every queue prompt, which is a great way to empty your ElevenLabs account while testing. So: set up your samples, flip create to True when you actually want to upload, and re-queue.
How it works
The node converts each ComfyUI AUDIO input to a WAV and sends a multipart POST to /v1/voices/add - one files part per sample, up to eight of them (audio1 is required, audio2 through audio8 are optional). It can pass a name, an optional description, and a remove_background_noise flag. The API responds with a voice_id, which is your passport for every TTS node in the pack.
Two outputs: voice_id (empty on dry-run, real after a successful clone) and status (a string saying what actually happened). Wire voice_id into any TTS node's voice_id input and you're done.
The inputs that matter
- create - the one you'll forget. False by default, must be True to upload.
- voice_name - what the clone is called in your library. You'll recognize it later.
- audio1 (plus audio2–8) - the samples. Quality here is everything: this is instant cloning, not professional cloning, so there's no training to clean up your mess. Use short, clean, single-speaker clips - same mic, same room, no music, roughly 30 seconds to 2 minutes total. More good samples beat one perfect one.
- remove_background_noise - worth enabling if your source is a podcast or a phone recording with hum.
A quick reality check on expectations: instant clones are fast and surprisingly good, but they inherit whatever's in your samples. A raspy voice with room echo will stay raspy with room echo. The "describe a voice from scratch" alternative - the Voice Design node in the same pack - is the better tool when you don't have reference audio at all.
Install
ComfyUI Manager → search ComfyUI-ElevenLabs-Pro → Install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-ElevenLabs-Pro.git
pip install -r ComfyUI-ElevenLabs-Pro/requirements.txt
Restart ComfyUI after. Dependencies are only requests and soundfile; there are no model files to download because everything runs on ElevenLabs' servers. You'll need an API key - ELEVENLABS_API_KEY env var or pasted into the api_key field, which is masked and scrubbed from logs and workflow metadata.
Where people get burned
The dry-run status confusing you is the big one. The other classic: feeding it long, messy audio and getting a clone that drifts. And if a re-queue doesn't seem to re-run, that's the input-hash cache working - identical samples and settings won't re-bill you. Tweak a sample or the name when you genuinely want a fresh clone.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| voice_name | STRING | My Cloned Voice | Name for the cloned voice. |
| audio1 | AUDIO | — | |
| create | BOOLEAN | false | MUST be True to actually create the voice. Default False prevents accidental credit/slot burn on workflow re-queue. |
| audio2opt | AUDIO | — | |
| audio3opt | AUDIO | — | |
| audio4opt | AUDIO | — | |
| audio5opt | AUDIO | — | |
| audio6opt | AUDIO | — | |
| audio7opt | AUDIO | — | |
| audio8opt | AUDIO | — | |
| descriptionopt | STRING | Description of the voice. | |
| remove_background_noiseopt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| voice_id | STRING | — |
| status | STRING | — |