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:
taeh3 weights (currently supported in ComfyUI nightly, ComfyUI-KJNodes and ComfyUI-bleh)taehv1_5 weights (example notebook).
taehv1_5_super to get higher-quality output at the cost of slightly more compute.taew2_1 weights (see the Wan 2.1 example notebook).taew2_2 weights (example notebook).
taew2_2_super to get higher-quality output at the cost of slightly more compute.taew2_1 weights since Wan 2.2 14B still uses the older Wan 2.1 VAE.taew2_1 weights (since Qwen Image uses the Wan 2.1 VAE encoder).taecvx weights (example notebook).taehv weights (example notebook).taeos1_3 weights.taeltx_2 weights (example notebook).taeltx2_3 weights
The main model weight .pth files are in the repository root directory. Converted .safetensors files are located in the safetensors subdirectory (TAEHV can load either format, although .safetensors files require the optional safetensors package).
TAEHV picks the matching architecture based on the checkpoint filename. If you've renamed a checkpoint file, pass the original name explicitly instead, like TAEHV("my_renamed_weights.pth", arch_name="taeh3").
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:
stable-diffusion.cpp thanks to this PR from stduhpfIf 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:
latents_mean and latents_std each 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.
https://github.com/user-attachments/assets/0b78cce8-7ade-4ac0-8c80-fd979f8e8aa3
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}
59 commits
1 commits
Python
100.0%
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:
taeh3 weights (currently supported in ComfyUI nightly, ComfyUI-KJNodes and ComfyUI-bleh)taehv1_5 weights (example notebook).
taehv1_5_super to get higher-quality output at the cost of slightly more compute.taew2_1 weights (see the Wan 2.1 example notebook).taew2_2 weights (example notebook).
taew2_2_super to get higher-quality output at the cost of slightly more compute.taew2_1 weights since Wan 2.2 14B still uses the older Wan 2.1 VAE.taew2_1 weights (since Qwen Image uses the Wan 2.1 VAE encoder).taecvx weights (example notebook).taehv weights (example notebook).taeos1_3 weights.taeltx_2 weights (example notebook).taeltx2_3 weights
The main model weight .pth files are in the repository root directory. Converted .safetensors files are located in the safetensors subdirectory (TAEHV can load either format, although .safetensors files require the optional safetensors package).
TAEHV picks the matching architecture based on the checkpoint filename. If you've renamed a checkpoint file, pass the original name explicitly instead, like TAEHV("my_renamed_weights.pth", arch_name="taeh3").
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:
stable-diffusion.cpp thanks to this PR from stduhpfIf 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:
latents_mean and latents_std each 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.
https://github.com/user-attachments/assets/0b78cce8-7ade-4ac0-8c80-fd979f8e8aa3
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}
59 commits
1 commits
Python
100.0%