CoolFace
Modelpublic

PrunaAI/PrunaVAED

sourceHugging Faceotherupdated 2mo agoView on Hugging Face
66likes
Model Card

<!-- header start --> <!-- 200823 --> <div style="width: auto; margin-left: auto; margin-right: auto"> <a href="https://docs.pruna.ai/en/stable/index.html" target="_blank" rel="noopener noreferrer"> <img src="https://imgur.com/rVAgqMY.png" alt="PrunaAI" style="width: 100%; min-width: 400px; display: block; margin: auto;"> </a> </div> <!-- header end -->

![GitHub](https://github.com/PrunaAI/pruna) &nbsp; ![Twitter/X](https://twitter.com/PrunaAI) &nbsp; ![LinkedIn](https://www.linkedin.com/company/pruna-ai) &nbsp; ![Discord](https://discord.com/invite/JFQmtFKCjd) &nbsp; ![P-Models](https://dashboard.pruna.ai/login?utmsource=huggingface&utmmedium=orgcard&utmcampaign=hf_traffic)

<div align="center">

<h1 style="color: #9334E9;">⚡ PrunaVAED</h1>

<h2>A drop-in replacement decoder for LTX-2.3</h2>

<h3> <span style="color: #9334E9;">1.7× faster</span> &nbsp;·&nbsp; <span style="color: #9334E9;">~50% lower peak VRAM</span> &nbsp;·&nbsp; Near-original visual quality </h3>

</div>

PrunaVAED directly replaces the video VAE decoder in [`diffusers/LTX-2.3-Diffusers`](https://huggingface.co/diffusers/LTX-2.3-Diffusers). The encoder and latent format remain unchanged, making it a drop-in upgrade for faster, more memory-efficient LTX-2.3 decoding.

Examples

Both columns decode the same LTX-2.3 latent from the distilled pipeline.

<table> <tr> <th align="center" width="50%">LTX-2.3 decoder</th> <th align="center" width="50%">⚡ PrunaVAED</th> </tr> <tr> <td width="50%"> <video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/Ltx23VAED/04MhZs7YN08-Scene-0048.mp4"> </video> </td> <td width="50%"> <video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/PrunaVAED/04MhZs7YN08-Scene-0048.mp4"> </video> </td> </tr> <tr> <td width="50%"> <video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/Ltx23VAED/FAfMSWi0FSA-Scene-0200.mp4"> </video> </td> <td width="50%"> <video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/PrunaVAED/FAfMSWi0FSA-Scene-0200.mp4"> </video> </td> </tr> </table>

<details> <summary><strong>More side-by-side comparisons</strong></summary>

<br>

<table> <tr> <th align="center" width="50%">LTX-2.3 decoder</th> <th align="center" width="50%">⚡ PrunaVAED</th> </tr> <tr> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/Ltx23VAED/8YSha7iU2ZI-Scene-1025.mp4"></video></td> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/PrunaVAED/8YSha7iU2ZI-Scene-1025.mp4"></video></td> </tr> <tr> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/Ltx23VAED/DZt-RtpcJZQ-Scene-0043.mp4"></video></td> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/PrunaVAED/DZt-RtpcJZQ-Scene-0043.mp4"></video></td> </tr> <tr> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/Ltx23VAED/9GDE5-rOOfk-Scene-0010.mp4"></video></td> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/PrunaVAED/9GDE5-rOOfk-Scene-0010.mp4"></video></td> </tr> <tr> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/Ltx23VAED/7y57zc-GvBA-Scene-0009.mp4"></video></td> <td width="50%"><video controls autoplay muted loop playsinline style="width:100%; display:block;" src="https://huggingface.co/PrunaAI/PrunaVAED/resolve/main/example/PrunaVAED/7y57zc-GvBA-Scene-0009.mp4"></video></td> </tr> </table> </details>

Benchmark

Metrics compare videos decoded from the same latents by the LTX-2.3 VAED and PrunaVAED. Two set of latents were generated with the full `ti2vid_two_stages` pipeline and the `distilled` pipeline (recommended).

<table class="w-full table-fixed"> <tr><th>Setting</th><th>Value</th></tr> <tr><td>Model</td><td>PrunaVAED</td></tr> <tr><td>Precision</td><td><code>bfloat16</code></td></tr> <tr><td>Batch size</td><td>1</td></tr> <tr><td>Device</td><td>NVIDIA H100 80GB</td></tr> <tr><td>Decode</td><td>Full (no tiling / rolling / <code>torch.compile</code>)</td></tr> </table>

<table class="w-full table-fixed"> <tr> <th>Clip length</th><th>LTX-2.3 VAED</th><th>PrunaVAED</th><th>Speedup</th> </tr> <tr> <td>5 s @ 720p</td><td align="right">841.3 ms</td><td align="right">500.2 ms</td><td align="right"><strong>1.68×</strong></td> </tr> <tr> <td>10 s @ 720p</td><td align="right">1670.7 ms</td><td align="right">998.0 ms</td><td align="right"><strong>1.67×</strong></td> </tr> <tr> <td>5 s @ 1080p</td><td align="right">1959.3 ms</td><td align="right">1152.1 ms</td><td align="right"><strong>1.7×</strong></td> </tr> <tr> <td>10 s @ 1080p</td><td align="right">4903 ms*</td><td align="right">2356 ms</td><td align="right"><strong>2.08×</strong></td> </tr> </table>

\* Tiling required on H100; 14533ms otherwise

<table class="w-full table-fixed"> <tr> <th>Latent set</th><th>Clips</th><th>PSNR ↑</th><th>LPIPS ↓</th><th>SSIM ↑</th><th>Δ-frame PSNR ↑</th> </tr> <tr> <td>Distilled two-stage · 720p</td><td align="right">200</td><td align="right"><strong>39.23</strong></td><td align="right"><strong>0.0087</strong></td><td align="right"><strong>0.9811</strong></td><td align="right"><strong>38.32</strong></td> </tr> <tr> <td>TI2Vid two-stage · 720p</td><td align="right">200</td><td align="right"><strong>40.34</strong></td><td align="right"><strong>0.0094</strong></td><td align="right"><strong>0.9823</strong></td><td align="right"><strong>40.06</strong></td> </tr> <tr> <td>Distilled two-stage · 1080p</td><td align="right">200</td><td align="right"><strong>41.06</strong></td><td align="right"><strong>0.0052</strong></td><td align="right"><strong>0.9876</strong></td><td align="right"><strong>40.43</strong></td> </tr> </table>

Δ-frame PSNR is PSNR on consecutive-frame differences (temporal consistency).

Quickstart

End-to-end smoke demo: generate a short video with the diffusers LTX-2.3 distilled two-stage pipeline, then decode the same latent with the stock LTX-2.3 VAE and with PrunaVAED. Writes two mp4s and prints decode time (ms). Needs a CUDA GPU.

bash
# 1. Install the Hugging Face CLI
pip install hf

# 2. Download this repo
hf download PrunaAI/PrunaVAED --local-dir PrunaVAED
cd PrunaVAED

# 3. Install dependencies
pip install -r requirements-demo.txt

# 4. Run the demo (~1080p, ~5 s @ 24 fps)
python demo/demo_distilled_decode.py

Outputs land in outputs/demo_distilled/ (ltx23.mp4, prunavaed.mp4). Edit PROMPT / resolution at the top of demo/demo_distilled_decode.py if needed.

Architecture

PrunaVAED is bitwise identical to LTX 2.3 VAED from conv_in to up_blocks.0. Pruning starts at up_blocks.1.

StageChannel reduction
up_blocks.0unchanged
up_blocks.125%
up_blocks.250%
up_blocks.350%
Teacher (LTX-2.3)PrunaVAED
Encoder params318.9 M318.9 M (unchanged)
Decoder params407.2 M345.0 M (−15%)
Total VAE params726.1 M663.9 M

prunavaed/patch_diffusers.py provides the required compatibility shim for the pinned diffusers version.

Limitations

  • Evaluated on 4-second clips at 24 fps.
  • Benchmarked on one H100 80GB with bfloat16 and batch size 1.
  • Speed and VRAM vary with hardware, resolution, batch size, and software.
  • Evaluated only on two differents pipeline of LTX 2.3 (`ti2vid_two_stages` pipeline and the `distilled`)
  • The weights can be adapted to the custom `LTX-2` library without retraining, but no implementation is provided for this yet.

What this is not

  • Not a full T2V model.
  • Not a replacement for the LTX denoiser/generator.
  • Not compatible with arbitrary VAE latents.
  • Not bit-exact with the original decoder.

License

PrunaVAED is a derivative of LTX-2.3 and is distributed under the [LTX-2 Community License Agreement](LICENSE). Review its use restrictions and commercial terms before using or redistributing the model.

Helper code adapted from Hugging Face diffusers retains its Apache-2.0 attribution; see `NOTICE`.

What's next?

  • Use PrunaVAED to speed up LTX-2.3 decoding.
  • Compress your own models with Pruna and give us a ⭐️ for more efficiency!
  • Want to use our optimized video model right away? Check P-Video and P-Video documentation.

<style> .model-button { display: inline-flex; flex-direction: row; justify-content: center; align-items: center; gap: 8px;

padding: 8px 20px; border: none; border-radius: 8px;

background: #9334e9; color: #ffffff;

font-size: 14px; font-weight: 400; line-height: 1; text-decoration: none; white-space: nowrap; cursor: pointer;

box-sizing: border-box; overflow: visible; opacity: 1; } </style>

<a href="https://dashboard.pruna.ai/login?utmsource=huggingface&utmmedium=modelcard&utmcampaign=hf_traffic" class="model-button">Try our models</a>