ElevenLabs Voice Query (查询语音库)
Pick an ElevenLabs voice on the canvas — without burning a single credit
- voice_id
Ever wanted to narrate a ComfyUI video but spent forty minutes hunting for a voice? That's the whole job of ElevenLabsVoiceQuery. It's the boring half of the GuardSkill ComfyUI-ElevenLabs pack: it doesn't generate audio, it doesn't clone anything, it just browses ElevenLabs' shared voice library and hands you back a voice_id you can wire straight into the pack's ElevenLabsTTS node. Think of it as the "pick a narrator" step that sits between your prompt and the text-to-speech call. Boring, yes. But it's the difference between pasting voice IDs you found by hand and having a reproducible voice picker inside your graph.
What it actually does
Peek at the source and it's a thin requests.get to https://api.elevenlabs.io/v1/shared-voices with your API key in the xi-api-key header. It builds a query from the filters you set, asks for up to page_size voices (sorted by cloned_by_count, i.e. the most-cloned, most-used voices first), then does random.seed(seed) and picks one with random.choice(). That's the whole trick: the seed is what makes "random" reproducible. Same seed, same filters, same voice, every run. It also retries the API call up to three times with a second of sleep between attempts, so a hiccup in ElevenLabs' API won't kill your batch.
Note that this node needs an API key even though it never generates anything. The query itself isn't a generation call, so it doesn't eat credits - the billing hit comes later, in ElevenLabsTTS. But ElevenLabs still wants a key attached to the request, and the node will refuse to run without one.
The inputs that matter
You only have to set two: api_key and seed (0 to 2⁶⁴−1). Everything else defaults to all, which tells the node to skip that filter entirely. In practice you'll touch a few:
genderandage- the quickest way to narrow a cast of characters. female/male/neutral, middle-aged/young/old.languageandlocale- language is the coarse code (en, ja, zh…), locale is the fine one (en-US, cmn-CN, ja-JP). If you need a specific accent, set the locale.use_casesanddescriptive- the fun ones. use_cases filters by intended purpose (advertisement, conversational, narrative_story, social_media…), descriptive by vibe (calm, excited, warm, serious…). Filter tonarrative_story+warmand you get audiobook narration energy.
Leave page_size alone at 100 unless you have a reason; it's the pool the seed draws from. Set every filter to all and the seed will just pick from the most-cloned voices in the whole library.
What comes out
One output: voice_id, a STRING. That's it - no audio, no waveform. Wire it into the voice_id input of ElevenLabsTTS, or paste it into any ElevenLabs-facing tool. The one genuine trap: you can't hear the voice in this node. The first time you hear it is when the TTS node renders, and the shared library is not a guarantee - a community voice can vanish or go private later. Found one you love? Copy its voice_id and hard-code it; stop gambling on the seed.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/GuardSkill/ComfyUI-ElevenLabs.git
cd ComfyUI-ElevenLabs
pip install -r requirements.txt
Then restart ComfyUI. Or just search "ComfyUI-ElevenLabs" in ComfyUI Manager. Dependencies are light - elevenlabs, librosa, requests - no model downloads, no VRAM, nothing to weigh. You'll find it under audio/ElevenLabs.
Where people get burned
It's an API-wrapper node, which means it's a custom node that holds your key and phones home by design. It's MIT-licensed, small, and easy to read - but the rule still applies: don't paste a real key into a workflow you're going to share, and glance at the source before first run. The other practical gotchas: the shared library has no preview here, so budget a run or two to land on a voice; and the whole thing only works if you actually have an ElevenLabs account and key, because ElevenLabs is a paid, closed service - the reliability bar for TTS, but a subscription you pay for. If you're fully offline and free, this pack isn't for you; that's Chatterbox or F5-TTS territory. If you're fine paying for the best voices, this is the cleanest way to browse them from inside ComfyUI.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| seed | INT | 00–18446744073709550000 | — |
| categoryopt | COMBO | all | 5 options: all, high_quality, professional, generated, famous |
| genderopt | COMBO | all | 4 options: all, female, male, neutral |
| ageopt | COMBO | all | 5 options: all, middle-aged, middle_aged, old, young |
| languageopt | COMBO | all | 33 options: all, ar, bg, cs, da, de, +27 |
| localeopt | COMBO | all | 72 options: all, ar-EG, ar-KW, ar-LB, ar-MA, ar-SA, +66 |
| use_casesopt | COMBO | all | 8 options: all, advertisement, characters_animation, conversational, entertainment_tv, informative_educational, +2 |
| descriptiveopt | COMBO | all | 14 options: all, anxious, calm, casual, confident, excited, +8 |
| page_sizeopt | INT | 1001–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| voice_id | STRING | — |