Upscale Latents
The one-step node that doubles your Flux.2 latents in ~8 ms
- model
- latent
- LATENT
LoadFlowUpscaler gets the model into your graph; this is the node that does the work. Feed UpscaleLatents a loaded LATENT_UPSCALER and a Flux.2 latent, and it returns a latent exactly 2× larger on each side, produced in a single denoising step. It always doubles - no scale slider, no denoise strength, no prompt, no CFG. You chain passes to go bigger: 1024 → 2048 → 4096 → 8192 is three UpscaleLatents in a row, which is exactly how the demo workflow builds its 4× comparison, and where the author's headline "8K pipeline in 25 seconds" comes from.
How it works under the hood. Flux.2 latents are patchified - 32 channels stored as 128-channel 2×2 patches. The node unpatchifies back to 32 channels, draws fresh gaussian noise at twice the spatial size, then runs exactly one FlowMatch-Euler step: the model predicts velocity, and your low-res latents are passed through a conditioning encoder and injected into the U-Net via FiLM. No attention, no text encoder, no negative prompt - the condition is simply "here's what the image looks like at half this size." That one-step design is the entire trick, and it's why 512→1024 costs about 8ms of compute on a 5090 (in latent space, before decode).
That puts it in a different lane from the rest of the upscaling menu. Against the usual split - more pixels, more detail, or more pixels over time - this is squarely "more pixels, but synthesized in Flux's own latent space." ESRGAN is cheaper and adds nothing; SeedVR2 adds far more but weighs gigabytes and takes seconds. Flow Upscaler sits between: the reception thread's verdict was that it doesn't match the heavyweights but is effectively free and significantly better than generic GAN upscalers. The same thread flagged rough skin at high factors, so treat this as a resolution stage, not a restorer - fix faces and damage before or separately, same rule as any generative upscale.
Inputs that matter (that's all of them):
- model -
LATENT_UPSCALERfrom LoadFlowUpscaler. - latent - a Flux.2
LATENT, straight off the sampler (SamplerCustomAdvancedin the demo). - seed - the noise seed for the synthesized upscale, default 0. It randomizes by default; fix it if you want reproducible big prints.
Output is LATENT, which goes into another UpscaleLatents or a VAEDecode - and at 4K+ that means LoadTAEF2, because the full Flux.2 VAE will make you wait or run out of memory.
Where people get burned: feeding it non-Flux.2 latents (wrong channel count, instantly wrong output); chaining past 8K into absurdity and running out of VRAM; or judging the model as a restoration tool when it's a fast resolution multiplier. And don't forget the seed - the upscale is generative, so different seeds genuinely shift the detail.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | LATENT_UPSCALER | — | |
| latent | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |