Nodes/Eric_Krea2/Eric Krea2 Upscale VAE Loader
ComfyUI Node

Eric Krea2 Upscale VAE Loader

A 2× decoder that's secretly a quality pass

By EricRollei·Created 2 months ago·Updated about a month ago· 11
Eric Krea2 Upscale VAE Loader
    • upscale_vae
    model_pathspacepxl/Wan2.1-VAE-upscale2x
    subfolderdiffusers/Wan2.1_VAE_upscale2x_imageonly_real_v1
    dtypebfloat16
    vae_tile_blendcosine
    downsample_to_1xfalse
    blur_sigma0.0

    Here's the thing nobody says about "upscaling": the Krea 2 workflow's fastest path to 4k isn't a re-denoise at all. It's this node's VAE. Eric Krea2 Upscale VAE Loader loads the spacepxl Wan 2.1 2× upscale decoder - a decoder-only finetune that takes a Krea 2 latent and outputs a 2× image directly, no second sampling pass. That's the entire secret of the "Turbo → fast 4k" path in the README: Generate 2048² → Upscale VAE Loader → Upscale Decode 2× → 4096², all in one decode call.

    Why this works at all

    Krea 2, Qwen-Image, and Wan 2.1 all share the same latent space - the AutoencoderKLQwenImage (16-channel, f8). That's why a Wan-family decoder is a drop-in on Krea 2 latents. The upscale VAE emits 12 channels and does a pixel_shuffle(2) to land at 2×, and because it's a trained decoder (in the GAN-quality sense) rather than a generic resize, it tends to look sharper and cleaner than the base VAE at the same output size. The model auto-downloads from Hugging Face on first use, so the README's only real dependency note is "optional."

    The only required input is model_path (defaults to spacepxl/Wan2.1-VAE-upscale2x); subfolder points at the diffusers subfolder with the config and weights. dtype defaults to bfloat16. vae_tile_blend (cosine, default) swaps the decoder's linear tile blending for a C1-smooth cosine blend so tiled decodes don't show faint grid lines - the source implements it as a patch on the VAE's blend functions.

    The two knobs that actually matter

    downsample_to_1x is where this node stops being an upscale and becomes a supersampling pass. Turn it on and the node decodes at 2×, then Lanczos-downsamples back to your generation's native 1× size. You don't get more pixels - you get the upscale decoder's sharper, GAN-trained detail at the size you asked for, which the README reports as usually cleaner than the Wan 2.1 VAE at the same output. That's the quality-pass mode, and it applies to the final decode only (via Ultra's upscale_vae_mode or the standalone Upscale Decode node), never inter-stage. blur_sigma is the taste knob on top of it: it blurs at 2× before the downsample, standard supersampling order. The tooltip says 0 is a good default because Lanczos already anti-aliases; raise it only if you want a softer result.

    Because downsample_to_1x and blur_sigma are stashed on the VAE object itself, they travel with it into every consumer - you set them once here and every node downstream behaves.

    Install

    It ships in Krea2_ComfyUI_Advanced (Eric Hiss / EricRollei):

    cd ComfyUI/custom_nodes
    git clone https://github.com/EricRollei/Krea2_ComfyUI_Advanced
    

    Restart, or use ComfyUI Manager. The pack needs the diffusers build with Krea2Pipeline from the README, and the upscale VAE itself downloads on first use.

    Where people get burned

    The README is unusually blunt here: the plain s2-s3/both modes on the Ultra node force a 4× area blow-up and ignore upscale_to_stage3, which is the usual cause of a run ballooning past 20 MP. Prefer the "… with downsample" variants unless a literal resolution gain is the point. And read the resolution-chain readout on the Ultra node - it flags every field the VAE is overriding, so a surprise 4k isn't a mystery.

    CategoryEric/Krea2

    Inputs (6)

    NameTypeDefaultDescription
    model_pathSTRINGspacepxl/Wan2.1-VAE-upscale2xHuggingFace model ID or local path.
    subfolderoptSTRINGdiffusers/Wan2.1_VAE_upscale2x_imageonly_real_v1Subfolder containing config.json + weights. Blank if model_path is already the dir.
    dtypeoptCOMBObfloat163 options: bfloat16, float16, float32
    vae_tile_blendoptCOMBOcosineTile-seam blending when tiling is active. cosine = C1-smooth (no grid lines).
    downsample_to_1xoptBOOLEANfalseDecode at 2x (this VAE's native output) then Lanczos-downsample back to the generation's native 1x size, instead of returning the full 2x image. Trades the literal resolution gain for this decoder's sharper/GAN-trained detail at your original output size - a supersampling-style quality pass, not an upscale. Applies to the FINAL decode only (upscale_vae_mode='final_decode'/'both' on Ultra, or the standalone Upscale Decode node) - never to inter-stage upscaling, which exists specifically to gain resolution between stages.
    blur_sigmaoptFLOAT0.00–5Gaussian blur sigma applied at 2x, BEFORE the Lanczos downsample (standard supersampling order: blur to anti-alias, then resize). 0 = off - Lanczos' own resampling filter already does reasonable anti-aliasing on its own, so this is an extra taste knob, not a required step. Only used when downsample_to_1x is on.

    Outputs (1)

    NameTypeDescription
    upscale_vaeUPSCALE_VAE