๐ Concat (Drawer)
The 64-input text joiner that finally drops the empty slots
- STRING
ComfyUI's stock 2-input string Concatenate has one infuriating habit: leave an input unconnected and it joins "a, , b" - a dangling delimiter in the middle of your prompt. DrawerConcat is built to kill that exact bug. It takes up to 64 string inputs, joins them with a delimiter you pick, and by default just drops the ones that are empty. It sounds boring. It is quietly the kind of node you miss the moment it's not in a workflow you downloaded.
It ships in ComfyUI-Drawer, Kuroi's mobile-friendly drawer platform. If you've never touched that pack, the one-paragraph version: it adds a bottom drawer that turns a selection of your nodes into touch-friendly controls. Put a ๐ in a node's title and its widgets show up in the "Deck" - which is exactly how DrawerConcat works best. Build a prompt from parts, mark it, and edit the parts from the drawer without opening the graph.
What you actually set
Two settings do the real work:
- delimiter - default
", ", the glue between parts.", "reads naturally as prose;"\n"or a space is often the right call for a tag list. - skip_empty - default on. An input whose value is blank (whitespace counts as blank) is silently left out of the join. Off, and you get the old
a, , bproblem back, so leave it on.
Then there are the inputs themselves: string_1 through string_64, all optional, all multiline. You can type into them or wire them from other nodes - they're declared forceInput, so feeding them from a text node or another DrawerConcat is the normal move. Unused slots are just ignored. One output, a single STRING, which you wire into a CLIP Text Encode, a prompt-merge node, or anywhere else text goes.
Installing it
DrawerConcat comes with the whole pack, so install ComfyUI-Drawer once and you get all nine of its nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/Kuroi961/ComfyUI-Drawer.git
pip install -r ComfyUI-Drawer/requirements.txt
Or search for ComfyUI-Drawer in ComfyUI Manager's install menu - that's the easier route. requirements.txt is a single package (Send2Trash), there are zero model downloads, and no ffmpeg is needed for these nodes (the pack only uses it for video thumbnails in its Gallery).
Gotchas
skip_empty only catches empties - it won't trim partial text for you, so keep your pieces tidy. And one thing to know if you're also using Drawer's prompt features: wildcards (__name__) and comment stripping are applied by the pack at queue time, not inside this node. DrawerConcat just joins raw text; the // comments and __tags__ you type into its inputs get processed when the prompt actually runs, like any other string widget.
For anything that turns a handful of prompt fragments into one coherent string, this is the node I'd reach for - mainly because it's one node instead of a chain of five.
Inputs (66)
| Name | Type | Default | Description |
|---|---|---|---|
| delimiter | STRING | , | โ |
| skip_empty | BOOLEAN | true | โ |
| string_1opt | STRING | โ | |
| string_2opt | STRING | โ | |
| string_3opt | STRING | โ | |
| string_4opt | STRING | โ | |
| string_5opt | STRING | โ | |
| string_6opt | STRING | โ | |
| string_7opt | STRING | โ | |
| string_8opt | STRING | โ | |
| string_9opt | STRING | โ | |
| string_10opt | STRING | โ | |
| string_11opt | STRING | โ | |
| string_12opt | STRING | โ | |
| string_13opt | STRING | โ | |
| string_14opt | STRING | โ | |
| string_15opt | STRING | โ | |
| string_16opt | STRING | โ | |
| string_17opt | STRING | โ | |
| string_18opt | STRING | โ | |
| string_19opt | STRING | โ | |
| string_20opt | STRING | โ | |
| string_21opt | STRING | โ | |
| string_22opt | STRING | โ | |
| string_23opt | STRING | โ | |
| string_24opt | STRING | โ | |
| string_25opt | STRING | โ | |
| string_26opt | STRING | โ | |
| string_27opt | STRING | โ | |
| string_28opt | STRING | โ | |
| string_29opt | STRING | โ | |
| string_30opt | STRING | โ | |
| string_31opt | STRING | โ | |
| string_32opt | STRING | โ | |
| string_33opt | STRING | โ | |
| string_34opt | STRING | โ | |
| string_35opt | STRING | โ | |
| string_36opt | STRING | โ | |
| string_37opt | STRING | โ | |
| string_38opt | STRING | โ | |
| string_39opt | STRING | โ | |
| string_40opt | STRING | โ | |
| string_41opt | STRING | โ | |
| string_42opt | STRING | โ | |
| string_43opt | STRING | โ | |
| string_44opt | STRING | โ | |
| string_45opt | STRING | โ | |
| string_46opt | STRING | โ | |
| string_47opt | STRING | โ | |
| string_48opt | STRING | โ | |
| string_49opt | STRING | โ | |
| string_50opt | STRING | โ | |
| string_51opt | STRING | โ | |
| string_52opt | STRING | โ | |
| string_53opt | STRING | โ | |
| string_54opt | STRING | โ | |
| string_55opt | STRING | โ | |
| string_56opt | STRING | โ | |
| string_57opt | STRING | โ | |
| string_58opt | STRING | โ | |
| string_59opt | STRING | โ | |
| string_60opt | STRING | โ | |
| string_61opt | STRING | โ | |
| string_62opt | STRING | โ | |
| string_63opt | STRING | โ | |
| string_64opt | STRING | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | โ |