🔬 HighRes Fix
The two-pass upscale-and-resample script that works only with FiLKSampler — and that's fine
- script
- script
If you've ever generated an image above your model's native resolution and watched the seams appear - repeated patterns, doubled anatomy, that telltale tiling - you've met the problem hi-res fix solves. The idea is simple and ancient in this ecosystem: generate at native resolution, upscale, then re-sample at low denoising strength to add coherent detail. What FiL HighRes Fix does is package all of that - upscale type, upscaler, seed, steps, denoise, even an optional ControlNet - into one script object.
One thing to know before you wire anything: this node does not sample. It produces a script, and that script is consumed by the FiLKSampler node from the same pack. If you're on a stock ComfyUI KSampler, this node won't plug in anywhere. That's a deliberate design - it's a port of the efficiency-nodes HighRes-Fix script, trimmed to a lean ComfyUI-native version.
How it works
You pick an upscale_type: latent (upscale the latent via ComfyUI's built-in methods like nearest-exact or bislerp), pixel (run an ESRGAN-style model from your upscale_models folder), or both. Then the hires pass re-samples with its own settings - hires_steps (default 12 - the second pass genuinely doesn't need as many as the first), denoise (default 0.56, right in the community sweet spot of 0.3–0.6), and a seed that either reuses the sampler's (use_same_seed) or rolls its own.
The knobs that matter most for a beginner:
upscale_by- the multiplier. 1.25–2.0 is the sensible range; beyond 2x you're asking the second pass to invent a lot of detail at once.denoise- the big quality lever. Too high and you change the composition; too low and you get no new detail. Start at the 0.56 default, tune in small steps.iterations- how many upscale+resample passes to chain. 1 is right for nearly everyone; more is for the patient.use_controlnet- the advanced section. Turn this on with a tile ControlNet and the hires pass stays faithful to the source instead of drifting. Tile ControlNets work withpreprocessorset tonone, because the raw upscaled image is the hint.
There's a hidden caching detail in the implementation worth respecting: in "same seed" mode the script pins its seed value to a constant, so ComfyUI's input-hash cache works and a run with nothing else changed doesn't force a full re-sample. Keep use_same_seed on while you're iterating on other settings - it's the difference between a fast tweak and redoing the whole hires pass every time.
Where it fits in the graph
The chain is: FiLKSampler → its script input ← HighRes Fix. And because it's a script, it composes - wire the script output of FiL's Noise Control node into HighRes Fix's optional script input, then the combined result into the sampler. Both scripts merge into the same pass instead of fighting.
Installing it
Part of FiL Design ImageMind (MIT). ComfyUI Manager: search FiL_Design_ImageMind, or:
cd ComfyUI/custom_nodes
git clone https://github.com/FiL-Design-Ai/FiL_LLM FiL_Design_ImageMind
pip install -r FiL_Design_ImageMind/requirements.txt
Restart; it's under 🎨 FiL Design/Sampling. ComfyUI 0.3.60+, Python 3.10+, light dependencies. It pulls the pixel_upscaler list from your existing upscale_models folder and ControlNets from controlnet - no downloads of its own, but a pixel-type hires pass obviously needs a model you already have.
Gotchas
The first and only real one is the coupling: script goes to FiLKSampler, not to any KSampler. If you forget that, you'll stare at an unconnectable socket wondering what you missed. Second: the hires_ckpt_name default is (use same) - switching checkpoints for the hires pass is a legit workflow, but it doubles model load time, so leave it unless you have a reason. And if the second pass comes back looking like a different image, your denoise is too high - back it toward 0.4, not toward 0.7.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| upscale_type | COMBO | latent | Upscale in latent space, pixel space, or both. |
| hires_ckpt_name | COMBO | (use same) | Checkpoint for the hires pass. '(use same)' reuses the base model. |
| latent_upscaler | COMBO | nearest-exact | Latent upscale method. |
| pixel_upscaler | COMBO | Pixel upscale model (from upscale_models). | |
| upscale_by | FLOAT | 1.250.01–8 | Upscale multiplier. |
| use_same_seed | BOOLEAN | true | Reuse the sampler's seed for the hires pass. |
| seed | INT | 00–18446744073709550000 | Hires-pass seed (used when 'Own seed'). |
| hires_steps | INT | 121–10000 | Steps for the hires re-sample. |
| denoise | FLOAT | 0.560–1 | Denoise strength for the hires re-sample. |
| iterations | INT | 10–5 | How many upscale+resample passes to run. |
| use_controlnet | BOOLEAN | false | Guide the hires pass with a ControlNet. Tile ControlNets work without a preprocessor. |
| control_net_name | COMBO | ControlNet model to apply. | |
| strength | FLOAT | 1.000–10 | ControlNet strength. |
| preprocessor | COMBO | none | Preprocess the ControlNet hint image. 'none' feeds the raw upscaled image (right for tile ControlNets). |
| scriptopt | FIL_HIRES_SCRIPT | Optional upstream FiL script to extend. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| script | FIL_HIRES_SCRIPT | FiL HighRes-fix script for FiLKSampler. |