Nodes/Umbra Nodes/KSampler Hires Fix (Umbra UI)
ComfyUI Node

KSampler Hires Fix (Umbra UI)

A Forge-style hires fix in one node — with an honest upscale list

By Nocturne-Ai-Labs·Created 2 months ago·Updated 10 days ago· 0
KSampler Hires Fix (Umbra UI)
  • model
  • vae
  • positive
  • negative
  • latent_image
  • samples
  • model_name
  • seed
  • steps
  • cfg
  • sampler_name
  • scheduler
  • hires_seed
seed0
steps24
cfg7.0
sampler_name
scheduler
denoise1.00
enabledfalse
upscalerLatent
resize_modeupscale by
scale_by2.00
resize_width0
resize_height0
hires_steps0
hires_cfg0.0
hires_sampler_nameUse same
hires_schedulerUse same
hires_denoise0.35

Hires fix is the oldest trick in the book and still the most reliable one: generate at native resolution, upscale, then run a low-denoise second pass so the model spends its detail budget on pixels that exist instead of hallucinating them. KSampler Hires Fix (Umbra UI) packages that two-pass loop into a single node the way Forge and A1111 users remember it - one checkbox, one upscaler selector, one set of hires-specific settings. If you've been hand-assembling UpscaleLatentVAEDecodeImageScaleVAEEncode → second sampler chains, this is the one node that replaces the whole pile.

How it works

The first pass is a normal common_ksampler run with your base steps/cfg/denoise. Then, if enabled is on, it takes the output latent and upscales it by one of three routes:

  • Latent - upscales the latent directly (default method bislerp). Cheapest, slightly soft, and perfectly fine for SDXL-class models.
  • Pixel methods - Nearest, Bilinear, Area, Bicubic, Lanczos: it decodes to pixels, resizes, re-encodes. Cleaner edges, costs a VAE round-trip.
  • A real upscale model - it scans your upscale_models folder and offers them in the dropdown, defaulting to 4x-AnimeSharp.pth. It decodes, runs the model, then downscales to the exact target size with Lanczos so the output matches what you asked for.

The target size is where this node is genuinely well-behaved. resize_mode gives you upscale by (scale scale_by, default 2.0) or resize to (exact resize_width/resize_height, missing dimension auto-derived from aspect). Everything is rounded to multiples of 8, and if only one resize to dimension is set, the other is computed from the source aspect ratio - no stretching. The second pass then runs with its own settings: hires_steps (0 = inherit base), hires_cfg (0 = inherit), hires_sampler_name/hires_scheduler (both default to "Use same"), and hires_denoise (default 0.35 - the sweet spot for a detail pass; too high and you get a different image, too low and the upscale just looks like a blurry zoom).

The settings a beginner actually sets

Three knobs do 90% of the work: enabled (it's off by default - flip it on), upscaler (start with Latent on low VRAM, 4x-AnimeSharp.pth when you want sharpness), and hires_denoise (0.3–0.4). scale_by of 2.0 is the safe default. Everything else has sane inheritance behavior, which is the point - you shouldn't have to re-pick your sampler for the second pass.

Installing it

Ships in Umbra-Nodes, the ComfyUI companion pack for Umbra Studio (NocturneLabs' open-source local AI suite). ComfyUI Manager → search "Umbra Nodes", or clone:

cd ComfyUI/custom_nodes
git clone https://github.com/Nocturne-Ai-Labs/Umbra-Nodes

Restart ComfyUI. No pip deps, but if you want the model-based upscaler you need 4x-AnimeSharp.pth (or any ESRGAN-family .pth) in ComfyUI/models/upscale_models/. The pixel and latent routes need nothing extra.

Gotchas

Two classic traps. VRAM. The pixel and model routes decode to full-resolution pixels before the second pass - on a 6GB card a 2x latent upscale at high base resolution can OOM. If it dies mid-hires, fall back to Latent, or drop scale_by to 1.5. And don't over-denoise: the whole point is a gentle refinement pass, and cranking hires_denoise toward 1.0 turns it into a full re-generation that can drift colors and identity. Also note the output's hires_seed matches the base seed - the second pass reuses it, which is what keeps the refinement deterministic.

CategoryUmbra Lab

Inputs (22)

NameTypeDefaultDescription
modelMODEL
vaeVAE
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
seedINT00–18446744073709550000
stepsINT241–10000
cfgFLOAT7.00–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1
enabledBOOLEANfalse
upscalerCOMBOLatent12 options: Latent, Latent (nearest-exact), Latent (bilinear), Latent (area), Latent (bicubic), Latent (bislerp), +6
resize_modeCOMBOupscale by2 options: upscale by, resize to
scale_byFLOAT2.001–8
resize_widthINT00–16384
resize_heightINT00–16384
hires_stepsINT00–10000
hires_cfgFLOAT0.00–100
hires_sampler_nameCOMBOUse same45 options: Use same, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39
hires_schedulerCOMBOUse same10 options: Use same, simple, sgm_uniform, karras, exponential, ddim_uniform, +4
hires_denoiseFLOAT0.350–1

Outputs (8)

NameTypeDescription
samplesLATENT
model_nameSTRING
seedINT
stepsINT
cfgFLOAT
sampler_nameSTRING
schedulerSTRING
hires_seedINT