CLIP +/- w/Text Unified (WLSH)
One prompt node that works on SD1.5 and SDXL
- clip
- positive
- negative
- positive_text
- negative_text
If you jump between SD1.5 and SDXL checkpoints a lot, you know the tax: SD1.5 wants a single CLIP text encode, SDXL wants the six-field, dual-encoder version. Swap models, swap node graphs. This node is the pack's answer - one prompt box with a conditioner dropdown that flips between "SD1.5" and "SDXL" behavior, so the same little cluster of nodes survives a checkpoint swap.
How it pulls that off. Behind the toggle it's really just choosing which encode path to run, and to make that fit into one clean node it deliberately gives up some of SDXL's flexibility. The README is upfront about the trade: it assumes your G and L prompt text are identical (rather than letting you split them), assumes zero crop offset, and hardcodes the target size to double whatever width/height you feed it - quirks of this specific node's implementation, not general SDXL behavior. If you leave width/height unset, it falls back to 1024x1024. That's a fine default for most SDXL work and irrelevant for SD1.5, which doesn't use these fields at all.
Inputs: clip and conditioner (pick SD1.5 or SDXL) are required alongside positive and negative, your actual prompt text - one string each, no G/L split to think about. width/height are optional and only matter in SDXL mode. The one thing to actually remember: flipping conditioner doesn't change what CLIP you're feeding it. The README says it plainly - "just make sure to change your inputs" - meaning if you switch the toggle to SDXL but you're still piping in CLIP from an SD1.5 checkpoint, you'll get nonsense. The node trusts you to keep the toggle and the model in sync; it doesn't check for you.
Outputs: positive and negative CONDITIONING go to your KSampler as usual. But it also gives you positive_text and negative_text - plain strings that mirror exactly what got encoded. That's genuinely useful if anything upstream is manipulating your prompt text (this pack's own Simple Pattern Replace or Simple String Combine, for instance) - instead of routing the raw prompt to your save/metadata nodes and hoping it matches what got encoded, you route these outputs and know it does.
Installing it
Through ComfyUI Manager: search "wlsh_nodes" or "WLSH Nodes", install, restart. Or manually: cd ComfyUI/custom_nodes && git clone https://github.com/wallish77/wlsh_nodes, restart ComfyUI. Nothing else to fetch - no checkpoints, no extra pip packages beyond what a normal ComfyUI install already has.
Common issues
Beyond the CLIP/toggle mismatch above, the main thing to keep in mind is that this node is a simplification by design, not a bug. If you're chasing precise per-encoder control over G and L text, or you actually need a non-zero crop offset or a target size that isn't exactly double your width/height, this node can't do it - reach for CLIP Positive-Negative XL (WLSH) (the full SDXL variant in this same pack) instead, which exposes every one of those fields separately. Use the Unified node when you want convenience and are switching architectures often; use the XL-specific node when you're staying in SDXL and want full control.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | STRING | — | |
| negative | STRING | — | |
| clip | CLIP | — | |
| conditioner | COMBO | 2 options: SD1.5, SDXL | |
| widthopt | INT | 10240–8192 | — |
| heightopt | INT | 10240–8192 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| positive_text | STRING | — |
| negative_text | STRING | — |