CLIP Text Encode Pro
One extra text box you'll miss once you've used it
- clip
- CONDITIONING
ComfyUI's stock CLIP Text Encode gives you exactly one text box. Want two prompts combined into a single conditioning? You'd normally grab a text-concat utility node, wire it, and then feed the result into an encoder. CLIP Text Encode Pro is the same encoder with that merge baked in: a second, optional text2 input that gets joined to text1 and encoded as one CONDITIONING. That's the whole trick, and it's surprisingly handy.
What it does under the hood
Reading the source, it's dead simple: if text2 is non-empty it's stripped, then the node joins text2 and text1 with a comma and a space, tokenizes the merged string, and runs it through the standard encode_from_tokens_scheduled path. Same encoding, same single CONDITIONING output, just one less node in the graph.
The ordering matters more than it looks. text2 goes first. On tag-based models - SDXL, Illustrious, Pony - earlier tokens get stronger attention, so whichever prompt you put in text2 leads the merged string. If you want your main prompt to lead, keep it in text1 and treat text2 as the add-on, or use the order deliberately.
The inputs that matter
- text1 (STRING, required) - your main prompt. Multiline, and dynamic prompts are enabled on it, so
{blonde|brunette|redhead}style wildcard alternatives work. - clip (CLIP, required) - from your Checkpoint Loader or any CLIP output.
- text2 (STRING, optional) - the second block, prepended when filled.
And the single output:
- CONDITIONING - wire it to your KSampler's positive or negative input exactly like you would the stock encoder's.
Where it fits in PromptCraft
This node exists to service the pack's "plain text" LoRA pipeline, which the README lays out as:
CheckpointLoader → LoraPromptLoader → CLIPTextEncodePro → KSampler
The LoRA Prompt Loader outputs your positive and negative prompts as plain STRINGs. Feed positive_text into text1 here and you get a merged encode with zero extra nodes. It also pairs naturally with any node that emits text - a shared base prompt in text1, a per-batch variation in text2.
Install
Part of ComfyUI-PromptCraft, so:
cd ComfyUI/custom_nodes
git clone https://github.com/moton16/ComfyUI-PromptCraft
or ComfyUI Manager → search ComfyUI-PromptCraft, then restart. No model downloads, no extra dependencies for this node specifically.
Troubleshooting
The one error you're likely to see is straight from the source: "clip input is invalid: None". It means the clip socket isn't connected or your checkpoint has no usable text encoder. Hook a CLIP up and it goes away.
Also know what this node isn't: if you need SDXL's separate pooled-conditioning output, the stock CLIPTextEncodeSDXL is still your node. And like every CLIP encoder, if your checkpoint uses a 2026-era LLM text encoder (Flux 2 Klein, Z-Image and friends), the whole family of CLIP encoders is the wrong tool - those models don't take CLIP conditioning at all. For anything SDXL-lineage, this is a genuinely nice quality-of-life upgrade.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| text1 | STRING | — | |
| clip | CLIP | — | |
| text2opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |