Eric Qwen Upscale VAE Loader (2×)
Free 2× upscaling, courtesy of a Wan2.1 VAE
- upscale_vae
Here's a genuinely weird and wonderful trick: this loader pulls in a decoder fine-tune of the Wan2.1 VAE - a model from an entirely different family - and uses it to decode Qwen-Image latents at 2× the resolution. For free. No extra diffusion steps, no upscaler pass, no second model running denoising. It's super-resolution that happens inside the VAE decode, and it works because of an architectural accident.
Why this works at all
The Wan2.1 and Qwen-Image VAEs are architecturally identical (AutoencoderKLWan / AutoencoderKLQwenImage) and, crucially, share the same latent space. Alibaba's video team and image team apparently converged on the same VAE design, and spacepxl (a well-known VAE-utils author) exploited that with Wan2.1-VAE-upscale2x: a decoder-only fine-tune that outputs 12 channels instead of 3. After decode, a pixel_shuffle(12→3, 2×) operation rearranges those 12 channels into a 2× larger image. You're literally getting twice the spatial resolution out of the same latent code.
Community reception backs this up - the thread about using this VAE to improve skin texture in Qwen-family images (Krea 2) frames it as a strict upgrade, with one commenter noting the Wan VAE "had visibly better results already compared to qwen vae." The model is Apache-2.0 and only ~0.5 GB, which is absurd value for what it does.
What it feeds into
The node itself just loads the VAE and keeps it on CPU until something asks for a decode. Its output is an UPSCALE_VAE object that plugs into the upscale_vae input on the pack's UltraGen or UltraGen Inpaint CN nodes. Alone it does nothing; paired with those nodes it enables four modes via upscale_vae_mode:
disabled- ignored, the safe defaultfinal_decode- the final decode uses the 2× VAE; output is 2× the last stage's resolutioninter_stage- decode an intermediate stage at 2×, re-encode, and feed that bigger canvas to the next stageboth- both of the above, stacking for 4× total (that's how the pack claims 50 MP+ outputs)
Inputs & settings
Required: model_path - defaults to spacepxl/Wan2.1-VAE-upscale2x and downloads on first run (~0.5 GB into your HF cache). Optional: subfolder (points at diffusers/Wan2.1_VAE_upscale2x_imageonly_real_v1 by default; leave it unless you've downloaded the repo yourself), dtype (bfloat16 recommended), and vae_tile_blend (cosine - a C¹-smooth blend that kills faint tiling grid lines on large decodes, where the plain linear mode can show seams).
Install & gotchas
Standard pack install - ComfyUI Manager (search "Eric Qwen-Edit") or git clone https://github.com/EricRollei/Eric_Qwen_Edit_Experiments.git into custom_nodes/. Two things trip people up. First, this pack pins diffusers>=0.34,<0.38 and transformers>=4.50,<5 in its requirements - the transformers cap is deliberate (transformers 5.x broke something diffusers 0.37 still imports), so don't "fix" those pins. Second, the upscale VAE is only worth adding if you're already running UltraGen and chasing big outputs; on a modest card, a 2× decode plus tiling can be slower than you'd hope even though the upscale itself is free. It's a quality lever, not a speed hack.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | STRING | spacepxl/Wan2.1-VAE-upscale2x | HuggingFace model ID or local path. Default: spacepxl/Wan2.1-VAE-upscale2x |
| subfolderopt | STRING | diffusers/Wan2.1_VAE_upscale2x_imageonly_real_v1 | Subfolder within the repo containing config.json + model weights. Leave blank if model_path already points to the correct directory. |
| dtypeopt | COMBO | bfloat16 | Model precision. bfloat16 recommended. |
| vae_tile_blendopt | COMBO | cosine | Tile-seam blending when tiling is active. • cosine — C¹-smooth; eliminates faint grid lines. • linear — original diffusers behaviour. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| upscale_vae | UPSCALE_VAE | — |