ConditioningUpscale
The missing half of a hires fix with area conditioning
- conditioning
- CONDITIONING
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:
- First pass: KSampler →
LatentUpscale(2x) → VAE decode. - Grab the positive conditioning from the first pass, run it through
ConditioningUpscalewithscalar = 2. - 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.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| scalar | INT | 21–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |