Latent Preview (Tiny VAE)
Watch your video render — without the full VAE decode
- latent
- audio_vae
- latent
Here's the pain this node solves: video generation in ComfyUI takes minutes, and for most of that time you are generating blind. The live preview runs the full VAE decode on every frame at full resolution, which is slow enough that many people just disable previews and stare at a progress bar. The LTX-2 docs in the KB make the complaint explicit - the rebuilt VAE broke the tiny-VAE preview trick and users were "generating blind again" on clips that take 5–15 minutes. LatentPreviewTinyVAE is the answer: decode the latent with a tiny VAE - a fraction of the size, producing a low-res WebP animation - instead of the full model. You watch the render happen at maybe a tenth of the cost.
It's a pass-through node: latent in, latent out, with a movie playing on the node body while you wait. The input latent reaches the sampler unchanged - the node only looks.
How it works
The node grabs your latent, strips out audio channels if it's an LTX-style audio+video latent (via ComfyUI's LTXVSeparateAVLatent), then decodes it with a tiny VAE you pick from models/vae_approx - the TAESD-style family of small decoders, with video-capable temporal decoders supported too. The decoded frames are capped at 512px, saved as an animated WebP at fast encode settings, and pushed to the node via a websocket event. Then the run pauses until you click the Continue button on the node. That's deliberate: you get a real look at the frames before the generation carries on, and a "this is garbage, kill it" checkpoint instead of wasting five more minutes.
The frames input (all/50%/25%/10%) subsamples how many frames get decoded - useful on long clips where decoding every frame defeats the purpose - and fps controls the animation speed, with a correction factor for video latents whose temporal layout differs from display frames.
Inputs and outputs
latent(LATENT) - the latent to preview. Passed through unchanged.tiny_vae- dropdown of decoders inmodels/vae_approx. Defaults tonone, but you must select a real decoder or the node errors.fps(INT, 1–60, default 24) - preview animation speed.frames- all / 50% / 25% / 10%.
One output: latent (LATENT), identical to the input.
Installing it
Part of ComfyUI-lhyNodes - install the pack, then put a tiny VAE in ComfyUI/models/vae_approx. The pack ships none. Grab a TAESD decoder (taesd_decoder.pth, taesdxl_decoder.pth) or a video-capable temporal tiny VAE from the usual sources and drop it there, then restart ComfyUI so the dropdown picks it up.
- ComfyUI Manager → search
lhyNodes→ Install, restart. - Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/lihaoyun6/ComfyUI-lhyNodes.git
python -m pip install -r ComfyUI-lhyNodes/requirements.txt
Where people get burned
The default tiny_vae = "none" is a trap - the node raises a clear "Could not load Tiny VAE" error until you actually select a decoder, so a fresh install appears broken until you realize the dropdown is the point. Second, the tiny decoder is approximate: low-res, slightly mushy, and (like any TAESD preview) not a faithful color match to the final VAE decode - it's for judging composition and motion, not final quality, so don't panic when the preview looks soft. Finally, it only decodes one latent at a time and it blocks the graph on that Continue button, so it's a monitoring node for interactive runs, not something to leave in an unattended batch queue.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| tiny_vae | COMBO | none | 1 options: none |
| fps | INT | 241–120 | — |
| frames | COMBO | all | 4 options: all, 50%, 25%, 10% |
| pause | BOOLEAN | true | — |
| audio_vaeopt | VAE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |