String Dual
One box for positive, one for negative β the pair that never separates
- txt_pos
- txt_neg
If you've ever had a workflow where the positive and negative prompts live in two separate nodes that drift apart - you tweak one, forget the other, and suddenly you're generating "masterpiece quality" with the negative prompt of something else entirely - String Dual is the cure. It's two multiline text boxes in one node, with two STRING outputs, so your prompt pair stays physically glued together on the canvas. When you find yourself editing the right box, the other one is right there.
It's gloriously simple and honestly one of those quality-of-life nodes that's easy to underestimate. The schema is two required multiline strings, txt_pos and txt_neg, and it just strips whitespace and hands both back out - txt_pos and txt_neg outputs. No cleverness, no processing, and that's the appeal: it's a named, durable home for the two texts that always travel together, and the outputs are named the same way you think about them.
How it works
Two boxes in, two strings out, whitespace-trimmed. Wire txt_pos into the positive CLIP Text Encode and txt_neg into the negative, and the pair lives in one place from then on. It composes naturally with the rest of the Eclipse string family: feed it from Smart Prompt or a String primitive, or chain it through String DeDuplicate if you're combining prompts from multiple sources.
Where it helps beyond tidy organization: it's a great spot to keep your prompt pair visible and versionable in a shared or template workflow. Newer model families have moved past the token-bag prompt era, but on SDXL-lineage checkpoints the positive/negative split is still the whole game, and having both boxes staring at you is a genuine workflow improvement over hunting through a graph.
Where it fits
Any image generation workflow where you're hand-writing or hand-editing prompts - which, honestly, is most of them. It's also the natural endpoint for fancier prompt construction: build the positive from Smart Prompt + wildcards, the negative from a fixed block, and meet them here.
Installing it
Ships in ComfyUI_Eclipse, no dependencies:
git clone https://github.com/r-vage/ComfyUI_Eclipse custom_nodes/ComfyUI_Eclipse
Or ComfyUI Manager β search "ComfyUI_Eclipse" β install and restart.
Gotchas
Almost none - this node is just two text boxes. The only things to keep straight: both inputs are required, so you can't leave the negative box completely disconnected (type an empty string instead of unlinking), and the outputs are separate wires, so don't expect a combined or structured output - if you want the pair merged or deduplicated, that's String DeDuplicate's job. And the usual pack note: pre-v4.0.0 RvTools-era node IDs need the migration tool if you're loading old workflows.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| txt_pos | STRING | β | |
| txt_neg | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| txt_pos | STRING | β |
| txt_neg | STRING | β |