Comfyui-Kling-Wrapper Custom Voice List Builder
Give a Kling video several cloned voices to argue with
- custom_voice_list
- custom_voice_list_json
Single-voice image-to-video is one thing: clone a voice, plug the ID into custom_voice_id, done. But what about a scene with two or three characters, each with their own cloned voice? That's what Custom Voice List Builder is for. It packs multiple voice IDs into a custom_voice_list that Kling's video generation can assign per-character through prompt markers.
Structurally it's the audio twin of Element List Builder - same four-slots-plus-escape-hatch design, same "this node does the boring packing so the API doesn't have to be hand-typed" philosophy. It exists because Kling's native audio models (kling-v2-6 especially) can mix multiple voices in one clip, and the list is how you tell them apart.
The inputs
voice_1- required, takes a voice ID string (from Custom Voice Create/Query).voice_2,voice_3,voice_4- optional extra slots.extra_voice_ids- a multiline or comma-separated list of more voice IDs, for when four slots aren't enough.
Every slot takes a plain string voice ID, so you can wire from a Create/Query node or just type the ID. The node normalizes everything into a proper list and validates that at least one voice is present.
Outputs
custom_voice_list- the typed list that feeds intoImage2Video.custom_voice_listcustom_voice_list_json- the same list as a string, for inspection or text-based plumbing
The workflow that makes it click
The README spells out the multi-voice recipe for kling-v2-6:
- Clone your voices with Custom Voice Create.
- Connect their
voice_idoutputs into this builder's slots. - Connect
custom_voice_listinto Image2Video'scustom_voice_list. - Set
sound=on, pick a duration, and reference each voice in order with markers:<<<voice_1>>>in one character's dialogue,<<<voice_2>>>in the other's.
The markers are ordered - voice_1 gets <<<voice_1>>>, voice_2 gets <<<voice_2>>>. Get the ordering wrong and Kling will happily assign your narrator's voice to the villain.
The catches
custom_voice_list, custom_voice_id, and voice_preset are mutually exclusive on Image2Video - pick exactly one. And per the README, cloned voices ride on kling-v2-6; the active API rejects the voice_list field for kling-v3. If a multi-voice run fails, check that your model actually accepts the list.
Install
Same pack, same drill: ComfyUI Manager (search "Comfyui-Kling-Wrapper") or git clone https://github.com/magicwang1111/Comfyui-Kling-Wrapper.git into custom_nodes, pip install -r requirements.txt, restart, key in config.local.json. No models, just API credits.
It's a tiny utility, but it's the difference between "two characters, one voice" and actual multi-character dialogue in a Kling clip. If you're cloning voices at all, you'll want it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| voice_1 | STRING | — | |
| voice_2opt | STRING | — | |
| voice_3opt | STRING | — | |
| voice_4opt | STRING | — | |
| extra_voice_idsopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| custom_voice_list | COMFYUI_KLING_WRAPPER_CUSTOM_VOICE_LIST | — |
| custom_voice_list_json | STRING | — |