weightMultiText
The weighted prompt combiner that grows to 20 blocks
- text
weightMultiText is weight3Text with the training wheels off: instead of exactly three fixed blocks, you get a dynamic count - up to 20 - and every block gets its own emphasis slider. Same mechanism, same (text:weight) wrapping, just scaled up and made configurable. If your prompt has more than three moving parts and you're tired of hand-editing weight syntax, this is the node.
How it works
The schema holds a hidden text_count (1–20, default 1) plus up to 20 pairs: text_N (multiline) and weight_N (float, 0–1.95, step 0.05, default 1). As with multiText, a bundled JS extension hides the count widget, shows or hides the blocks to match, and patches graphToPrompt so the dynamically-created widgets' values are actually saved into the workflow file. Without that patch, the blocks beyond text_1 would vanish when you saved and reloaded - worth knowing if you ever hand-edit a workflow JSON and wonder where the values went.
At runtime each block goes through the same apply_weight rule as weight3Text: weight 1 → text passes through unwrapped; anything else → wrapped as (text:1.35); empty text or weight 0 → skipped. The survivors join with ", " into one string output. Dropping a block's weight to 0 is a clean way to disable it without deleting the text.
Inputs that matter:
- text_1 … text_20 - multiline blocks.
- weight_1 … weight_20 - per-block emphasis, 0–1.95.
- text - the output, comma-joined and wrapped.
Two caveats worth remembering
- Only the first two slots convert to inputs. The README says it plainly: "Slots after the 2nd cannot be converted to inputs." So you can wire another node's output into
text_1(andtext_2), but blocks 3+ are widget-only. If your fragments mostly come from other nodes, reach for multiTextConcat instead and keep the weighting for the parts you type. - The emphasis is CLIP-only.
(text:weight)is parsed by CLIP-era text encoders - SD 1.5, SDXL, Pony, Illustrious. On LLM-encoded models (Anima, Chroma, and friends) it's not a control signal; it's fed to the encoder as literal punctuation, which actively hurts. Weighted combining is a CLIP-model tool, and the prompt-engineering knowledge base is clear that nothing about it transfers to the LLM encoders. Use this node on CLIP models and write plain prose elsewhere.
vs. the siblings
weightMultiText is the flexible version of weight3Text - same wrap-and-join logic, dynamic count. Compared to plain multiText (no weights), it's the choice when emphasis is actually part of your prompt strategy. If you mostly use it for the sliders' A/B testing and never go past three blocks, you might as well save a click and use weight3Text.
Installation
No dependencies, no model downloads - it's pure text logic plus a JS file. ComfyUI Manager → search ComfyUI-Text-Utils-sp → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/sp8999/ComfyUI-Text-Utils-sp.git
It lands in the text_utils_sp category. README caveat applies here more than anywhere: it's tuned for the Nodes 2.0 frontend, and on the older v1 renderer the dynamic widgets work but can render at the wrong size.
Inputs (41)
| Name | Type | Default | Description |
|---|---|---|---|
| text_count | INT | 11–20 | — |
| text_1 | STRING | — | |
| weight_1 | FLOAT | 1.000–1.95 | — |
| text_2opt | STRING | — | |
| weight_2opt | FLOAT | 1.000–1.95 | — |
| text_3opt | STRING | — | |
| weight_3opt | FLOAT | 1.000–1.95 | — |
| text_4opt | STRING | — | |
| weight_4opt | FLOAT | 1.000–1.95 | — |
| text_5opt | STRING | — | |
| weight_5opt | FLOAT | 1.000–1.95 | — |
| text_6opt | STRING | — | |
| weight_6opt | FLOAT | 1.000–1.95 | — |
| text_7opt | STRING | — | |
| weight_7opt | FLOAT | 1.000–1.95 | — |
| text_8opt | STRING | — | |
| weight_8opt | FLOAT | 1.000–1.95 | — |
| text_9opt | STRING | — | |
| weight_9opt | FLOAT | 1.000–1.95 | — |
| text_10opt | STRING | — | |
| weight_10opt | FLOAT | 1.000–1.95 | — |
| text_11opt | STRING | — | |
| weight_11opt | FLOAT | 1.000–1.95 | — |
| text_12opt | STRING | — | |
| weight_12opt | FLOAT | 1.000–1.95 | — |
| text_13opt | STRING | — | |
| weight_13opt | FLOAT | 1.000–1.95 | — |
| text_14opt | STRING | — | |
| weight_14opt | FLOAT | 1.000–1.95 | — |
| text_15opt | STRING | — | |
| weight_15opt | FLOAT | 1.000–1.95 | — |
| text_16opt | STRING | — | |
| weight_16opt | FLOAT | 1.000–1.95 | — |
| text_17opt | STRING | — | |
| weight_17opt | FLOAT | 1.000–1.95 | — |
| text_18opt | STRING | — | |
| weight_18opt | FLOAT | 1.000–1.95 | — |
| text_19opt | STRING | — | |
| weight_19opt | FLOAT | 1.000–1.95 | — |
| text_20opt | STRING | — | |
| weight_20opt | FLOAT | 1.000–1.95 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |