Diffusers documentation

Echo

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

Echo

Echo é um modelo de geração de vídeos longos. Ele suporta um primeiro frame limpo opcional, slots de memória de imagem/áudio ordenados e um amostrador estocástico de poucos passos de Distribution Matching Distillation (DMD). O pipeline gera vídeo e áudio sincronizados.

O Echo é implementado como um ModularPipeline, de modo que seus blocos de codificação de texto, condicionamento de memória, desruidificação estocática DMD e decodificação podem ser executados como um fluxo de trabalho completo ou compostos de forma independente.

Inferência

Carregue diretamente o checkpoint oficial jdopensource/JoyAI-Echo. Ele usa o text encoder e o tokenizer de google/gemma-3-12b-it. O repositório Gemma é restrito, portanto, aceite sua licença e autentique-se no Hugging Face antes de carregar o pipeline.

O modelo liberado usa 241 quadros em seu exemplo de vídeo longo. As coordenadas de RoPE do vídeo permanecem na taxa de treinamento de 24 fps, independentemente da taxa do contêiner de saída.

import torch
import torchaudio
from PIL import Image

from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import encode_video

manager = ComponentsManager()
pipe = ModularPipeline.from_pretrained("jdopensource/JoyAI-Echo", components_manager=manager)
pipe.load_components(dtype={"default": torch.bfloat16, "audio_vae": torch.float32})
manager.enable_auto_cpu_offload(device="cuda")
pipe.vae.enable_tiling()

first_frame = Image.open("first_frame.png").convert("RGB")
memory_images = [Image.open(path).convert("RGB") for path in ["memory_0.png", "memory_1.png"]]
memory_audio_with_rates = [torchaudio.load(path) for path in ["memory_0.wav", "memory_1.wav"]]
memory_audio = [waveform for waveform, _ in memory_audio_with_rates]
memory_audio_rates = [sample_rate for _, sample_rate in memory_audio_with_rates]

output = pipe(
    prompt="A cinematic dialogue scene in a quiet cafe.",
    image=first_frame,
    memory_images=memory_images,
    memory_audio_waveforms=memory_audio,
    memory_audio_sample_rates=memory_audio_rates,
    width=1280,
    height=736,
    num_frames=241,
    frame_rate=25.0,
    model_frame_rate=24.0,
    generator=torch.Generator(device="cuda").manual_seed(42),
    output_type="np",
    output=["videos", "audio"],
)

encode_video(
    output["videos"][0],
    fps=25,
    audio=output["audio"][0].float().cpu(),
    audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
    output_path="echo.mp4",
)

O agendamento de sigma padrão do DMD é o agendamento de oito etapas publicado. Ele prevê x0 em cada etapa e re-ruidifica com ruído gaussiano novo no próximo sigma, de modo que um torch.Generator com seed controla tanto o ruído inicial quanto todo o re-ruidificação intermediária.

A codificação de áudio bruto em memória requer torchaudio. Para paridade de referência, mantenha audio_vae em FP32, conforme mostrado acima. Fluxos de trabalho modulares podem fazer cache dos tensores normalizados e descompactados do codificador VAE. Os latentes de vídeo têm forma (batch, channels, frames, height, width) e os latentes de áudio têm forma (batch, channels, time, mel_bins). O bloco central denoise compacta esses tensores, expande o condicionamento para num_videos_per_prompt e descompacta as saídas desruidadas de volta para a mesma forma do VAE. Passe os latents e audio_latents iniciais também nessa forma descompactada. Os decodificadores recebem tensores VAE normalizados e os denormalizam imediatamente antes da decodificação. output=["latents", "audio_latents"] retorna tensores VAE normalizados. Com output_type="latent" e output=["videos", "audio"], você obtém os tensores VAE denormalizados sem decodificação.

EchoModularPipeline

classe diffusers.EchoModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

Uma ModularPipeline para o checkpoint DMD de vídeo longo do Echo.

EchoBlocks

classe diffusers.EchoBlocks

< >

( )

Geração de vídeo a partir de referência com Echo, condicionamento limpo do primeiro quadro, slots de memória de imagem/áudio ordenados e desruidagem estocática DMD.

Componentes: text_encoder (PreTrainedModel) tokenizer (PreTrainedTokenizerBase) conectores (LTX2TextConnectors) vae (AutoencoderKLLTX2Video) audio_vae (AutoencoderKLLTX2Audio) transformer (LTX2VideoTransformer3DModel) video_processor (VideoProcessor) vocoder (LTX2Vocoder)

Entradas: prompt (str): O prompt ou prompts para orientar a geração de imagem. max_sequence_length (int, opcional, padrão 1024): Comprimento máximo da sequência para a codificação do prompt. image (Image | Tensor, opcional): Primeiro quadro único opcional usado como condição de referência limpa. memory_images (list, opcional): Imagens de referência ordenadas, uma para cada slot de memória do Echo. memory_audio_waveforms (list, opcional): Formas de onda de memória ordenadas como tensores (channels, samples). Entradas com mais de 9,62 segundos são recortadas para a janela de maior resposta. Use None para um slot silencioso. memory_audio_sample_rates (int | list, opcional): Taxa de amostragem compartilhada por todas as formas de onda de memória, ou uma taxa por slot. height (int, opcional, padrão 512): A altura em pixels da imagem gerada. width (int, opcional, padrão 704): A largura em pixels da imagem gerada. model_frame_rate (float, opcional, padrão 24.0): Taxa de quadros no momento do treinamento usada para as coordenadas RoPE de vídeo do Echo. memory_position_offset (float, opcional, padrão 500.0): Centro temporal atribuído ao primeiro slot de memória. memory_position_slot_stride (float, opcional, padrão 50.0): Distância temporal entre os centros de slots de memória consecutivos. num_videos_per_prompt (int, opcional, padrão 1): Número de vídeos por prompt. num_frames (int, opcional, padrão 241): Número de quadros de pixels gerados; deve ser 1 + k * vae_temporal_compression_ratio. frame_rate (float, opcional, padrão 25.0): Taxa de quadros do vídeo gerado. latents (Tensor, opcional): Ruído de vídeo inicial opcional em formato VAE (B, C, F, H, W). audio_latents (Tensor, opcional): Ruído de áudio inicial opcional em formato VAE (B, C, L, M). generator (Generator, opcional): Gerador do Torch para geração determinística. sigmas (list | tuple): Agendamento de sigma do DMD, incluindo o zero terminal. attention_kwargs (dict, opcional): Kwargs adicionais para os processadores de atenção. output_type (str, opcional, padrão pil): Formato de saída: ‘pil’, ‘np’, ‘pt’. decode_timestep (None, opcional, padrão 0.0): Timestep usado para decodificar os latents finais. decode_noise_scale (None, opcional): Fator de interpolação de ruído aplicado no timestep de decodificação.

Saídas: vídeos (list): Os vídeos gerados. áudio (Tensor): A forma de onda de áudio gerada.

Update on GitHub