Diffusers documentation

LTX2VideoDiffusionDecoderModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LTX2VideoDiffusionDecoderModel

O decodificador de vídeo por difusão introduzido no LTX-2.5 pela Lightricks. Estágios de atenção de vizinhança fazem o upsample do latente em um volume de contexto, e um estágio final remove o ruído dos pixels condicionado a esse contexto.

É um decodificador, não um autoencoder: a codificação permanece com AutoencoderKLLTX2Video, cujo espaço latente este consome inalterado, de modo que os latentes são intercambiáveis entre o decodificador convolucional e este. Por ser ele próprio um modelo de difusão, é acionado por LTX2VideoDiffusionDecodePipeline em vez de ser passado como vae de um pipeline: execute qualquer pipeline LTX-2 com output_type="latent" e, em seguida, decodifique.

import torch
from diffusers import LTX2Pipeline, LTX2VideoDiffusionDecodePipeline, LTX2VideoDiffusionDecoderModel

pipe = LTX2Pipeline.from_pretrained("Lightricks/LTX-2.5-Diffusers", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"
latents = pipe(prompt="a potter shaping a clay vase", output_type="latent").frames

decoder = LTX2VideoDiffusionDecoderModel.from_pretrained(
    "Lightricks/LTX-2.5-Diffusers", subfolder="diffusion_decoder", dtype=torch.bfloat16
).to("cuda")
decode_pipe = LTX2VideoDiffusionDecodePipeline(diffusion_decoder=decoder, scheduler=pipe.scheduler)

# `denormalize=False`: `output_type="latent"` already applied the latent statistics, so applying them
# again here would scale every channel by its std a second time.
# The decoder also draws the noise it denoises, so decoding is only reproducible with a generator.
video = decode_pipe(
    latents, generator=torch.Generator("cuda").manual_seed(0), denormalize=False
).frames[0]

vae é um componente opcional no pipeline de decodificação: ele é consultado apenas para as estatísticas latentes quando denormalize=True, e o decodificador possui as suas próprias, de modo que um fluxo de trabalho somente de decodificação não precisa carregar um segundo autoencoder.

Backends de atenção

A janela de atenção de vizinhança é expressa como uma BlockMask, portanto o decodificador é executado no backend de atenção flex por padrão e não requer nenhuma dependência extra. O PyTorch não compila o flex_attention a menos que você solicite, e sem compilação ele materializa a matriz de pontuação completa — o que é impraticável em comprimentos de sequência em resolução total. Para esses casos, compile o decodificador ou alterne para os kernels do NATTEN, que também são usados pela implementação original. O processador busca o NATTEN do Hub (shi-labs/natten) por meio do pacote kernels, portanto é necessário pip install kernels em vez de uma compilação local do NATTEN:

from diffusers.models.autoencoders.ltx2_diffusion_decoder import LTX2VideoVaeNeighborhoodNattenProcessor

decoder.set_attn_processor(LTX2VideoVaeNeighborhoodNattenProcessor())

Obtendo o código de download do kernel do Hub, para que o processador gere um erro quando o código remoto estiver desabilitado globalmente com DIFFUSERS_DISABLE_REMOTE_CODE=true.

Todos os módulos de atenção no decodificador são a mesma atenção de vizinhança (diferenças por estágio, como o tamanho do kernel, ficam no módulo, não no processador), portanto set_attn_processor os substitui todos por uma única instância compartilhada.

Alterar o backend (decoder.set_attention_backend(...)) para qualquer valor que não seja flex gera o seguinte erro: nenhum outro backend aceita o BlockMask. Use o processador NATTEN acima em vez disso.

Tiling

decoder.enable_tiling() decodifica em tiles sobrepostos que são mesclados novamente, limitando a memória de pico pelo tamanho do tile em vez do tamanho do vídeo. Os estágios iniciais de upsampling, de baixo custo, ainda veem o latente completo — apenas o último estágio de upsampling e o estágio de difusão, que dominam a memória de decodificação, são executados por tile —, portanto, o tiling altera a saída apenas perto das bordas dos tiles. Como o estágio de difusão remove o ruído de cada tile separadamente, uma decodificação com tiles não reproduz exatamente o resultado sem tiles; os tamanhos padrão de tile e sobreposição correspondem aos da implementação de referência. A atenção de vizinhança rejeita qualquer grade menor que seu kernel, de modo que um tile remanescente final é mesclado com seu vizinho em vez de ser decodificado isoladamente.

LTX2VideoDiffusionDecoderModel

classe diffusers.LTX2VideoDiffusionDecoderModel

< >

( out_channels: int = 3latent_channels: int = 128patch_size: int = 4scaling_factor: float = 1.0decoder_head_dim: int = 64decoder_stage_channels: tuple = (2048, 1024, 512, 512, 256)decoder_stage_depths: tuple = (4, 6, 4, 2, 8)decoder_stage_kernels: tuple = ((3, 7, 7), (3, 7, 7), (3, 5, 5), (3, 5, 5))decoder_upsample_strides: tuple = ((1, 2, 2), (2, 1, 1), (2, 2, 2), (2, 2, 2))decoder_upsample_channel_reductions: tuple = (2, 2, 1, 2)decoder_stage5_kernel: tuple = (11, 11, 11)decoder_t_emb_dim: int = 384decoder_timestep_scale_multiplier: float = 1000.0decoder_model_output_type: str = 'x0'decoder_num_inference_steps: int = 1spatial_compression_ratio: int = 32temporal_compression_ratio: int = 8 )

O decodificador de vídeo por difusão LTX-2, introduzido no LTX-2.5.

Este é um decodificador, não um autoencoder: ele não possui um codificador e não pode produzir latentes. A codificação permanece com o AutoencoderKLLTX2Video, cujo espaço latente este consome sem alterações, de modo que os latentes são intercambiáveis entre o decodificador convolucional e este.

Ele também é um modelo de difusão, e não um decodificador determinístico — ele remove o ruído dos pixels condicionado a um volume de contexto construído a partir dos latentes —, motivo pelo qual é acionado por LTX2VideoDiffusionDecodePipeline em vez de ser passado como vae de um pipeline.

As estatísticas latentes são mantidas aqui como buffers para que o pipeline de decodificação possa desnormalizar sem carregar um segundo autoencoder apenas para dois vetores.

Este modelo herda de ModelMixin. Consulte a documentação da superclasse para seus métodos genéricos implementados para todos os modelos (como download ou salvamento).

decode

< >

( z: Tensorgenerator: typing.Optional[torch.Generator] = Nonenum_inference_steps: int | None = Nonereturn_dict: bool = True )

Decodifica um lote de latentes.

z é esperado que já esteja desnornormalizado (o pipeline aplica latents_mean / latents_std), correspondendo a AutoencoderKLLTX2Video. Este decodificador remove o ruído, portanto, passe generator para reprodutibilidade.

enable_tiling

< >

( tile_sample_min_height: int | None = Nonetile_sample_min_width: int | None = Nonetile_sample_min_num_frames: int | None = Nonetile_sample_stride_height: int | None = Nonetile_sample_stride_width: int | None = Nonetile_sample_stride_num_frames: int | None = None )

Parâmetros

  • tile_sample_min_height (int, opcional) — A altura de um tile decodificado, em pixels.
  • tile_sample_min_width (int, opcional) — A largura de um tile decodificado, em pixels.
  • tile_sample_min_num_frames (int, opcional) — O número de quadros de um tile decodificado.
  • tile_sample_stride_height (int, opcional) — A distância em pixels entre as partes superiores de duas tiles verticais consecutivas; a diferença em relação a tile_sample_min_height é a sobreposição mesclada.
  • tile_sample_stride_width (int, opcional) — A distância em pixels entre as bordas esquerda de duas tiles horizontais consecutivas.
  • tile_sample_stride_num_frames (int, opcional) — A distância em quadros entre os inícios de duas tiles temporais consecutivas.

Ative a decodificação em blocos (tiled). Os estágios determinísticos de aumento de resolução (upsampling) antes do último sempre processam o latente completo (eles são executados em baixa resolução e têm baixo custo); o último estágio e os blocos de difusão do estágio 5 — que dominam a memória de decodificação — são executados em blocos sobrepostos cujas emendas são mescladas linearmente.

disable_tiling

< >

( )

Desative a decodificação em blocos, retornando à decodificação do vídeo inteiro em uma única passagem.

forward

< >

( z: Tensorgenerator: typing.Optional[torch.Generator] = Nonenum_inference_steps: int | None = Nonereturn_dict: bool = True ) → DecoderOutput or tuple

Parâmetros

  • z (torch.Tensor) — Latentes de forma (B, C, F, H, W), esperados para já estarem desnornalizados (o pipeline aplica latents_mean / latents_std), correspondendo a AutoencoderKLLTX2Video.
  • generator (torch.Generator, opcional) — Este decodificador remove o ruído, portanto, passe um gerador para tornar a decodificação reproduzível.
  • num_inference_steps (int, opcional) — Número de etapas de desruidamento. O padrão é o valor de configuração decoder_num_inference_steps do decodificador.
  • return_dict (bool, opcional, padrão True) — Se deve retornar um DecoderOutput em vez de uma tupla simples.

Retorna

DecoderOutput ou tuple

tiled_decode

< >

( z: Tensorgenerator: typing.Optional[torch.Generator] = Nonenum_inference_steps: int | None = None )

Decodifique um lote de latentes com o último estágio determinístico e o estágio de difusão executado por tile.

Os tiles ficam na grade que entra na última etapa determinística, na qual uma célula mapeia para um bloco fixo de pixels de saída; os tamanhos tile_sample_* são convertidos para essa grade, portanto devem ser múltiplos do tamanho da célula (8 px espacialmente e 2 frames temporalmente para a configuração de produção). Os tiles temporais seguem o mapeamento de frames causal: o tile contendo t=0 descarta o frame inicial duplicado do upsample temporal e apenas o tile contendo o fim do vídeo carrega o padding de borda do NATTEN.

Update on GitHub