Upscale Latent (SesquiLSR)
The 12MB latent upscaler that's an actual model, not a resize
- latent
- LATENT
You probably already do hi-res fix the way everyone does: generate at native resolution, run the latent through an Upscale Latent node, and feed the bigger tensor into a second KSampler at low denoising. And that default node is just interpolation - nearest, bilinear, bicubic, a resize performed on the latent itself. It works, but interpolation smears the latent, which is why the second pass needs high denoising strength to "recover." The SesquiLSR README puts a number on that damage: at 1.5x on SDXL, bicubic latent upscaling scores 0.4484 LPIPS in their benchmark versus 0.1249 for their model.
SesquiLSR (from LoganBooker; sesqui is Latin for "one and a half," a name that's now "relevant at least in spirit") is a small learned upscaler that runs in latent space. Roughly 3M parameters, ~12MB of weights per model family, sub-6ms per image, no VAE round-trip. It drops into the exact slot the plain Upscale Latent node occupies.
What it is - and just as importantly, what it isn't
It's a drop-in replacement for the raw latent upscale step in a two-pass workflow. In goes the latent, out comes a cleaner, bigger latent that needs less refinement in pass two. No model connection, no VAE connection, no extra inputs.
It is not a full upscaler in the SeedVR2/SUPIR sense. Those work in pixel space and invent detail - pores, eyelashes, fabric weave - and they cost real VRAM and seconds. Sesqui adds pixels and repairs the latent; it doesn't fabricate new texture, and the author says so plainly: don't use it to replace a GAN-based upscaling pipeline, use it in place of bilinear/bicubic before additional denoising. Different job. If yours is "more detail," you want SeedVR2. If yours is "bigger without wrecking the latent on the way to pass two," you want this. Mixing up those two jobs is how most arguments in the upscaling space start.
How it works
The mechanism is right in the source: PixelShuffle to 2x, then a learned downsampling to whatever target you asked for. That's the trick that frees it from a fixed scale - the original model was a hard 1.5x, but the current architecture reassembles to 2x and then applies a scale-conditioned, learned filter to land on any size in [1.0, 2.0]. There's also a bicubic skip path with a learned correction residual on top (the code comments call it "magic sauce"), plus post-upscale refinement blocks, because the author found latents delicate enough that no amount of work done before upscaling can fix the damage the upscale itself introduces.
All the model families share one architecture, and format adaptors handle the pipeline-level transforms. Flux2 packs latents with batch-norm; Ideogram 4 uses shift/scale packing; Wan/Krea/Qwen/Anima get an identity adaptor because ComfyUI hands those latents back in raw VAE space. The upscaler always operates in clean VAE latent space, so a new model on an existing VAE just needs a new adaptor, not retraining.
The inputs that matter
Three inputs, one output:
- model_format - the one that bites. Must match the incoming latent:
SDXL(not SD 1.5),Flux(Flux, Z-Image Turbo, Lumina),Flux2(Flux2, Flux2 Klein),Ideogram 4, orWan 2.1(Wan 2.x, Krea 2, Anima, Qwen Image). - scale - 1.0–2.0, default 1.5, step 0.05. Want 3x? Do two passes; it tops out at 2x.
- half_precision - default on. Loads the model in bf16 (fp16 if bf16 isn't supported). No quality effect, so leave it on.
The output is a single LATENT that wires into the second KSampler's latent input. The node carries the latent's noise_mask through and handles 5D video latents too - Wan users get that for free.
Installing it
Clone into custom_nodes and restart:
cd ComfyUI/custom_nodes
git clone https://github.com/LoganBooker/SesquiLSR.git
The kicker: the weights ship in the repo, four ~12MB safetensors in models/. No separate model download, no extra Python deps - there's no requirements.txt, and it only needs torch and safetensors, which ComfyUI already has. ComfyUI Manager can grab it as "SesquiLSR" if you'd rather. You'll find the node under latent/upscaling/Upscale Latent (SesquiLSR).
Common issues
- Channel/format errors on the first run - model_format doesn't match the checkpoint's VAE family. Match the dropdown to the VAE, not the model name.
- "Weight file not found" - the weights live in the node's
models/folder, so make sure the clone finished. The node also checks asesqui_lsrfolder path if you've configured one. - Ideogram 4 vs Flux2 confusion - same weight file, but different latent packing, so they're separate dropdown entries. Pick by the model, not the file.
- No "Model" or "VAE" inputs on the node - that's correct. Latent in, format chosen, latent out.
One honest caveat: this pack is new - the repo tip is late July 2026 and the community footprint is still essentially zero. Judge it like any upscaler: run the comparison, drag the slider, and let your own second pass decide.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| model_format | COMBO | SDXL | VAE latent configuration: • SDXL (not compatible with SD 1.5) • Flux (Flux, Z-Image Turbo, Lumina) • Flux2 (Flux2, Flux2 Klein: BN-packed latent) • Ideogram 4 (Flux2: shift/scale-packed latent) • Wan 2.1 (Wan 2.x, Krea 2, Anima, Qwen Image) |
| scale | FLOAT | 1.501–2 | — |
| half_precision | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |