Qwen3-TTS Role Bank ⚡
Eight voices on one wire — and the catch
- prompt_1
- prompt_2
- prompt_3
- prompt_4
- prompt_5
- prompt_6
- prompt_7
- prompt_8
- role_bank
Role Bank is the smallest node in this pack's Qwen3-TTS family: eight labelled slots for voice-clone prompts, collected into one dictionary with a name attached to each. It does no model work at all - no checkpoint, no GPU, no dependencies beyond the pack itself.
And it comes with a catch you should know before you build around it.
What it does
You get eight pairs of inputs: role_name_1 … role_name_8 (strings, defaulting to Role1, Role2, …) and prompt_1 … prompt_8 (each a VOICE_CLONE_PROMPT socket). Everything is optional. On run, the node walks the slots in order and keeps the ones that have both a non-blank name and a connected prompt. Empty names and unconnected prompts are skipped silently - that's the documented behaviour, not a bug. Because names are dictionary keys, two slots sharing a name means the later one wins.
The single output is role_bank, typed QWEN3_ROLE_BANK.
Where do the prompts come from? Any node that produces a VOICE_CLONE_PROMPT: Qwen3-TTS Voice Clone Prompt, or Qwen3-TTS Load Speaker pulling a saved voice off disk.
The catch
Nothing in this pack accepts QWEN3_ROLE_BANK as an input.
Search the pack and the only reference to that type is this node's own output declaration. Role Bank is here for parity with the source pack it was ported from, where a multi-role dialogue node consumes the bank and speaks each line in the right voice. In a CCTech-only install, wiring a bank gets you a value with nowhere to go. The graph will run; the bank just sits there.
So be honest about what it's worth today. If you install the flybirdxx Qwen-TTS pack alongside this one (same qwen-tts pip package underneath, same model layout, no reason to run both), its dialogue node is the intended consumer. If you don't, the practical use is bookkeeping: it's a tidy place to park eight voices with readable names instead of a fan of loose wires, and it makes a workflow somebody else shares easier to read. Neither of those is a reason to go out of your way for it.
Wiring it in practice
Skip the bank for a single-voice graph - connect Voice Clone Prompt straight to Voice Clone's voice_clone_prompt (it takes precedence over ref_audio there, so one prompt can drive any number of generation nodes). Reach for Role Bank when you're genuinely juggling several characters in one session and want the names visible on the canvas.
Install
Role Bank needs no model and no extra Python package - but the pack it ships in doesn't mean anything without qwen-tts for its siblings, and the model downloads happen in those nodes, not this one.
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install -r ComfyUI-GGUF-Loader/requirements.txt
Or search the pack title in ComfyUI Manager. This is the CCTech fork of city96's ComfyUI-GGUF - the GGUF loaders are the main event, and the Qwen3-TTS nodes are one of several optional families bolted onto it under 🤖 CCTech/Qwen TTS.
Where people get burned
The only real trap is the one above: assuming the bank does something. If you're porting a multi-role workflow from elsewhere and it expects a role-bank consumer, the missing piece isn't this node - it's the node that reads it. And if a slot seems to be ignored, check the name field first; a blank name kills that entry even with a prompt wired in, which is easy to do when you clear a name to "clean up" a canvas.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| role_name_1opt | STRING | Role1 | — |
| prompt_1opt | VOICE_CLONE_PROMPT | — | |
| role_name_2opt | STRING | Role2 | — |
| prompt_2opt | VOICE_CLONE_PROMPT | — | |
| role_name_3opt | STRING | Role3 | — |
| prompt_3opt | VOICE_CLONE_PROMPT | — | |
| role_name_4opt | STRING | Role4 | — |
| prompt_4opt | VOICE_CLONE_PROMPT | — | |
| role_name_5opt | STRING | Role5 | — |
| prompt_5opt | VOICE_CLONE_PROMPT | — | |
| role_name_6opt | STRING | Role6 | — |
| prompt_6opt | VOICE_CLONE_PROMPT | — | |
| role_name_7opt | STRING | Role7 | — |
| prompt_7opt | VOICE_CLONE_PROMPT | — | |
| role_name_8opt | STRING | Role8 | — |
| prompt_8opt | VOICE_CLONE_PROMPT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| role_bank | QWEN3_ROLE_BANK | — |