Nodes/ComfyUI YSC HighRes-Fix/Highres Fix (YSC)
ComfyUI Node

Highres Fix (YSC)

Your whole hi-res fix pipeline, compressed into one node

By yannickcruz·Created 11 months ago·Updated 10 months ago· 0
Highres Fix (YSC)
  • model
  • vae
  • image
  • positive
  • negative
  • upscale_model
  • LATENT
upscale_factor2.00
upscale_method
seed0
steps20
cfg8.0
sampler_name
scheduler
denoise0.50

The classic hi-res fix in ComfyUI is a four-node chain: upscale the image, encode it to latent, run a KSampler on it at low denoise, decode. YSC Highres Fix (class YSC_HighresFix) collapses all of that into a single node. Feed it your first-pass image, the model and prompts you generated with, and an upscale model, and it hands you back a LATENT that's bigger and packed with fresh detail, ready for a VAE Decode.

It's a convenience wrapper, not magic - and it's honest about that. The whole point of hi-res fix is that diffusion can't compose coherently above native resolution, so you generate small and climb after. The KB's upscaling essay calls this out: generate at native res, then a 1.5–2x pass with moderate denoising. This node turns that two-stage habit into a two-node affair (YSC node + VAE Decode) instead of a spiderweb.

How it works

The source is refreshingly short, and it tells you exactly what's happening. It runs your upscale model through Comfy's ImageUpscaleWithModel for the real super-resolution pass, then VAE-encodes the enlarged pixels and runs a full img2img sampling pass internally - seed, steps, cfg, sampler, scheduler and all, using the checkpoint and conditioning you wired in.

That makes it a fused "pixel upscale + generative detail" node, which is the pattern the upscaling KB recommends over either alone. The knob that decides how much of your original survives is denoise. The author is explicit: 0.3 to 0.55. Push past ~0.7 and the second pass stops refining and starts rewriting - broken images, per the README's own warning.

Inputs and output

The inputs that matter, in rough order of how often you'll touch them:

  • image - your first-pass generation, usually straight from a VAE Decode.
  • upscale_model - a real dependency. You must load one with an UpscaleModelLoader node (the shipped workflows use 4x-UltraSharp; Remacri is the texture pick). The node neither ships nor downloads one; it needs the .pth in your models/upscale_models folder.
  • denoise - the most important setting. 0.3–0.55.
  • upscale_factor - 1 to 4, default 2. The author recommends capping at 2x on low VRAM.
  • model, positive, negative, vae - the same model and prompts you generated with.
  • seed, steps, cfg, sampler_name, scheduler - your standard sampler controls; defaults are 20 steps, cfg 8, seed 0.

The single output is LATENT, which wires straight into a VAE Decode. The repo also ships an example workflow that chains Ultimate SD Upscale afterwards if you want to push the resolution further.

Installing

ComfyUI Manager → search "YSC HighRes-Fix", or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/yannickcruz/ComfyUI_YSC_HighResFix

Then restart ComfyUI. That's it - the pyproject.toml declares no pip dependencies at all, so there's nothing extra to install or break.

Gotchas

Two are grounded in the code, not hearsay. First, the node only ever shrinks an overshot upscale; it never enlarges beyond what your upscale model produced. A 2x model with upscale_factor set to 4 silently gives you 2x. If you want the full 4x range, load a 4x model. Second, upscale_method (nearest, bilinear, bicubic, lanczos) only matters in that shrink-back path - it isn't the detail pass, and with a matching upscale model it never even runs.

The honest complaint: you can rebuild all of this with stock nodes, and if you already live in a latent-upscale or ControlNet Tile workflow you don't need it. Where it earns its place is as a one-stop drop-in when you want the "pixel upscale then diffusion detail" pattern without rebuilding the graph every time. Small pack, one node, does one job well.

Categoryimage/upscaling

Inputs (14)

NameTypeDefaultDescription
modelMODEL
vaeVAE
imageIMAGE
positiveCONDITIONING
negativeCONDITIONING
upscale_factorFLOAT2.001–4
upscale_methodCOMBO4 options: nearest-exact, bilinear, bicubic, lanczos
seedINT00–18446744073709550000
stepsINT201–1000
cfgFLOAT8.01–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
denoiseFLOAT0.500–1
upscale_modelUPSCALE_MODEL

Outputs (1)

NameTypeDescription
LATENTLATENT