Nodes/Arctenoxs-Essentials_ComfyUI/KSampler Refiner (Arctenox's Essentials)
ComfyUI Node

KSampler Refiner (Arctenox's Essentials)

The hi-res fix node that keeps your composition honest

By Arctenox·Created 8 months ago·Updated 2 months ago· 1
KSampler Refiner (Arctenox's Essentials)
  • model
  • positive
  • negative
  • latent
  • vae
  • model
  • positive
  • negative
  • latent
  • vae
  • image
upscale_methodbilinear
scale_factor1.50
target_width0
target_height0
seed0
sonar0
steps20
cfg4.00
sampler_name
scheduler
denoise0.45
vae_decodetrue

Hi-res fix is the oldest trick in the book: generate small, upscale, re-denoise - and get detail that a single big generation often misses. KSampler Refiner is this pack's version of that second pass, packaged so it slots in directly after the pack's main KSampler: it takes the first pass's latent, optionally upscales it, runs a refiner pass, and can decode the result to an image before it's even past the node.

The workflow it's built for, straight from the node's own description: sample at 512×768 with denoise 1.0, feed the LATENT into the refiner with upscale_method=bilinear, scale_factor=1.5, denoise=0.45, and the same seed - out comes a refined image at ~768×1152. Same composition, more detail.

The inputs that matter:

  • latent - the first pass output. Plus model, positive, negative, passed straight through from your KSampler.
  • upscale_method - None (skip upscaling), nearest, bilinear, bicubic, bislerp. For hi-res fix, bilinear or bicubic on the latent is the standard move; don't overthink it.
  • scale_factor (default 1.5) - ignored if you set target_width/target_height above 0. The pack's VAE Encode + Dimensions node exists precisely to hand you those target values as INTs so you can hit exact resolutions instead of fractions.
  • denoise (default 0.45) - the one dial that controls everything. The node's own guide is the right one: 0.3–0.5 is a subtle fix that adds crisp detail and keeps composition; 0.5–0.7 allows some layout shift; 0.7–1.0 is basically a fresh generation. Start at 0.4-ish and climb only if you want the image to change.
  • seed and sonar - use the same seed as your first pass for coherent variation. sonar is this pack's golden-ratio seed offset (φ⁻¹ ≈ 0.618, with 0 = no effect); matching it to your main KSampler keeps the two passes dancing to the same tune.
  • steps, cfg, sampler_name, scheduler - refiner sampling settings; the pack's defaults (20 steps, cfg 4) are reasonable starting points, not laws.
  • vae_decode (default true) - decode inside the node. If you're doing further latent work (another upscale, a second refine), flip it to false.

Outputs are the full pass-through set - model, positive, negative, latent, vae - plus image when decode is on. All six come out regardless, so you can keep the refined latent and get a preview image without a separate VAE decode node.

Mechanically it's a proper two-phase node: extract the latent tensor, upscale via the chosen interpolation, run ComfyUI's sampler with the sonar-transformed seed, then optionally decode. One honest gotcha the README flags: cancelling a running sampler prints "Sampling failed: ." in the console - that's expected and safe to ignore; it can't be suppressed. Don't go hunting for a bug that isn't there.

The wider take: hi-res fix via latent upscale is a well-trodden path in the KB's upscaling lore - it's the cheap, fast way to add detail vs. pixel-space upscale-then-denoise, and it's where most people should start before they buy into a big upscaler. This node is a competent, slightly opinionated take on it. If you're already comfortable chaining a stock KSampler + LatentUpscale + another KSampler, you gain one node and the dimension pass-through; the value is in the convenience, not new math.

Install. Part of Arctenox's Essentials - ComfyUI Manager → search "Arctenox's Essentials", or:

cd ComfyUI/custom_nodes/
git clone https://github.com/Arctenox/Arctenoxs-Essentials_ComfyUI

Restart ComfyUI. No model downloads; deps are just torch, numpy, optional psutil. The README marks the pack deprecated while the author remasters it - this node's logic (upscale → refine → decode) maps cleanly onto any successor, so nothing you learn here goes to waste.

CategoryArctenox Essentials/Sampling

Inputs (17)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
upscale_methodCOMBObilinearLatent upscale interpolation method. 'None' skips upscaling.
scale_factorFLOAT1.500.25–8Upscale multiplier. Ignored if target_width/height > 0.
target_widthINT00–8192Target pixel width after upscale. 0 = use scale_factor instead.
target_heightINT00–8192Target pixel height after upscale. 0 = use scale_factor instead.
seedINT0-9223372036854776000–18446744073709550000Seed for refiner pass. Use the same seed as the main KSampler for consistency.
sonarINT0-18446744073709550000–18446744073709550000Golden-ratio sonar offset. Match to main KSampler for coherent variation.
stepsINT201–10000Refiner sampling steps.
cfgFLOAT4.000–100CFG scale for refiner pass.
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.450–1How much the refiner changes the latent. 0.3–0.5 = subtle hi-res fix (adds detail, preserves composition) 0.5–0.7 = moderate rework 0.7–1.0 = heavy rework (similar to full generation)
vae_decodeCOMBOtrueDecode the refined latent to an IMAGE inside this node.
vaeoptVAE

Outputs (6)

NameTypeDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
vaeVAE
imageIMAGE