Nodes/quadmoon's ComfyUI nodes/KSampler - Extra Outputs
ComfyUI Node

KSampler - Extra Outputs

One KSampler That Also Upscales Your Latent and Hands Back the Seed

By traugdor·Created 3 years ago·Updated 9 months ago· 16
KSampler - Extra Outputs
  • model
  • positive
  • negative
  • latent_image
  • MODEL
  • POSITIVE
  • NEGATIVE
  • SEED
  • LATENT
  • UPSCALED_LATENT
seed0
steps20
cfg8.0
sampler_name
scheduler
denoise1.00
upscale_latent
upscale_method
ratio1.50

The standard KSampler node is a dead end: it only outputs a latent, so after sampling you have to re-wire your model, conditioning, and seed from scratch if you want a second pass. This node is the "extra outputs" variant - it passes your model, both conditionings, and the seed straight through, and adds a latent upscaler on top. It's a one-node home for the first half of a hires-fix workflow.

Why you'd reach for it

Two reasons. First, the pass-throughs: model, positive, negative, and the seed you actually used all come out on wires, which makes daisy-chaining a second sampler trivial - you don't redraw anything, you just take the LATENT output and the pass-throughs and go. Second, the built-in latent upscale: with upscale_latent set to Yes, it samples at your current resolution, then upscales the resulting latent by a ratio (default 1.5x) and hands you that as a separate UPSCALED_LATENT output. Feed that into a second sampler at low denoise and you've got a classic two-pass upscale without any extra nodes.

How it works

Under the hood it's the stock ComfyUI sampler - same comfy.sample.sample call the core node uses, same samplers and schedulers. The difference is purely in what it returns. On the upscale side it uses common_upscale on the sampled latent with your chosen method (bicubic is the sensible default for latent upscaling). Note the seed output: it's the seed input passed back out, so you can reuse the exact same seed for the second pass and keep a chain of samples on one track.

Inputs and outputs

The ones that matter:

  • seed, steps, cfg, sampler_name, scheduler - the usual sampling controls.
  • positive / negative - your conditioning.
  • latent_image - where the noise starts.
  • denoise - 1.0 for a full txt2img run; 0.3–0.5 is the sweet spot for an img2img second pass (see the KB's upscaling essay on why low denoise is the whole trick).
  • upscale_latent - Yes/No toggle for the latent upscale.
  • upscale_method and ratio - optional, only used when upscale is on.

Outputs: MODEL, POSITIVE, NEGATIVE, SEED (pass-throughs), LATENT (the sample), and UPSCALED_LATENT (the upscaled version, if enabled - otherwise it's the same latent).

Installing it

Part of "quadmoon's ComfyUI nodes". ComfyUI Manager: search the pack title or Install via GIT URL with https://github.com/traugdor/ComfyUI-quadMoons-nodes.git. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/traugdor/ComfyUI-quadMoons-nodes.git

Restart ComfyUI. No model downloads.

Common issues

The main trap is using it at full denoise for the second pass - that's how you get a second pass that ignores your first one. The whole point of UPSCALED_LATENT is a low-denoise refinement, so keep the second sampler at 0.3–0.5. Also, if upscale_latent is off, UPSCALED_LATENT just echoes the regular latent - easy to wire up and wonder why nothing upscaled.

CategoryQuadmoonNodes/sampling

Inputs (13)

NameTypeDefaultDescription
modelMODEL
seedINT00–18446744073709550000
stepsINT201–10000
cfgFLOAT8.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
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
denoiseFLOAT1.000–1
upscale_latentCOMBO2 options: Yes, No
upscale_methodoptCOMBO5 options: nearest-exact, bilinear, area, bicubic, bislerp
ratiooptFLOAT1.500.01–8

Outputs (6)

NameTypeDescription
MODELMODEL
POSITIVECONDITIONING
NEGATIVECONDITIONING
SEEDINT
LATENTLATENT
UPSCALED_LATENTLATENT