Batch Latent Processor π
Slerp and Latent Upscale Are Useful β 'Denoise' Is Just a Blur
- latents
- reference_latent
- LATENT
Batch Latent Processor does operations on the latent tensor itself - before VAE decode, while it's still in the compressed space the sampler works in. That's a genuinely interesting place to do work: latent-space upscaling and latent interpolation are real techniques with real uses. The catch is that this particular node bundles them with a "denoise" mode that's actually just a Gaussian blur, so it's a mixed bag where you have to know which buttons to press.
What each operation actually is
The source is short, so there's no ambiguity:
- denoise - builds a Gaussian kernel (size and sigma driven by
strength) and convolves it over the latent channels. That's blurring, not denoising. Real denoising in diffusion is what a KSampler does - removing noise step by step against a noise schedule. Blurring a latent just smooths it, which in practice makes the decoded image look soft and smeared. The name is doing a lot of work it shouldn't. If you want to lightly clean up a latent, that's a KSampler withdenoiseset below 1.0, not this node. - upscale - bilinear interpolation of the latent by
strengthas a scale factor. strength 2 doubles the latent resolution. This is the classic latent-hires trick: upscale in latent space, then run a second sampling pass at the higher resolution. Legit and useful. - blend - linear mix between your latents and a
reference_latentusingblend_factor. Simple, works, and it needs that reference wired in. - interpolate - spherical interpolation (slerp) between your latents and
reference_latent, again governed byblend_factor. This is the fun one: latent morphing between two images' latents gives smooth, natural transitions - a classic trick for animation and video work.
The trap: silent no-ops
Here's where people get bitten. blend and interpolate both require reference_latent - but the node won't tell you. Read the code and it's elif operation == "blend" and reference_latent is not None: leave the reference unplugged and the node silently returns your input unchanged. No error, no warning, just a wasted run and an image that looks identical to what you started with. If you pick blend or interpolate and "nothing happened," this is why. Wire a second latent into reference_latent first.
The inputs that matter
- latents - your LATENT tensor (required).
- operation - the dropdown: denoise / blend / interpolate / upscale.
- strength - 0β2, default 1. For upscale it's the scale factor; for denoise it drives the blur kernel. Irrelevant to blend/interpolate.
- reference_latent - the second latent, mandatory for blend and interpolate even though it's listed optional.
- blend_factor - 0β1, default 0.5; how far you move toward the reference.
One output, a single LATENT - wire it into a KSampler to continue sampling (after an upscale, that's the intended flow) or straight into a VAE decode to look at what you've got.
Worth it?
The two useful operations - latent upscale and slerp - are exactly the sort of thing you'd otherwise need a dedicated node pack for, and this does them with clean defaults. strength for upscale, blend_factor for interpolation, and you're done. Just skip denoise unless you specifically want a blurry latent, and remember the reference-latent rule.
Install is the shared pack route:
cd ComfyUI/custom_nodes
git clone https://github.com/joe002/comfyui-rtx4090-nodes.git
Restart (or use Manager, "comfyui-rtx4090-nodes"). Pure PyTorch, no torchvision dependency, no models. For latent morphing and latent-hires workflows it's a handy little node - once you know to ignore a third of its dropdown.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| latents | LATENT | β | |
| operation | COMBO | 4 options: denoise, blend, interpolate, upscale | |
| strength | FLOAT | 1.000β2 | β |
| reference_latentopt | LATENT | β | |
| blend_factoropt | FLOAT | 0.500β1 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | β |