Producted String
The pack's one-click way to turn list explosion into a text block
- list_a
- list_b
- list_c
- list_d
- list_e
- list_f
- STRING
- list
If TextListProduct is the pack's engine, ProductedString is the friendly face. The author's README says it plainly: "for general use, this node should work well" - the Japanese version is blunter, something like "just use this one and you can't go wrong." It's the node the author themselves reaches for, and once you see what it skips, you'll understand why.
The difference from the base node is output format and list count. Where TextListProduct takes two lists and returns one LIST, ProductedString takes up to six lists (list_a through list_f) and returns a single multiline STRING - one line per combination. Same cartesian product underneath, same separator and max_results controls, but the result is a ready-made text block you can drop into a Save Text File node or wherever a multiline string is expected.
The inputs that matter
- separator - joins the fragments within each line. Default
", ". - newline_char - joins the lines together. Default
"\n"; change it if your downstream consumer wants something else. - max_results - caps the number of lines produced.
0means unlimited.
The six list inputs are optional and only connected ones are used. Leave list_c through list_f unplugged and they're simply skipped - no error, no padding. That's genuinely handy when you have a workflow where the fourth and fifth factors come and go. The output is a single STRING with one combined prompt per line.
Where people get burned
- Same
forceInputrule as the rest of the pack. The list sockets only accept LIST-typed outputs; build lists first with the pack's MultilineStringToList / StringsToList or WAS Node Suite. max_results = 0means unlimited, not "no results" - the pack-wide gotcha.- ProductedString has no way to ask for the standalone entries. If you want
1girlalone as well as1girl, beach, the WithSingle nodes are the shorthands for that, or you add""to a list yourself - the empty-string filtering will do the rest.
Install
ComfyUI Manager → Install Custom Nodes → search "Comfy UI Text List Product", or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/opvelll/ComfyUI_TextListProduct
Restart ComfyUI. Nothing else to install - pure stdlib Python, no models, no extra pip packages.
The workflow this unlocks
The classic use is straight out of the README: expression × pose × camera-work lists in, a text file of every combined prompt out. The README's own example - [1girl, 1boy] × [blonde_hair, crown] × [beach, futuristic City] - becomes an 8-line (2×2×2) multiline string, then feeds through WAS Node Suite's "Text Load Line From File" or Comfyroll's CR Prompt List into a batch generator. You write three short lists and get eight distinct prompts out. Compared to hand-writing prompt variants, or to the random-pick wildcard trick, this is the deterministic version: every combination exists as a line you can see, save, and batch.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| separator | STRING | , | — |
| max_results | INT | 0 | — |
| newline_char | STRING | — | |
| list_aopt | LIST | — | |
| list_bopt | LIST | — | |
| list_copt | LIST | — | |
| list_dopt | LIST | — | |
| list_eopt | LIST | — | |
| list_fopt | LIST | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |
| list | LIST | — |