Multi Note (Combine All)
Multi Note (Combine All)
- combined_text
If you've ever stared at a 200-word prompt jammed into one CLIP Text Encode box and lost track of which clause does what, this node is the fix. Multi Note (Combine All) turns your prompt into a stack of little labeled blocks - one for subject, one for pose, one for environment, one for style - and stitches them all back into a single string when it's time to generate. It's a prompt editor that lives inside the graph, not a text file on your desktop.
It ships in ComfyUI-M-Nodes by oMo.Studio, a small utility pack whose whole pitch is "manage huge prompts without losing your mind." The name is the promise: combined_text out, ready to feed a CLIP Text Encode.
How it works
The node starts with one block: a toggle (enable_1), a title (title_1), and a multiline text area (text_1). The trick is what happens when you type - the moment you put text in the last block, the node's front-end JS spawns a fresh triplet (toggle, title, text) below it, up to as many as you need. Empty blocks don't pile up; they only appear once you've actually written something in the one before.
On the backend it's dead simple. When you hit Queue, it walks every enable_N/text_N pair, keeps the blocks whose toggle is on and whose text isn't blank, and joins them with ", " into one string. That string is the combined_text output.
The inputs that matter
enable_N- the toggle per block. Off means that block is skipped entirely. Great for A/B-ing a clause without deleting it.title_N- pure organization. It's a label so you can tell "Pose" from "Environment" at a glance; it's not part of the output.text_N- the actual prompt content.
One output: combined_text (STRING). Wire it wherever a prompt string goes.
The master-prompt pattern
The README's own suggested workflow is worth copying:
- Add a Multi Note, make blocks for Subject, Pose, Environment, Style.
- Right-click a Random Prompt Selector (also in this pack) and choose Convert text to input.
- Connect
combined_textto the Selector'stextinput. - Feed the Selector's output to your CLIP Text Encode.
Now your big prompt is both organized and randomized - you can put {red|blue|green} variations inside any block and let the selector shake it up. If you're on SDXL or Flux, a structured prompt like this is also just easier to debug than one wall of text.
Installing it
ComfyUI Manager: search "ComfyUI-M-Nodes" and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/oMoStudio/ComfyUI-M-Nodes
Then restart ComfyUI. There's no requirements.txt and no model to download - this is pure JS plus a small Python node, so it's one of the friendlier installs in the ecosystem. MIT licensed.
Where people get burned
- Commas are the separator, so mind the join. Blocks are combined with
", ". That's fine for prompts, but a block that ends mid-word or a tag list where you don't want a comma between two sections will read awkwardly. - Blank and disabled blocks vanish silently. If every block is toggled off, you get an empty string out, and your CLIP Text Encode will happily encode nothing.
- The dynamic fields are the whole point, and they only exist in the UI. This is why the node reads the graph's widget state rather than a fixed schema - it's the same trick a few other "grows as you type" nodes use, and it means the fields do survive save/reload (that's the pack's headline feature), but it's worth knowing the blocks are front-end generated. On the Nodes 2.0 frontend rewrite, dynamic-widget packs like this are the ones that occasionally render oddly - if a loaded workflow looks off, re-add the node rather than fighting it.
It won't generate anything on its own. But if your prompt workflow has become unreadable, this is the cheapest reorganization you'll find.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| enable_1 | BOOLEAN | true | — |
| title_1 | STRING | Title 1 | — |
| text_1 | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| combined_text | STRING | — |