ElevenLabs Pro - Fetch Voices
List every voice your account actually has
- voices_json
- voice_id_list
- count
The Voice Selector node only knows ElevenLabs' premade voices - it can't see the clones you made or the voices you designed. FetchVoices is the node that bridges that gap. It hits the API and lists everything your account actually has: premade, cloned, generated, and professional voices, with filters to find the one you want. It's the "show me what I can use" node, and it's free in the sense that matters - a cheap GET, not a credit-billing generation.
Under the hood it calls ElevenLabs' voices endpoint and paginates through the results, then caches them for five minutes so you're not hammering the API every queue. That's why the node can afford to re-execute on every prompt (it uses the always-run mixin rather than the paid nodes' input-hash caching): the cost is a cached GET. Flip force_refresh to bypass the cache when you've just cloned a voice and want it immediately.
The filters are where it earns its keep:
- search - filters by name, description, accent, or use_case, case-insensitive. "British" or "narration" both work.
- category -
all,premade,cloned,generated, orprofessional. - gender -
any,male,female,nonbinary.
Three outputs come back: voices_json (the full structured list, pretty-printed - great for a text display or JSON parsing), voice_id_list (a plain newline list of id # name lines, which is the human-readable one), and count (an INT you can feed into routing logic, e.g. "if I have zero cloned voices, don't offer the clone branch").
Mechanically it's straightforward: fetch, filter in Python, serialize. The node needs an api_key (or the ELEVENLABS_API_KEY env var) because your voice library is account-specific - but it's just a read, so no credits are consumed.
Install is the pack standard:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-ElevenLabs-Pro.git
pip install -r ComfyUI-ElevenLabs-Pro/requirements.txt
Restart ComfyUI, or install "ComfyUI-ElevenLabs-Pro" via ComfyUI Manager. Only requests and soundfile - nothing to download.
The practical pattern people land on: FetchVoices is a discovery tool, not a wiring tool. You use it to find the voice_id you want, then either hardcode that ID via the Voice Selector's custom_voice_id field or wire the string straight into TTS. If you need a single known voice by name, Get Voice By Name is the leaner cousin. And one caution: voices_json contains metadata about all your voices, and if you save that into a shared workflow's text display, you're exposing your voice library structure - harmless in most cases, but it's your data, so know that the output is a full dump.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | ElevenLabs API key. Falls back to ELEVENLABS_API_KEY env var. | |
| searchopt | STRING | Filter voices by name, description, accent, or use_case. | |
| categoryopt | COMBO | all | 5 options: all, premade, cloned, generated, professional |
| genderopt | COMBO | any | 4 options: any, male, female, nonbinary |
| force_refreshopt | BOOLEAN | false | Bypass voice cache and fetch fresh from API. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| voices_json | STRING | — |
| voice_id_list | STRING | — |
| count | INT | — |