CLIPTextEncode SDXL Plus (JPS)
Positive and negative SDXL conditioning from one node
- clip
- cond_pos
- cond_neg
SDXL doesn't just take a prompt - it was trained conditioned on resolution information baked right into the embedding: the size the source image was originally at, and the target size you're generating toward. That's why ComfyUI's stock CLIPTextEncodeSDXL node has all those extra width/height/crop fields nobody quite explains, and why plugging a plain SD 1.5-style text encoder into an SDXL checkpoint technically works but leaves quality on the table. This node folds that resolution-conditioning recipe together with both your positive and negative prompt into a single node, instead of needing two separate stock encode nodes side by side.
How it works
You get one clip input, one set of resolution fields, and two text boxes - positive and negative - and out come two separate conditioning outputs. Under the hood it's still doing the same job as the stock SDXL encoder (feeding the model the size and crop information it expects alongside the text embedding), just packaged as one node instead of two mirrored ones.
The inputs that matter
width/height(0–12288, default 1024×1024) - your target generation size. Match this to whatever resolution you're actually generating at; SDXL's trained multi-aspect buckets (1024×1024, 1216×832, 1344×768, and their portrait/landscape rotations) are the safest choices - off-bucket resolutions are a common cause of stretched anatomy.res_factor(1–8, default 4) - same multiplier concept as this pack's other resolution nodes, likely feeding an upscale-target calculation elsewhere in a JPS-built pipeline rather than affecting the encode itself.text_pos/text_neg(multiline, default empty) - your positive and negative prompts, encoded together against the same resolution settings.clip- the CLIP model from your checkpoint loader, same as any text encode node.
Outputs: cond_pos and cond_neg, both CONDITIONING - wire them straight into your KSampler's positive and negative inputs respectively.
Installing it
ComfyUI Manager: search JPS Custom Nodes for ComfyUI. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/JPS-GER/ComfyUI_JPS-Nodes.git
Restart ComfyUI, removing any earlier copy of the pack first. No model downloads for this node itself - it just needs an SDXL checkpoint's CLIP output feeding it, same as any text encoder.
Where people get tripped up
This node is built for SDXL and SDXL-family checkpoints (Illustrious, Pony, and other SDXL finetunes) specifically - the resolution-conditioning fields it's encoding don't mean anything to an SD 1.5 or non-SDXL architecture, so don't expect it to slot cleanly into a workflow built around a different base model. And because it produces both positive and negative conditioning from one node, it's easy to accidentally leave text_neg empty when you meant to write an actual negative prompt - check both fields got filled in if your negative prompt doesn't seem to be doing anything, since an empty string is a perfectly valid (if useless) negative conditioning input and won't throw an error to warn you.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 10240–12288 | — |
| height | INT | 10240–12288 | — |
| res_factor | INT | 41–8 | — |
| text_pos | STRING | — | |
| text_neg | STRING | — | |
| clip | CLIP | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| cond_pos | CONDITIONING | — |
| cond_neg | CONDITIONING | — |