Nodes/FiL_Design_ImageMind/🔬 HighRes Fix
ComfyUI Node

🔬 HighRes Fix

The two-pass upscale-and-resample script that works only with FiLKSampler — and that's fine

By FiL-Design-Ai·Created 2 months ago·Updated 8 days ago· 8
🔬 HighRes Fix
  • script
  • script
upscale_typelatent
hires_ckpt_name(use same)
latent_upscalernearest-exact
pixel_upscaler
upscale_by1.25
use_same_seedtrue
seed0
hires_steps12
denoise0.56
iterations1
use_controlnetfalse
control_net_name
strength1.00
preprocessornone

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 with preprocessor set to none, 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.

Category🎨 FiL Design/⚡ Sampling

Inputs (15)

NameTypeDefaultDescription
upscale_typeCOMBOlatentUpscale in latent space, pixel space, or both.
hires_ckpt_nameCOMBO(use same)Checkpoint for the hires pass. '(use same)' reuses the base model.
latent_upscalerCOMBOnearest-exactLatent upscale method.
pixel_upscalerCOMBOPixel upscale model (from upscale_models).
upscale_byFLOAT1.250.01–8Upscale multiplier.
use_same_seedBOOLEANtrueReuse the sampler's seed for the hires pass.
seedINT00–18446744073709550000Hires-pass seed (used when 'Own seed').
hires_stepsINT121–10000Steps for the hires re-sample.
denoiseFLOAT0.560–1Denoise strength for the hires re-sample.
iterationsINT10–5How many upscale+resample passes to run.
use_controlnetBOOLEANfalseGuide the hires pass with a ControlNet. Tile ControlNets work without a preprocessor.
control_net_nameCOMBOControlNet model to apply.
strengthFLOAT1.000–10ControlNet strength.
preprocessorCOMBOnonePreprocess the ControlNet hint image. 'none' feeds the raw upscaled image (right for tile ControlNets).
scriptoptFIL_HIRES_SCRIPTOptional upstream FiL script to extend.

Outputs (1)

NameTypeDescription
scriptFIL_HIRES_SCRIPTFiL HighRes-fix script for FiLKSampler.