TAEHV is a Tiny AutoEncoder for Hunyuan Video (and other similar video models). TAEHV can encode and decode latents into videos more cheaply (in time & memory) than the full-size video VAEs, at the cost of slightly lower quality.
Here's a comparison of the output & memory usage of the Full Hunyuan VAE vs. TAEHV during decoding:
| Decoder AE | Full Hunyuan VAE | TAEHV |
|---|---|---|
| Decoded Video (converted to GIF) |
![]() |
![]() |
| Runtime (in fp16, on GH200) |
~2-3s for decoding 61 frames of (512, 320) video | ~0.5s for decoding 61 frames of (512, 320) video. Can be even faster with the right settings |
| Memory (in fp16, on GH200) |
~6-9GB Peak Memory Usage![]() |
<0.5GB Peak Memory Usage![]() |
See the profiling notebook for details on this comparison or the example notebook for a simpler demo.
To use TAEHV with different video models, you can load the different model weight files from this repo:
- For MiniMax H3, load the
taeh3weights (currently supported in ComfyUI nightly, ComfyUI-KJNodes and ComfyUI-bleh) - For Hunyuan Video 1.5, load the
taehv1_5weights (example notebook).- You can also use
taehv1_5_superto get higher-quality output at the cost of slightly more compute.
- You can also use
- For Wan 2.1, load the
taew2_1weights (see the Wan 2.1 example notebook). - For Wan 2.2, load different files depending on model scale:
- For Wan 2.2 5B, load the
taew2_2weights (example notebook).- You can also use
taew2_2_superto get higher-quality output at the cost of slightly more compute.
- You can also use
- For Wan 2.2 14B, load the
taew2_1weights since Wan 2.2 14B still uses the older Wan 2.1 VAE.
- For Wan 2.2 5B, load the
- for Qwen Image, load the
taew2_1weights (since Qwen Image uses the Wan 2.1 VAE encoder). - For CogVideoX, load the
taecvxweights (example notebook). - For Hunyuan Video 1, load the
taehvweights (example notebook). - For Open-Sora 1.3, load the
taeos1_3weights. - For LTX-2, load the
taeltx_2weights (example notebook). - For LTX-2.3, load the
taeltx2_3weights - For Mochi 1 and SVD (which use different architectures), see the other repos TAEM1 and TAESDV.
The main model weight .pth files are in the repository root directory. Converted .safetensors files are located in the safetensors subdirectory.
If there's another open video model that would benefit from a TAEHV version, please file an issue (or, worst-case, try training your own).
TAEHV is available:
- In ComfyUI
- In main, thanks to this PR from Kijai
- Via the ComfyUI-WanVideoWrapper + VideoHelperSuite nodes thanks to Kijai and AustinMroz
- Via the ComfyUI-Bleh nodes thanks to blepping
- In
stable-diffusion.cppthanks to this PR from stduhpf - In SDNext thanks to vladmandic
- In the Wan2.1 Self-Forcing demo thanks to Guande He and Xun Huang
If you've added TAEHV support elsewhere, LMK and I can add a link here.
TAEHV is fast and well-suited for live previewing or interactive video, but TAEHV doesn't yet match the quality of the full-size VAEs.
You can see detailed quality comparisons of TAEHV vs full-size VAEs here.
You can use TAEHV with Diffusers by applying a small bit of wrapper code (example notebook). If you're writing new code involving both TAEHV and Diffusers, keep the following conventions in mind:
- TAEHV stores image values in the range [0, 1], whereas Diffusers uses [-1, 1].
- TAEHV stores videos in NTCHW dimension order (time, then channels), while Diffusers stores videos in NCTHW dimension order.
- TAEHV does not use any latent scales / shifts (TAEHV encodes / decodes exactly what diffusion models use), whereas Diffusers requires explicitly applying a
latents_meanandlatents_stdeach time you encode or decode something.
You can disable TAEHV's temporal or spatial upscaling to get even-cheaper decoding.
TAEHV(decoder_time_upscale=(False, False), decoder_space_upscale=(True, True, True))TAEHV(decoder_time_upscale=(False, False), decoder_space_upscale=(False, False, False))If you have a powerful GPU or are decoding at a reduced resolution, you can also set parallel=True in TAEHV.decode_video to decode all frames at once (which is faster but requires more memory).
TAEHV's default encode_video and decode_video methods process the entire input sequence before returning the entire result.
For live / real-time scenarios (like video-to-video or world modeling), you'll want to use the StreamingTAEHV wrapper, which processes each input timestep sequentially and streams intermediate outputs as soon as they're ready.
You can see example StreamingTAEHV usage in the streaming demo notebook or in taehv.py's StreamingTAEHV docstrings.
For taehv1_5 and taew2_2, you can use the larger taehv1_5_super and taew2_2_super weights to get higher-quality video output at the cost of slightly increased compute (and higher parameter count). These super models are intended for realtime world modeling and video usecases where TAEHV output serves as the final output (rather than a temporary preview).
Here's a side-by-side comparison using Overworld's Waypoint-1.5; though neither VAE is perfect, TAEHV1.5-Super does a better job at decoding fine details and keeping them visually-stable.
taehv1_5_super_demo_trimmed.mp4
If you find TAEHV useful in your research, you can cite the TAEHV repo as a web link:
@misc {BoerBohan2025TAEHV,
author = {Boer Bohan, Ollin},
title = {TAEHV: Tiny AutoEncoder for Hunyuan Video},
year = {2025},
howpublished = {\url{https://github.com/madebyollin/taehv}},
}The TAEHV repo contents change over time, so I recommend also noting the latest commit hash and access date in a note field, e.g.
note = {Commit: \texttt{5ce7381}, Accessed: 2025-09-05}





