Downsampled Latent Guidance
Steer a high-res pass with a low-res latent (experimental, but fun)
- model
- reference_latent
- MODEL
This is the niche one in Comfy Latent Tools, and the pack says so - the node's own help string opens with "!EXPERIMENTAL!". The idea is genuinely interesting though: when you generate at high resolution, use a downscaled latent as a stable reference so the big pass stays anchored to the composition instead of drifting into whatever the high-res sampler feels like at step forty.
It's a model patch in the model_patches/unet category. You feed it a MODEL plus a reference_latent, and the patched MODEL output goes into your KSampler. Same shape as the pack's other guidance node - this is the "kitchen-sink attention guidance" family's more specialised sibling.
How it works
At each sampling step the node takes your reference_latent - typically a quick low-res pass of the same scene - re-noises it up to the current noise level, runs the UNet on that small re-noised reference, and transfers the attention maps from the reference pass over to the full-res pass. The full-res prediction is then steered by guidance_weight times the difference between the guided and unguided predictions (the source literally adds guidance_weight * (cond_modified - cond_pred) to the CFG output). Net effect: the high-res pass inherits the low-res pass's understanding of composition and layout, while detail still grows at full resolution.
It's the same "alternate prediction, added as an extra guidance term" pattern as PAG-style guidance, just with a low-res latent instead of a perturbed attention map as the source of the alternate signal.
Inputs that matter
model- the checkpoint.reference_latent- the one beginners forget. Without a sensible low-res latent there is nothing to steer by; wire a latent from an earlier small/fast pass here.downscaling_factor(default 2, range 0–8) - how much smaller the reference is than the main pass.guidance_weight(default 1.5) - strength of the steering.noise_fraction_start(1.0) /noise_fraction_end(0.0) - the window over the sampling schedule where guidance applies. Defaults run it the whole way; tighten them if you only want steering in the composition-forming steps.rescaling_method(defaultNone),rescaling_fraction(0.7),unet_block/unet_block_id/unet_block_list- the same rescaling and block-targeting controls as the pack's other guidance node, for when the raw guidance term needs taming.
Output is a single MODEL. Swap it into your KSampler in place of the unpatched one.
The honest take
Reach for this one if you're the kind of person who enjoys poking at CFG math, not as a daily driver. It's the least documented node in a pack whose README literally says "MANY MISSING NODES HERE - WILL BE UPDATED", and it costs extra UNet forward passes per step, so it's slow. Expect real tuning: start with a 2x downscaling_factor, low guidance_weight (try 0.5–1.0 before jumping to the 1.5 default), and keep the guidance window narrow until you see it working. If your problem is "the high-res pass keeps inventing details that contradict the low-res composition," this is exactly the experiment to run.
Install is the same as the rest of the pack - ComfyUI Manager, search Comfy Latent Tools, install, restart; or git clone https://github.com/JTriggerFish/ComfyLatentTools into custom_nodes. No model downloads, dependencies are just torch, torchvision, pillow and numpy. This node barely shows up in search right now (it's the least-visited of the three), which is how you know you're early. The experiment is real, the community feedback loop just hasn't caught up yet.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| reference_latent | LATENT | — | |
| downscaling_factor | FLOAT | 2.000–8 | — |
| guidance_weight | FLOAT | 1.50–100 | — |
| apply_rescaling_to_alternate_guidance | BOOLEAN | false | — |
| rescaling_method | COMBO | None | 7 options: None, PredSpaceRescale, VSpaceRescale, SNF, Softmax, Normalize, +1 |
| rescaling_fraction | FLOAT | 0.700–1 | — |
| unet_block | COMBO | middle | 3 options: input, middle, output |
| unet_block_id | INT | 0 | — |
| noise_fraction_start | FLOAT | 1.000–1 | — |
| noise_fraction_end | FLOAT | 0.000–1 | — |
| unet_block_listopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |