Kling Voice Selector
The Kling Voice Picker That Costs Nothing
- voice_id
- language
Kling Voice Selector is the rare node in this pack that never touches the network. No auth, no API call, no credits burned. It's a dropdown that maps a friendly name - "Melody (EN Female)", "Sunny (EN Boy)", "Anchor (EN Male)" - to the opaque voice ID Kling's TTS actually wants. You pick a voice, it hands you the ID and the language tag. That's the entire job, and it's exactly the kind of node you stop noticing after the first minute and then miss when it's gone.
Why does it exist at all? Because the TTS nodes take a raw voice_id, and raw Kling voice IDs look like genshin_vindi2 or chat1_female_new-3 - memorable if you work at Kling, meaningless otherwise. This node is the human interface between you and that ID list.
How it works
Look at the source and it's almost embarrassingly simple: a single dictionary (VOICES_CONFIG) maps 23 display names to (voice_id, language) pairs, and the node's execute() just does VOICES_CONFIG[voice_name] and returns both strings. No hidden logic, no state. It's a constant lookup with a pretty face.
One detail worth knowing: the catalog is bilingual, roughly a dozen English voices plus a Chinese set. Several share the same underlying voice ID - "Sunny (EN Boy)" and 阳光少年 are both genshin_vindi2 - which is why the language output isn't decorative. It's how Kling knows whether to speak English or Mandarin with that voice.
Inputs and outputs
The single input is voice_name, a dropdown with all 23 presets (the tooltip literally says "Select a preset voice for TTS"). There's nothing else to fiddle with, which is the point.
Two outputs:
- voice_id (STRING) - wire this into a TTS node's
voice_idinput. That's the whole deal. - language (STRING) - the
en/zhtag. Feed it to TTS Advanced'svoice_languagefield so the language matches the voice, especially for the Chinese presets.
The basic TTS node takes just the voice_id; TTS Advanced also exposes voice_speed and voice_language, which is where the second output earns its keep. If you ever need a voice that isn't in the catalog, skip the dropdown and wire a Voice Clone output into the same voice_id input instead - the two are interchangeable there.
Install
Part of the ComfyUI-Kling-Direct pack, same as the rest:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-Kling-Direct
Or ComfyUI Manager → Install Custom Nodes → search "Kling Direct", then restart. No model downloads, no extra dependencies.
Here's the nice part: since this node makes no API call, you can use it with zero setup - no Kling keys, no KYC, nothing. A workflow that just picks a voice and prints it runs the moment the pack is installed. It only starts needing authentication once you actually hit a TTS node downstream, and by then you'll need keys anyway.
Common issues
Honestly, there isn't much to break. The realistic stumbles:
- Voice speaks the wrong language. You grabbed a Chinese preset and fed only
voice_idinto a basic TTS node, which defaults to English. Use thelanguageoutput, or pick an EN-labeled voice. - No voices in the dropdown. That means the pack didn't load its catalog - restart ComfyUI after installing, and check your console for import errors.
- You're hunting for a voice that isn't there. The catalog is fixed at 23 presets. If none fit, that's what Voice Clone is for.
The one genuinely useful habit: treat this node as the default and think of a hard-typed voice ID as the exception. A dropdown beats remembering oversea_male1 on a Tuesday.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| voice_name | COMBO | Select a preset voice for TTS. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| voice_id | STRING | — |
| language | STRING | — |