Nodes/comfyui-jk-easy-nodes/JK Easy HiRes Fix
ComfyUI Node

JK Easy HiRes Fix

A1111's two-pass upscale as one ComfyUI node

By kostenickj·Created 2 years ago·Updated 2 years ago· 8
JK Easy HiRes Fix
  • model
  • clip
  • vae
  • positive
  • negative
  • latent_image
  • LATENT
seed0
steps20
cfg8.0
sampler_name
scheduler
upscale_by1.50
denoise0.50
latent_upscalerlanczos
pixel_upscaler
noise_modeGPU(=A1111)
inject_extra_noiseenable
extra_noise_strength2.5
extra_positive_text
extra_positive_conditioning_modereplace
extra_negative_text
extra_negative_conditioning_modereplace

If you came to ComfyUI from Automatic1111 or Forge, you've probably missed the "Hires. fix" checkbox - the one that generates small, then upscales and re-samples in a single click. ComfyUI makes you build that yourself out of an Upscale Latent By node, a second KSampler, and a noise-injection trick if you want it to actually match A1111's output. EasyHRFix is one dev's attempt to put all of that back into one node, noise quirks included.

Hi-res fix, quickly: instead of generating straight at a huge resolution (which tiles and repeats badly), you generate at native resolution, upscale the latent, and run a second, low-denoise sampling pass to add coherent detail at the bigger size. It's the standard fix for the "why does my SDXL image have three heads" problem when you push past 1024×1024 without it.

What's actually happening inside

This node is a full second KSampler wearing a trench coat. You give it the same things you'd give any sampler - model, clip, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, and a latent_image - plus the upscale-specific bits: upscale_by (default 1.5x, the sweet spot per the KB is 1.5–2x) and denoise (default 0.5, matching the "0.3–0.5 or the composition drifts" rule of thumb). latent_upscaler picks the interpolation method for the latent resize (lanczos is the default and a safe one); pixel_upscaler is a second, optional model-based upscale path populated from whatever upscale models you have installed.

The part that's specific to this node is noise_mode and inject_extra_noise. A1111 generates its second-pass noise on the GPU by default; ComfyUI's native samplers don't reproduce that exactly, which is part of why "same seed, different app" gives you a different image. Setting noise_mode to GPU(=A1111) and enabling inject_extra_noise (with extra_noise_strength, default 2.5) is this node's stab at closing that gap. Two more optional fields, extra_positive_text / extra_negative_text with a _conditioning_mode (replace / combine / concat / average), let you tweak the prompt just for the hi-res pass without rebuilding your conditioning chain - useful if you want to nudge in extra detail words ("intricate detailing, sharp focus") only on the upscale.

Output is a single LATENT - decode it with a normal VAE Decode like any other sampler output.

Installing it

This pack isn't a household name - it's a solo dev's personal toolkit that happens to be one of the ~100 packs pre-installed on comfy.icu, and it has essentially no footprint in the wider community discussion. If you're self-hosting: cd ComfyUI/custom_nodes && git clone https://github.com/kostenickj/jk-comfyui-helpers.git, restart. The README notes ComfyUI Manager registration was pending at time of writing, so the manual clone is the reliable path. git pull inside the folder to update.

Important, and easy to miss: the README states this node explicitly requires ComfyUI-Inspire-Pack and ComfyUI_Noise installed alongside it - that's where the GPU-noise-injection machinery comes from. Inspire Pack is a real, still-referenced pack (over a hundred community threads mention it in the last year and a half), so it's not a dead dependency, but it is a separate install you need to grab.

Where people get burned

  • Missing Inspire Pack / ComfyUI_Noise. If those aren't installed, expect the node to fail to load or the noise-injection widgets to misbehave - this is the single most likely first error.
  • Denoise too high. Above ~0.5, per the standard hi-res-fix guidance, you start changing the composition instead of just adding detail. If your upscaled image looks like a different picture, pull denoise down to 0.3–0.4.
  • Chasing an exact A1111 match. GPU(=A1111) + extra noise gets you closer, not identical - different samplers, schedulers, and library versions between A1111 and ComfyUI mean a bit-for-bit match isn't realistic. Treat it as "in the neighborhood," not "pixel identical."
  • Forgetting pixel_upscaler is optional. If you leave it unset, you're relying purely on the latent upscale (latent_upscaler) - fine for mild upscales, but a dedicated pixel upscale model can help more on bigger jumps.

If you're already using the JK context nodes, look at EasyHRFix_Context instead - same node, but it pulls model/clip/vae/positive/negative from a bundled context wire instead of six separate inputs.

CategoryJK Comfy Helpers

Inputs (22)

NameTypeDefaultDescription
modelMODEL
clipCLIP
vaeVAEThe VAE model used for decoding the latent.
seedINT00–18446744073709550000The random seed used for creating the noise.
stepsINT201–10000The number of steps used in the denoising process.
cfgFLOAT8.00–100The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality.
sampler_nameCOMBOThe algorithm used when sampling, this can affect the quality, speed, and style of the generated output.
schedulerCOMBOThe scheduler controls how noise is gradually removed to form the image.
positiveCONDITIONINGThe conditioning describing the attributes you want to include in the image.
negativeCONDITIONINGThe conditioning describing the attributes you want to exclude from the image.
upscale_byFLOAT1.501.05–4
latent_imageLATENT
denoiseFLOAT0.500–1
latent_upscalerCOMBOlanczos6 options: nearest-exact, bilinear, area, bicubic, bislerp, lanczos
pixel_upscalerCOMBO0 options:
noise_modeCOMBOGPU(=A1111)2 options: GPU(=A1111), CPU
inject_extra_noiseCOMBOenable2 options: disable, enable
extra_noise_strengthFLOAT2.50–100
extra_positive_textoptSTRINGif non empty, will be encoded and used depending on the value of extra_positive_conditioning_mode
extra_positive_conditioning_modeoptCOMBOreplace4 options: replace, combine, concat, average
extra_negative_textoptSTRINGif non empty, will be encoded and used depending on the value of extra_negative_conditioning_mode
extra_negative_conditioning_modeoptCOMBOreplace4 options: replace, combine, concat, average

Outputs (1)

NameTypeDescription
LATENTLATENT