Skip to content

gen3c_tokenizer_vae

GEN3C tokenizer-backed VAE adapter.

This wrapper loads the available tokenizer checkpoint (tokenizer.pth) and adapts it to GEN3C's latent-time contract (T=16 for 121 output frames).

Why this exists: - The converted GEN3C bundle includes tokenizer-style VAE weights, not a standard diffusers Wan VAE contract. - GEN3C diffusion expects 8x temporal compression (121 -> 16), while the available tokenizer checkpoint follows a 4x temporal path.

To bridge this at inference time, we: - keep the inner tokenizer model as-is, - downsample encoded latent time from inner-T to target-T for DiT input, - upsample generated latent time back to inner-T before decoding.

Classes

fastvideo.models.vaes.gen3c_tokenizer_vae.AutoencoderKLGen3CTokenizer

AutoencoderKLGen3CTokenizer(inner: Module, *, target_temporal_compression: int = 8, inner_temporal_compression: int = 4, spatial_compression_factor: int = 8, pixel_chunk_duration: int = 121)

Bases: Module

GEN3C VAE wrapper with temporal contract adaptation.

Interface contract: - encode(x) returns normalized latents in the target temporal layout. - decode(z) expects normalized latents in the target temporal layout.

Source code in fastvideo/models/vaes/gen3c_tokenizer_vae.py
def __init__(
    self,
    inner: nn.Module,
    *,
    target_temporal_compression: int = 8,
    inner_temporal_compression: int = 4,
    spatial_compression_factor: int = 8,
    pixel_chunk_duration: int = 121,
) -> None:
    super().__init__()
    self.inner = inner
    self.config = getattr(inner, "config", None)
    self._target_temporal_compression = int(target_temporal_compression)
    self._inner_temporal_compression = int(inner_temporal_compression)
    self._spatial_compression_factor = int(spatial_compression_factor)
    self._pixel_chunk_duration = int(pixel_chunk_duration)

Functions: