▲ Latent Upscale
The cheap half of a two-stage hi-res workflow
- samples
- LATENT
This upscales in latent space, not pixel space - you're resizing the tensor your sampler works on, not a finished image. That makes it the fast, cheap step of a two-pass hi-res workflow: sample small, upscale the latent, run a second low-denoise pass over the bigger version. It's the natural partner to IllustriousMultiPassSampler or a second IllustriousKSamplerPro call, and it's how you get past a single-pass resolution ceiling without an external upscale model.
Scale, not width/height
scale (default 2.0, range 0.25–8) is the field to actually use. width and height still exist but the tooltip is blunt about it: they're deprecated, "use 'scale' instead," and if you set both of them nonzero they override scale entirely - meaning mixing the two approaches doesn't blend, one wins outright. Pick one and stick with it; scale is the one the node is actually built around now.
upscale_method picks the interpolation: bilinear (default) is the smooth, safe choice; nearest-exact is sharper but blockier at higher scale factors; bicubic and area sit in between. If your follow-up sampling pass comes out mushy or over-smoothed, try switching from bilinear to bicubic before blaming the sampler.
preserve_anime_details (on by default) aims to keep edges and linework crisp through the resize rather than letting a naive interpolation soften them - anime line art is exactly the kind of high-contrast, thin-line content that suffers most from a plain bilinear stretch. noise_augmentation (0–0.2, default 0) adds a small amount of fresh noise after the upscale, which gives the follow-up sampling pass something to actually resolve rather than a perfectly smooth interpolated latent with nothing for the model to add detail to - a touch of this can help avoid the "soft then oversharpened" look latent upscales sometimes produce on their own.
The inputs and outputs that matter
samples,upscale_method,scale- required, andscaleis the one worth understanding.crop-disabledorcenter; center-crops to an exact size after scaling if you need one.model_version- leave onautounless you need version-specific tweaks; this affects internal handling, not the resize math itself.
Output is a single LATENT - feed it straight into your next sampling pass, no decode step needed.
Installing it
ComfyUI Manager: search "EasyIllustrious," install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/regiellis/ComfyUI-EasyIllustrious
pip install -r ComfyUI-EasyIllustrious/requirements.txt
No downloads - this is pure tensor math, no models involved.
Common issues
Setting a specific pixel size and nothing seems to change. Check whether both width and height are nonzero - if either is 0, scale is still in control; both need to be set to actually override it, and mixing a nonzero width with scale set to something meaningful is a common source of confusion about which one "won."
Detail comes out mushy after the second sampling pass. Try bicubic instead of bilinear, and consider a small noise_augmentation value - a perfectly smooth upscaled latent gives the next pass less to work with than a slightly noisy one.
Fine linework looks softened post-upscale. Confirm preserve_anime_details is on - it's the default, but worth double-checking if you or a saved workflow turned it off.
This is a final-output upscaler for you. It isn't, really - this is a latent-space step meant to feed a second sampling pass, not a substitute for a dedicated pixel-space upscale model on your finished image. Use it mid-pipeline, not at the end.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | Latent tensor to upscale. | |
| upscale_method | COMBO | bilinear | Interpolation method for latent upscaling. |
| scale | FLOAT | 2.000.25–8 | Scale multiplier (e.g., 2.0 doubles latent size). |
| model_versionopt | COMBO | auto | Leave auto unless you need version-specific tweaks. |
| preserve_anime_detailsopt | BOOLEAN | true | Preserve anime-style edges and textures post-scale. |
| cropopt | COMBO | disabled | Optionally center-crop to exact size. |
| noise_augmentationopt | FLOAT | 0.000–0.2 | Add tiny noise to enhance detail after upscale. |
| widthopt | INT | 00–8192 | Deprecated: use 'scale' instead. When > 0 (with height), overrides scale. |
| heightopt | INT | 00–8192 | Deprecated: use 'scale' instead. When > 0 (with width), overrides scale. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |