Hires Fix Ultra - All in One
Your whole hires-fix chain in one box, washed-out colors included
- image
- model
- vae
- positive
- negative
- upscale_model
- image
- latent
Your whole hires-fix chain in one box, grayed-out colors included
You know the hires-fix ritual. Generate at native res, then take the image, VAE-encode it, upscale the latent, run a second sampling pass at low denoise, VAE-decode, and - because the second pass quietly drained the saturation out of everything - bolt on a color-match node to claw the original colors back. That's six or seven nodes strung across your graph, and it's exactly the chain Hires Fix Ultra - All in One collapses into a single box. Feed it your low-res image, your checkpoint, VAE, and conditioning, and it runs the whole second pass internally, then hands you a finished hires-fix image on the other side.
Why bother? Because "hires fix" is really two problems glued together. First is the upscale itself - going 1.5–2x above native resolution without repeating texture artifacts (the upscaling essay in our KB calls this the two-pass generation, and 1.5–2x at denoise 0.3–0.5 is the documented sweet spot). Second is the color drift: re-sampling at high denoise is notorious for graying out or fading the image, the same "washed out" failure you get from a mismatched VAE. The node's headline trick, Deep Histogram, is a full histogram match between your upscaled result and the original low-res image, so colors stay 1:1 instead of drifting. There's also Standard (mean/std matching) and None, if you want to see how bad it is without it. A color_fix_strength slider lets you blend the fix in rather than slam it at full.
How it works
Internally it's a VAE Encode → upscale → KSampler → VAE Decode pipeline with a color pass on the tail. The upscale step is where you have a real choice: upscale_method defaults to Model, which means it wants an ESRGAN-style upscaler (Real-ESRGAN, 4x-UltraSharp, that family) plugged into the optional upscale_model input. Or pick one of the six latent methods - Bicubic Antialiased, Bislerp, Area, and friends - which need nothing extra and are the cheap, fast option. Either way the node snaps your result to a multiple of 8 so nothing tiles or blurs at decode time.
Since this is a genuine sampler, you get the whole knob set: steps (default 20), cfg (5), sampler_name (the full 44-sampler list), scheduler (9 options), and seed for reproducibility. The two that actually matter for a beginner are upscale_by (1.5–2x is the zone) and denoise (keep it 0.35–0.5; push past that and you're re-drawing the composition, not refining it). Outputs are image, ready to save or wire on, and latent, in case you'd rather decode yourself or chain another img2img pass.
Installing it
ComfyUI Manager, search ComfyUI-HiresFix-Ultra-AllInOne, install, restart. Or from a terminal:
cd ComfyUI/custom_nodes
git clone https://github.com/ThetaCursed/ComfyUI-HiresFix-Ultra-AllInOne.git
Restart ComfyUI and it'll show up under Image/Upscaling. One thing worth knowing: the README lists no model downloads - the node is a wrapper over stuff ComfyUI already ships. The only file you need to supply yourself is the ESRGAN upscale model if you keep upscale_method on "Model". It's not a huge pack, no heavy Python deps, no VRAM-eating download that sneaks in on install.
Where people get burned
The classic first-run mistake: upscale_method defaults to Model, no upscale_model is connected, and the node errors or silently does nothing sensible. Either drop in an ESRGAN model or switch to a latent method - Bicubic Antialiased is the honest "just make it bigger" default. If you're chasing 4K on a mid-range card and hit OOM, lower tile_size_vae from 1024 toward 512 (the overlap of 64 is fine where it is) - that tiled encode/decode is your OOM insurance. And if the output still looks faded, check that color_fix_type isn't set to None and nudge color_fix_strength up.
The trade-off for this convenience is control. You can't thread a ControlNet Tile pass or a custom scheduler through the middle of it - it's a monolith, and monoliths are opinionated. For the standard "make my good image bigger and keep the colors" case, though, it's genuinely the one-node answer, and it comes from ThetaCursed, the same dev behind the hugely popular Anima Style Explorer and Anima TrainFlow - an active, known quantity rather than a one-off script dump.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | MODEL | — | |
| vae | VAE | — | |
| upscale_method | COMBO | Model | 7 options: Model, Latent (Bicubic Antialiased), Latent (Bislerp), Latent (Nearest-Exact), Latent (Bicubic), Latent (Area), +1 |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| upscale_by | FLOAT | 1.50.1–4 | — |
| denoise | FLOAT | 0.350–1 | — |
| steps | INT | 201–100 | — |
| cfg | FLOAT | 5.000–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 | |
| seed | INT | 12340–18446744073709550000 | — |
| tile_size_vae | INT | 1024256–4096 | — |
| overlap | INT | 640–512 | — |
| color_fix_type | COMBO | Deep Histogram | 3 options: None, Standard, Deep Histogram |
| color_fix_strength | FLOAT | 1.000–1 | — |
| upscale_modelopt | UPSCALE_MODEL | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| latent | LATENT | — |