Nodes/ComfyUI_Dave_CustomNode/ConditioningUpscale
ComfyUI Node

ConditioningUpscale

The missing half of a hires fix with area conditioning

By Davemane42·Created 3 years ago·Updated 2 years ago· 404
ConditioningUpscale
  • conditioning
  • CONDITIONING
scalar2

Here's a subtle failure that will make you question your sanity: you build a regional workflow with area conditioning, run a first pass, upscale the latent for a hires fix, and suddenly the region that used to say "red car" is now pointing at empty sky. The area coordinates are stored in latent pixels of the original resolution, so when the latent doubles in size, they don't move with it. ConditioningUpscale from Davemane42's pack fixes exactly that.

It's a two-input helper that does one thing: take every conditioning entry that carries an area key and multiply all four numbers by a scalar, then round each to a multiple of 8 (keeping coordinates latent-friendly, since latents run at 1/8 resolution). Entries without an area key - fullscreen conditioning - pass through untouched. That's the whole node, and it's exactly as useful as the workflow it sits in.

When you actually need it

The standard hires fix is two-pass: generate at native resolution, upscale the latent, then re-sample at low denoising (0.3–0.5) for detail. If your first pass used MultiAreaConditioning (or a stack of ConditioningSetArea nodes), you need the same conditionings rescaled for the second pass. So the flow is:

  1. First pass: KSampler → LatentUpscale (2x) → VAE decode.
  2. Grab the positive conditioning from the first pass, run it through ConditioningUpscale with scalar = 2.
  3. Feed the scaled conditioning into the second-pass KSampler alongside the upscaled latent.

scalar is an INT widget with a default of 2, range 1–100, step 0.5. For a clean 2x latent upscale, set it to match. Since everything gets rounded to multiples of 8, slightly odd values are fine in practice - the rounding keeps you from accumulating sub-pixel drift.

Inputs and output

  • conditioning - CONDITIONING. Usually the positive (or negative) conditioning from your first pass.
  • scalar - INT, how much the latent was upscaled.
  • Output CONDITIONING - the rescaled conditioning, wired straight into the second KSampler.

Installing it

This node ships inside MultiAreaConditioning.py from the same pack, so it comes free with the others. Install via ComfyUI Manager ("ComfyUI_Dave_CustomNode") or:

cd ComfyUI/custom_nodes
git clone https://github.com/Davemane42/ComfyUI_Dave_CustomNode

Restart ComfyUI. No models, no pip deps.

Honest caveat: if your workflow scales by a non-integer factor or changes aspect ratio between passes, ConditioningUpscale isn't the right tool - its sibling ConditioningStretch handles that by mapping between two explicit resolutions. For the boring, common 2x hires fix, this is the one you reach for.

CategoryDavemane42

Inputs (2)

NameTypeDefaultDescription
conditioningCONDITIONING
scalarINT21–100

Outputs (1)

NameTypeDescription
CONDITIONINGCONDITIONING