SDXL Refiner Prompt Encoder (Searge)
Aesthetic-score conditioning for the SDXL refiner
- refiner_clip
- refiner_positive
- refiner_negative
This node encodes your prompt for the SDXL refiner - the second-stage model - including the aesthetic-score conditioning the refiner was trained with. It takes your positive and negative text, the refiner's CLIP, and a couple of "aesthetic score" numbers, and produces the positive/negative conditioning pair the refiner sampler needs. Straightforward enough. Two things you should know before you build around it, though.
First, it lives in the pack's _deprecated_ category. It's kept for backward compatibility with older Searge workflows (the extension stays compatible back to v3.3), not because it's the recommended path forward. Second, and bigger picture: the SDXL refiner it serves is the part of SDXL the community famously abandoned. The refiner was designed as a detail-adding second pass, and once fine-tuned checkpoints matured, people decided the quality gain wasn't worth the extra step. SDXL's own release-thread lore is a commenter saying the refiner "always seemed like an added step that never added much." So this node encodes for a stage most people don't run.
How it works
SDXL conditioning carries an aesthetic score alongside the text - a number the model associates with image quality. This encoder bakes a high score into your positive conditioning and a low one into your negative, which is the refiner's intended way of being steered toward "good" and away from "bad." It also carries the refiner's target resolution.
The inputs and outputs that matter
refiner_clip(CLIP) - the CLIP from your refiner checkpoint. Note it's the refiner's clip, not the base's.pos_r/neg_r(multiline strings) - your positive and negative prompt text for the refiner pass.pos_ascore(default 6) /neg_ascore(default 2.5) - the aesthetic scores. These defaults are the standard SDXL values; there's little reason to change them.refiner_width/refiner_height(default 2048) - the conditioning target resolution.
Outputs are refiner_positive and refiner_negative (both CONDITIONING), which feed the refiner's sampler.
How to install it
Manager: search SeargeSDXL, install, restart. Manual, opencv first:
python -m pip install opencv-python
cd ComfyUI/custom_nodes
git clone https://github.com/SeargeDP/SeargeSDXL.git
Restart ComfyUI. You'll need an SDXL refiner checkpoint (the README links the ~6 GB sd_xl_refiner_1.0_0.9vae.safetensors) for the refiner_clip input to come from anywhere.
Common issues & troubleshooting
"Do I even need the refiner?" Honestly, probably not. Most 2026 SDXL workflows skip it entirely and run a good fine-tuned base checkpoint alone. If you're not deliberately chasing the two-stage pipeline, you can leave this node - and the refiner - out.
Aesthetic scores aren't a quality slider. Cranking pos_ascore to its max doesn't make prettier images; it's a trained conditioning signal, and 6 / 2.5 is the well-behaved default. Extreme values distort.
It's deprecated - prefer the current path. Because this sits in _deprecated_, treat it as legacy. If you genuinely want refiner conditioning, the modern Searge workflow handles it through the data-stream / Magic Box system, and vanilla ComfyUI has its own SDXL refiner encoder. This node is here to keep old workflows loading, not as the way you'd build fresh.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| refiner_clip | CLIP | — | |
| pos_r | STRING | POS_R | — |
| neg_r | STRING | NEG_R | — |
| pos_ascore | FLOAT | 6.000–1000 | — |
| neg_ascore | FLOAT | 2.500–1000 | — |
| refiner_width | INT | 20480–16384 | — |
| refiner_height | INT | 20480–16384 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| refiner_positive | CONDITIONING | — |
| refiner_negative | CONDITIONING | — |