Nodes/ComfyUI-Drawer/๐Ÿ“ Concat (Drawer)
ComfyUI Node

๐Ÿ“ Concat (Drawer)

The 64-input text joiner that finally drops the empty slots

By Kuroi961ยทCreated 5 months agoยทUpdated about a month agoยท 5
๐Ÿ“ Concat (Drawer)
    • STRING
    โ—„delimiter, โ–บ
    โ—„skip_emptytrueโ–บ
    โ—„string_1โ€”โ–บ
    โ—„string_2โ€”โ–บ
    โ—„string_3โ€”โ–บ
    โ—„string_4โ€”โ–บ
    โ—„string_5โ€”โ–บ
    โ—„string_6โ€”โ–บ
    โ—„string_7โ€”โ–บ
    โ—„string_8โ€”โ–บ
    โ—„string_9โ€”โ–บ
    โ—„string_10โ€”โ–บ
    โ—„string_11โ€”โ–บ
    โ—„string_12โ€”โ–บ
    โ—„string_13โ€”โ–บ
    โ—„string_14โ€”โ–บ
    โ—„string_15โ€”โ–บ
    โ—„string_16โ€”โ–บ
    โ—„string_17โ€”โ–บ
    โ—„string_18โ€”โ–บ
    โ—„string_19โ€”โ–บ
    โ—„string_20โ€”โ–บ
    โ—„string_21โ€”โ–บ
    โ—„string_22โ€”โ–บ
    โ—„string_23โ€”โ–บ
    โ—„string_24โ€”โ–บ
    โ—„string_25โ€”โ–บ
    โ—„string_26โ€”โ–บ
    โ—„string_27โ€”โ–บ
    โ—„string_28โ€”โ–บ
    โ—„string_29โ€”โ–บ
    โ—„string_30โ€”โ–บ
    โ—„string_31โ€”โ–บ
    โ—„string_32โ€”โ–บ
    โ—„string_33โ€”โ–บ
    โ—„string_34โ€”โ–บ
    โ—„string_35โ€”โ–บ
    โ—„string_36โ€”โ–บ
    โ—„string_37โ€”โ–บ
    โ—„string_38โ€”โ–บ
    โ—„string_39โ€”โ–บ
    โ—„string_40โ€”โ–บ
    โ—„string_41โ€”โ–บ
    โ—„string_42โ€”โ–บ
    โ—„string_43โ€”โ–บ
    โ—„string_44โ€”โ–บ
    โ—„string_45โ€”โ–บ
    โ—„string_46โ€”โ–บ
    โ—„string_47โ€”โ–บ
    โ—„string_48โ€”โ–บ
    โ—„string_49โ€”โ–บ
    โ—„string_50โ€”โ–บ
    โ—„string_51โ€”โ–บ
    โ—„string_52โ€”โ–บ
    โ—„string_53โ€”โ–บ
    โ—„string_54โ€”โ–บ
    โ—„string_55โ€”โ–บ
    โ—„string_56โ€”โ–บ
    โ—„string_57โ€”โ–บ
    โ—„string_58โ€”โ–บ
    โ—„string_59โ€”โ–บ
    โ—„string_60โ€”โ–บ
    โ—„string_61โ€”โ–บ
    โ—„string_62โ€”โ–บ
    โ—„string_63โ€”โ–บ
    โ—„string_64โ€”โ–บ

    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, , b problem 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.

    CategoryDrawer

    Inputs (66)

    NameTypeDefaultDescription
    delimiterSTRING, โ€”
    skip_emptyBOOLEANtrueโ€”
    string_1optSTRINGโ€”
    string_2optSTRINGโ€”
    string_3optSTRINGโ€”
    string_4optSTRINGโ€”
    string_5optSTRINGโ€”
    string_6optSTRINGโ€”
    string_7optSTRINGโ€”
    string_8optSTRINGโ€”
    string_9optSTRINGโ€”
    string_10optSTRINGโ€”
    string_11optSTRINGโ€”
    string_12optSTRINGโ€”
    string_13optSTRINGโ€”
    string_14optSTRINGโ€”
    string_15optSTRINGโ€”
    string_16optSTRINGโ€”
    string_17optSTRINGโ€”
    string_18optSTRINGโ€”
    string_19optSTRINGโ€”
    string_20optSTRINGโ€”
    string_21optSTRINGโ€”
    string_22optSTRINGโ€”
    string_23optSTRINGโ€”
    string_24optSTRINGโ€”
    string_25optSTRINGโ€”
    string_26optSTRINGโ€”
    string_27optSTRINGโ€”
    string_28optSTRINGโ€”
    string_29optSTRINGโ€”
    string_30optSTRINGโ€”
    string_31optSTRINGโ€”
    string_32optSTRINGโ€”
    string_33optSTRINGโ€”
    string_34optSTRINGโ€”
    string_35optSTRINGโ€”
    string_36optSTRINGโ€”
    string_37optSTRINGโ€”
    string_38optSTRINGโ€”
    string_39optSTRINGโ€”
    string_40optSTRINGโ€”
    string_41optSTRINGโ€”
    string_42optSTRINGโ€”
    string_43optSTRINGโ€”
    string_44optSTRINGโ€”
    string_45optSTRINGโ€”
    string_46optSTRINGโ€”
    string_47optSTRINGโ€”
    string_48optSTRINGโ€”
    string_49optSTRINGโ€”
    string_50optSTRINGโ€”
    string_51optSTRINGโ€”
    string_52optSTRINGโ€”
    string_53optSTRINGโ€”
    string_54optSTRINGโ€”
    string_55optSTRINGโ€”
    string_56optSTRINGโ€”
    string_57optSTRINGโ€”
    string_58optSTRINGโ€”
    string_59optSTRINGโ€”
    string_60optSTRINGโ€”
    string_61optSTRINGโ€”
    string_62optSTRINGโ€”
    string_63optSTRINGโ€”
    string_64optSTRINGโ€”

    Outputs (1)

    NameTypeDescription
    STRINGSTRINGโ€”