Aggregator (20)
The pack's final form, and a caution about scale
- combined_prompt
Aggregator (20) is what the pack looks like when you commit fully: one node with twenty text inputs, combining them into a single prompt. It's the bigger sibling of Aggregator (10), built for the workflow where every block - character, art style, emotion, both poses, four clothing slots, background, camera, all five extras - gets its own selector and everything funnels through here on the way to the CLIP text encode.
Here's the caution, stated plainly: twenty prompt blocks is a lot of prompt. The prompt-engineering evidence keeps pointing the same direction - past a few strong concepts, extra tokens start diluting rather than helping, and on LLM-encoded models there's a real attention cap in the 75–100 effective token range. If you wire twenty full blocks in and the output starts drifting, the aggregator isn't broken; your prompt is. Use the slots, don't use all of them.
How it works
Twenty optional inputs, text_01 through text_20 (STRING, forceInput), one output: combined_prompt (STRING). It joins connected inputs in numeric order with a comma between blocks, skips empty or unconnected pins entirely, and finishes each block with a newline. Same engine as the 10-input version - this is just the 20-lane edition.
Inputs and outputs
- text_01 … text_20 - wire your selectors'
textoutputs here, in the order you want them in the final prompt. - combined_prompt - the assembled STRING. Feed it to your CLIP text encode's positive input (or run it through a PreviewAny/show-text node first to eyeball the result).
Install
ComfyUI Manager → search "Prompt String Selector", or:
cd ComfyUI/custom_nodes
git clone https://github.com/itom0717/ComfyUI-Prompt-String-Selector.git
Restart. No dependencies - the whole pack is the Python standard library, so install is the least of your worries.
Gotchas
Input order is output order - worth repeating because with twenty inputs it's easy to wire text_15 above text_03 and forget. And the empty-pin-skip behavior cuts both ways: it keeps unused blocks out of your prompt, but it also means a selector accidentally left on 01_none contributes nothing. If output starts looking thin, check your no-op blocks. The pack's README even mislabels the 20-node as "input 10" in one table cell - trust the node's actual twenty inputs over the docs.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| text_01opt | STRING | — | |
| text_02opt | STRING | — | |
| text_03opt | STRING | — | |
| text_04opt | STRING | — | |
| text_05opt | STRING | — | |
| text_06opt | STRING | — | |
| text_07opt | STRING | — | |
| text_08opt | STRING | — | |
| text_09opt | STRING | — | |
| text_10opt | STRING | — | |
| text_11opt | STRING | — | |
| text_12opt | STRING | — | |
| text_13opt | STRING | — | |
| text_14opt | STRING | — | |
| text_15opt | STRING | — | |
| text_16opt | STRING | — | |
| text_17opt | STRING | — | |
| text_18opt | STRING | — | |
| text_19opt | STRING | — | |
| text_20opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| combined_prompt | STRING | — |