VAE Force Individual Images (Image Saver)
When Qwen-Image's VAE Thinks Your Batch Is a Video
- vae
- VAE
Here's a genuinely weird failure mode you can hit with modern image models: you feed VAE Encode a batch of a few images through a Qwen-family VAE, and what comes back is mangled - frames collapsed, images truncated into each other, only the first one looking right. It isn't your workflow. Qwen-Image's VAE is secretly a video VAE, and ComfyUI decided your batch dimension was a time dimension. VAE Force Individual Images is a one-node workaround (it exists because of ComfyUI issue #14039).
Why this happens
Qwen-Image's autoencoder is built on the Wan 2.1 video VAE - same 3D causal architecture that compresses time as well as space, with a frozen encoder and a decoder fine-tuned for legible text. ComfyUI detects that and loads it as a latent_dim == 3 (i.e. video-format) VAE. In ComfyUI's comfy/sd.py, when such a VAE encodes pixel data that has no explicit time dimension, it has to guess what to do with the batch. Its behavior hinges on a flag called not_video:
- if the VAE is not marked
not_video(the default for a video VAE), the encode path reshapes the batch into the frame axis - your stack of independent images becomes one clip; - if it is marked
not_video, each image gets its own length-1 clip dimension and encodes on its own.
A normal image model never trips this because its VAE is 2D. An image model whose VAE is secretly a video VAE - Qwen-Image, Qwen-Image-Edit, and the other models sharing that Wan-derived autoencoder - trips it the moment your batch size is bigger than one.
What the node actually does
The whole thing is three lines: it takes a VAE input, makes a shallow copy with copy.copy(), sets not_video = True on the copy, and hands you that copy as its VAE output.
Two details make that a good fix. First, the copy is shallow - same underlying weights, no reload, no doubled VRAM, just a new object with one attribute flipped. Second, the original VAE is untouched, so anything else wired to it keeps behaving normally. You route the patched output into whatever node does the encoding: VAE Encode, VAE Encode for Inpaint, or a node that encodes internally like Ultimate SD Upscale.
That last case is why the node looks the way it does. Earlier versions shipped as a "VAE Encode (Individual Images)" node that did the encode itself, but that only fixed your own explicit encode node - anything that encoded internally stayed broken. So the author reworked it in v1.25.2 to output a patched VAE instead, which you can drop in front of any encoder. Same effect, wider reach.
When you need it - and when you don't
- Batch of 2+ images through a Qwen-family VAE: this is the fix. If you see the frame-truncation symptom, put this node between your VAE loader and the encode step.
- Single-image encodes: nothing to fix, skip it.
- Classic 2D image VAEs (SD 1.5, SDXL, Flux): this node is a no-op. The
not_videoflag is only consulted in the 3D encode branch, so for a regular VAE you get a passthrough that changes nothing. Leave it in or delete it - doesn't matter. - The "Qwen texture looks smeared, swap in the Wan decoder" complaint: unrelated. That's a decoder-quality debate, not a batch-handling bug, and this node won't touch it.
Because it does nothing unless it needs to, it's a safe thing to have sitting in a template. The symptom it fixes is specific and unambiguous: batch encoding through a video-architecture VAE comes out wrong, and this node makes each image encode as itself.
Installing it
It ships inside ComfyUI Image Saver, so install the pack. Easiest via ComfyUI Manager: search "ComfyUI Image Saver". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/alexopus/ComfyUI-Image-Saver
cd ComfyUI-Image-Saver
pip install -r requirements.txt
Then restart ComfyUI. The only dependency is piexif; no models to download. You'll find the node under ImageSaver/VAE in the menu.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| vae | VAE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VAE | VAE | — |