ScarlotSoft Upscaler HiRes Fix
Upscale, then re-diffuse at low denoise — a whole hi-res fix in one node
- model
- positive
- negative
- image
- vae
- divisor_1
- divisor_2
- IMAGE
ScarlotSoft Upscaler HiRes Fix is the suite's finishing move: one node that takes your generated image, upscales it with a real upscale model, then runs a second diffusion pass at low denoising to add detail that the first pass didn't have resolution for. It's the "hi-res fix" pattern from the upscaling doc - generate at native res, upscale, then img2img at low denoise - bundled into a single node so you don't have to wire six core nodes every time.
Here's the mechanism, straight from the source, because it matters for how you use it. The node isn't doing anything exotic - it's calling ComfyUI's own core nodes in sequence: UpscaleModelLoader → ImageUpscaleWithModel → ImageScaleBy → VAEEncodeTiled (512px tiles, 64px overlap) → KSampler at your chosen denoise → VAEDecodeTiled (same tiling). The tiled encode/decode is the interesting choice: it keeps VRAM in check on high resolutions and, with the overlap, avoids the grid artifacts tiling usually produces. You're paying a little extra compute for that safety.
The inputs are the usual sampler stack plus upscale controls:
model,positive,negative,vae- your existing sampler's model and conditioning, wired straight in. Note it takes a decodedimage, not a latent, so it sits after a VAE Decode.upscale_model- picked from yourmodels/upscale_modelsfolder. This is the one external file you need: an ESRGAN-class upscaler like 4x-UltraSharp (general) or 4x-AnimeSharp (anime).upscale_method(lanczos, bicubic, etc.),scale_by(default 1.5).seed,steps(15),cfg(5),sampler_name,scheduler,denoise(0.35) - the second-pass sampler.
The defaults are honestly well-chosen for the pattern. denoise 0.35 sits inside the 0.3–0.5 sweet spot the upscaling doc calls out - high enough to add detail, low enough that the composition doesn't drift. scale_by 1.5 is the sensible first try. steps 15 is plenty for a second pass. It outputs an IMAGE, ready to save or post-process.
Install
Standard for the suite - ComfyUI Manager, search "ScarlotSoft", install, restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/scarlotsoft/ComfyUI_ScarlotSoft
Then the one thing people miss: drop an upscale model in ComfyUI/models/upscale_models/ or the upscale_model dropdown will be empty. 4x-UltraSharp from any CivitAI mirror is the classic drop-in.
The honest take
This node is a convenience wrapper around core nodes - you can build the identical pipeline by hand, and on pure flexibility you might want to (tile size and overlap aren't exposed, they're hardcoded at 512/64). But that's also the point: it collapses a fiddly six-node chain into one clean node with sane defaults. Watch the denoise if your results come back looking like a different image than you started with - that's the sign you pushed it too high. And remember the sequencing rule from the KB: detail at native resolution first, then upscale; this node is the "then."
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| image | IMAGE | — | |
| vae | VAE | — | |
| divisor_1 | SCARLOT_DIVIDER | Upscaler | — |
| upscale_model | COMBO | 0 options: | |
| upscale_method | COMBO | 5 options: nearest-exact, bilinear, area, bicubic, lanczos | |
| scale_by | FLOAT | 1.500.01–8 | — |
| divisor_2 | SCARLOT_DIVIDER | HiRes Fix Sampler | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 151–10000 | — |
| cfg | FLOAT | 5.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.350–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |