ComfyUI Node

PlusMinusTextClip

PlusMinusTextClip Is CLIPTextEncode Without the Clutter

By shobhitic·Created 2 years ago·Updated 2 years ago· 3
PlusMinusTextClip
  • clip
  • Positive Prompt
  • Negative Prompt
positive
negative

Your first ComfyUI workflow is always the same shape: a checkpoint, a CLIP Text Encode (Positive Prompt), a CLIP Text Encode (Negative Prompt), a KSampler, a VAE decode. Two nearly identical text boxes sitting side by side, each with its own wire down to the sampler. PlusMinusTextClip just collapses those two nodes into one. Same encoding, same outputs, one fewer box on the canvas and one less pair of wires to route around. If you've ever looked at that default graph and thought "this is two nodes doing the same job," this is the pack that agrees with you.

The name tells you exactly what you get: a CLIP input, a positive text box, a negative text box, and two CONDITIONING outputs named "Positive Prompt" and "Negative Prompt" that plug straight into the KSampler's positive and negative sockets. It's category "conditioning," it ships in a one-file pack, and there is nothing else to it. This is a convenience node, not a feature node - nobody is building a career on it, and you won't find it in "must-install" lists. You'll grab it because it tidies up the graphs you run fifty times a day.

How it actually works

Peek inside node.py and there's no magic - that's the point. The encode() method runs the same two calls the built-in CLIPTextEncode runs:

tokens = clip.tokenize(text)
cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True)
return ([cond, {"pooled_output": pooled}],)

Just done twice, once per prompt, and both conditionings come back in the standard format samplers expect. The author's own dynamicPrompts: True flag on both text inputs means the {option one|option two} syntax works here just like it does in the core node. There are no weights, no preprocessors, no extra model files - it encodes your text with whatever CLIP you feed it, so results are bit-for-bit identical to using the stock nodes. Your positive and negative conditioning go through the exact same tokenizer and encoder; you're only changing the layout, never the math.

One consequence worth knowing: it always encodes both. You can't bypass the negative prompt the way you can by deleting a node, and if you're building a workflow that feeds a different negative to a second pass, you'll still want separate nodes for that. For the standard single-sample case, none of that matters.

Wiring it up

  • clip - the CLIP output from your checkpoint loader (or a CLIPLoader), same as the stock node.
  • positive / negative - multiline text, prompt syntax fully intact: embeddings, (word:1.2) weights on SDXL-lineage models, BREAK, all of it.
  • Outputs - "Positive Prompt" → sampler's positive, "Negative Prompt" → sampler's negative.

Nothing else needs configuring. If you're on a modern 2026 model whose text encoder is an LLM, remember the big caveat that applies to all text nodes: there's no 77-token boundary and the negative prompt only does work when CFG is above 1. That's a property of the pipeline, not this node.

Installing it

ComfyUI Manager is the easy path - search "PlusMinusTextClip" and install. Manually, it's the usual dance:

cd ComfyUI/custom_nodes
git clone https://github.com/shobhitic/ComfyUI-PlusMinusTextClip

Then restart ComfyUI and add the node via the double-click search. There is no requirements.txt, no model to download, nothing heavy - the whole pack is one Python file calling ComfyUI's own CLIP API, so install failures basically don't happen here.

Troubleshooting

The realistic failure modes are the boring ones. If the node doesn't appear after installing, you didn't restart - restart. If you load a shared workflow and it says PlusMinusTextClip is missing, this is the pack you need to install; it shows up in Manager's node list, unlike some more obscure utility packs. And if the CLIP socket is glowing red, you forgot to wire a checkpoint's CLIP output in - that's on the workflow, not the node.

A utility this thin is easy to underestimate. But "two fewer wires and one less box on every single workflow" is a quality-of-life win you feel constantly, and it costs you nothing to run.

Categoryconditioning

Inputs (3)

NameTypeDefaultDescription
clipCLIP
positiveSTRING
negativeSTRING

Outputs (2)

NameTypeDescription
Positive PromptCONDITIONING
Negative PromptCONDITIONING