Flux Highres Fix Scaler
ComfyUI Node Guide
- image
- vae
- mask
- LATENT
Hi-res fix is one of those techniques everyone tells you to use and almost nobody explains cleanly: generate at a comfortable native resolution, upscale the pixels, feed that back into the model for a second pass at low denoise so it adds real detail instead of just stretching what's there. Doing it by hand in ComfyUI is a small chain of nodes - an image upscale, a VAE encode, some noise mixing. This node collapses that chain into one, and it's the one the README calls "HighResFix Apply: all-in-one node for high-resolution generation."
Why bother instead of generating big in the first place? Flux is comfortable up to roughly 2 megapixels natively; push much past that in a single pass and you're spending a lot more compute per step without a guaranteed quality win. The two-stage approach - generate small, then scale up with a second refining pass - is the standard workaround, and it's why this node's target_resolution options start at 4MP and go to 7MP: it's meant to be the second stage, not your first.
The inputs that matter:
imageandvae- feed it the decoded output of your first pass, plus the VAE your pipeline is already using (Flux'sae.safetensors, most likely).target_resolution- 4MP through 7MP. Pick based on how big you actually want the final image, not just "bigger is better" - bigger targets cost more time on the secondKSamplerpass too.upscale_method- the classic interpolation choices (lanczos,bicubic,bilinear,area,nearest-exact). Lanczos or bicubic for photographic work;nearest-exactonly if you specifically want to preserve hard pixel edges.noise_scale(default 0.4) - how much noise gets mixed back into the re-encoded latent before your second sampling pass. This is functionally your hires-fix denoise strength. Classic hires-fix wisdom applies here too: too high and you're regenerating the composition instead of refining it - keep it modest and nudge up only if the result still looks soft.blend_opacity(default 20) - how strongly the refined pass gets blended back in. There's no author's note spelling out the exact math beyond the field name, so treat it as a dial to experiment with rather than a fixed rule - start at the default and adjust by feel.mask(optional) - restrict the whole effect to part of the image instead of the full frame, if you only want detail added to a specific region.
It outputs a single LATENT, ready to go straight into a second KSampler at a low denoise value, then a VAEDecode for your final image.
Installing it. Search "ComfyUI-42lux" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/42lux/ComfyUI-42lux
Restart ComfyUI afterward. It's part of the same lightweight pack as 42lux's other Flux nodes - no separate model downloads, no heavy dependencies to fight with.
Where people get tripped up:
- The output changed the whole composition, not just detail - that's
noise_scaleset too aggressively. Pull it back toward the default and give it another pass. - The result looks flat or soft instead of sharper - either
upscale_methodis too soft for your source, ornoise_scaleis too low to let the second pass do anything real. - You wired a VAE that doesn't match what encoded your original image - a mismatched VAE is a generic ComfyUI failure mode, not specific to this node, but it'll wreck your output here just the same.
- No mask wired in means the entire frame gets refined, which is what you want most of the time - just don't be surprised if a targeted-detail workflow needs that optional input explicitly connected.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| vae | VAE | — | |
| target_resolution | COMBO | 4 options: 4MP, 5MP, 6MP, 7MP | |
| upscale_method | COMBO | 5 options: nearest-exact, bilinear, area, bicubic, lanczos | |
| noise_scale | FLOAT | 0.400–100 | — |
| blend_opacity | INT | 200–100 | — |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |