Mikey Sampler
SDXL's base-refiner-upscale pipeline as one node
- base_model
- refiner_model
- samples
- vae
- positive_cond_base
- negative_cond_base
- positive_cond_refiner
- negative_cond_refiner
- LATENT
SDXL shipped with a two-stage design - a base model and a separate refiner model meant to polish fine detail like skin texture in a second pass - and the community mostly shrugged and stopped using the refiner once fine-tuned checkpoints got good on their own. Mikey Sampler is one of the few nodes that still takes that original design seriously, and then goes further: base, then refiner, then an upscale-with-model pass, then a final base pass to clean up the larger image. Four stages, one node, one wire in and one wire out.
How it works
It runs your latent through the base model with your base conditioning, hands the result to the refiner model with its own conditioning, upscales the refined image using a neural upscale model, then runs it through the base model one more time at the larger size to add detail without smearing everything. That last step is where the node's one genuinely clever bit lives: it has a built-in image-complexity check that limits how many steps run on that final base pass, specifically to stop a large, simple area (faces, plain backgrounds) from getting over-cooked into a scrambled mess - the exact failure mode you'd expect from just cranking steps on a big image blindly.
The inputs and outputs that matter
base_modelandrefiner_model- you need both. If your checkpoint doesn't ship a refiner (and most modern SDXL fine-tunes don't - the community abandoned that half of SDXL's design early on), this node isn't for you; use the pack's Mikey Sampler Base Only instead, which drops the refiner requirement entirely.samples,vae, and four CONDITIONING inputs -positive_cond_base,negative_cond_base,positive_cond_refiner,negative_cond_refiner- feeding the two sampling stages separately.model_name- the neural upscale model for the middle stage. This is a real ESRGAN-style checkpoint (not a resize algorithm), pulled from whatever's sitting in yourupscale_modelsfolder.seed- drives both sampler passes.upscale_by(default 1) - how much bigger the final image gets before the last base pass runs. 1 keeps the original size; 2 doubles it.hires_strength(default 1, range 0–2) - how aggressively that final base pass adds detail. 1 is the sweet spot the author found for avoiding scrambled faces in testing; dial it down if you're still seeing artifacts, up if you want more added detail and can tolerate the risk.
Output is a single LATENT - decode it with your VAE as usual.
How to install it
Mikey Sampler is part of the wider Mikey Nodes pack. Via ComfyUI Manager, search "Mikey Nodes" and install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/bash-j/mikey_nodes
then restart. You'll also need the upscale model itself sitting in ComfyUI/models/upscale_models - grab one from OpenModelDB. The author's own recommendation is lollipop for a balanced result that isn't over-sharpened; if you want a crisper, more obviously "upscaled" look, NMKD Superscale or 4x-UltraSharp are the other community favorites for this slot.
Common issues & troubleshooting
Empty model_name dropdown. The upscale model list is populated dynamically from ComfyUI/models/upscale_models - if that folder is empty, the widget has nothing to show. Download a model into it and restart.
No refiner for your checkpoint. This is the most common reason people bounce off this node specifically: they grab a modern SDXL fine-tune, discover it never shipped a matching refiner, and the node has nowhere to plug one in that makes sense. That's not a bug - it's a real gap between what this node assumes and how most current checkpoints are built. Base Only is the fix.
Faces or plain backgrounds coming out scrambled at the final size. Turn hires_strength down before doing anything else - that's specifically the failure mode the built-in complexity check is trying to prevent, and the author's tested sweet spot is 1, not the max of 2.
Wired up a non-SDXL model. This node's whole design - the base/refiner split, the resolution expectations - assumes SDXL. Feeding it a Flux or SD 1.5 checkpoint isn't going to behave the way the README describes.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| base_model | MODEL | — | |
| refiner_model | MODEL | — | |
| samples | LATENT | — | |
| vae | VAE | — | |
| positive_cond_base | CONDITIONING | — | |
| negative_cond_base | CONDITIONING | — | |
| positive_cond_refiner | CONDITIONING | — | |
| negative_cond_refiner | CONDITIONING | — | |
| model_name | COMBO | 0 options: | |
| seed | INT | 00–18446744073709550000 | — |
| upscale_by | FLOAT | 1.00–10 | — |
| hires_strength | FLOAT | 1.00–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |