Nodes/ComfyUI-ElevenLabs/ElevenLabs Voice Query (查询语音库)
ComfyUI Node

ElevenLabs Voice Query (查询语音库)

Pick an ElevenLabs voice on the canvas — without burning a single credit

By GuardSkill·Created 10 months ago·Updated 10 months ago· 0
ElevenLabs Voice Query (查询语音库)
    • voice_id
    api_key
    seed0
    categoryall
    genderall
    ageall
    languageall
    localeall
    use_casesall
    descriptiveall
    page_size100

    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:

    • gender and age - the quickest way to narrow a cast of characters. female/male/neutral, middle-aged/young/old.
    • language and locale - 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_cases and descriptive - the fun ones. use_cases filters by intended purpose (advertisement, conversational, narrative_story, social_media…), descriptive by vibe (calm, excited, warm, serious…). Filter to narrative_story + warm and 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.

    Categoryaudio/ElevenLabs

    Inputs (10)

    NameTypeDefaultDescription
    api_keySTRING
    seedINT00–18446744073709550000
    categoryoptCOMBOall5 options: all, high_quality, professional, generated, famous
    genderoptCOMBOall4 options: all, female, male, neutral
    ageoptCOMBOall5 options: all, middle-aged, middle_aged, old, young
    languageoptCOMBOall33 options: all, ar, bg, cs, da, de, +27
    localeoptCOMBOall72 options: all, ar-EG, ar-KW, ar-LB, ar-MA, ar-SA, +66
    use_casesoptCOMBOall8 options: all, advertisement, characters_animation, conversational, entertainment_tv, informative_educational, +2
    descriptiveoptCOMBOall14 options: all, anxious, calm, casual, confident, excited, +8
    page_sizeoptINT1001–100

    Outputs (1)

    NameTypeDescription
    voice_idSTRING