Diffusers documentation
Echo
Echo
Echo es un modelo de generación de video de larga duración. Admite un primer frame limpio opcional, ranuras de memoria de imagen/áudio ordenadas y un muestreador estocástico de pocos pasos de Destilación de Coincidencia de Distribuciones (DMD). La pipeline genera video y audio sincronizados.
Echo se implementa como un ModularPipeline, por lo que sus bloques de codificación de texto, condicionamiento de memoria, desruido estocástico DMD y decodificación pueden ejecutarse como un flujo de trabajo completo o componerse de forma independiente.
Inferencia
Cargue directamente el checkpoint oficial jdopensource/JoyAI-Echo. Utiliza el codificador de texto y el tokenizador de google/gemma-3-12b-it. El repositorio de Gemma está restringido, por lo que debe aceptar su licencia y autenticarse con Hugging Face antes de cargar el pipeline.
El modelo publicado utiliza 241 fotogramas en su ejemplo de video largo. Las coordenadas de RoPE del video se mantienen en la tasa de entrenamiento de 24 fps, independientemente de la tasa del contenedor de salida.
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",
)El programa de sigma DMD predeterminado es el programa de ocho pasos publicado. Predice x0 en cada paso y vuelve a añadir ruido con ruido gaussiano nuevo en el siguiente sigma, por lo que un torch.Generator con semilla controla tanto el ruido inicial como todo el ruido intermedio.
La codificación de audio en memoria cruda requiere torchaudio. Para mantener la paridad de referencia, mantenga audio_vae en FP32, como se muestra arriba.
Los flujos de trabajo modulares pueden almacenar en caché los tensores normalizados y desempaquetados del codificador VAE. Los latentes de video tienen forma (batch, channels, frames, height, width) y los latentes de audio tienen forma (batch, channels, time, mel_bins).
El bloque principal denoise empaqueta esos tensores, expande las condiciones para num_videos_per_prompt y desempaqueta
las salidas desruidadas de vuelta a la misma forma VAE. Pase también los latents y audio_latents iniciales en esa forma desempaquetada.
Los decodificadores toman tensores VAE normalizados y los desnormalizan inmediatamente antes de
decodificar. output=["latents", "audio_latents"] devuelve tensores VAE normalizados. Con output_type="latent" y output=["videos", "audio"], obtiene los tensores VAE desnormalizados sin decodificar.
EchoModularPipeline
clase diffusers.EchoModularPipeline
< source >( 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 )
Un ModularPipeline para el punto de control DMD de video largo de Echo.
EchoBlocks
Generación de video a partir de referencia con Echo, condicionamiento limpio del primer fotograma, ranuras de memoria de imagen/áudio ordenadas y denoising estocástico DMD.
Componentes:
text_encoder (PreTrainedModel) tokenizer (PreTrainedTokenizerBase) connectors (LTX2TextConnectors) vae
(AutoencoderKLLTX2Video) audio_vae (AutoencoderKLLTX2Audio) transformer (LTX2VideoTransformer3DModel)
video_processor (VideoProcessor) vocoder (LTX2Vocoder)
Entradas:
prompt (str):
El prompt o prompts para guiar la generación de imágenes.
max_sequence_length (int, opcional, valor predeterminado 1024):
Longitud máxima de secuencia para la codificación del prompt.
image (Image | Tensor, opcional):
Opcional primer fotograma utilizado como condición de referencia limpia.
memory_images (list, opcional):
Imágenes de referencia ordenadas, una por cada ranura de memoria de Echo.
memory_audio_waveforms (list, opcional):
Formas de onda de memoria ordenadas como tensores (channels, samples). Las entradas más largas de 9,62 segundos se recortan a
su ventana de mayor respuesta. Use None para una ranura silenciosa.
memory_audio_sample_rates (int | list, opcional):
Tasa de muestreo compartida por todas las formas de onda de memoria, o una tasa por ranura.
height (int, opcional, valor predeterminado 512):
La altura en píxeles de la imagen generada.
width (int, opcional, valor predeterminado 704):
El ancho en píxeles de la imagen generada.
model_frame_rate (float, opcional, valor predeterminado 24.0):
Tasa de fotogramas en tiempo de entrenamiento utilizada para las coordenadas RoPE de video de Echo.
memory_position_offset (float, opcional, valor predeterminado 500.0):
Centro temporal asignado a la primera ranura de memoria.
memory_position_slot_stride (float, opcional, valor predeterminado 50.0):
Distancia temporal entre los centros de ranuras de memoria consecutivas.
num_videos_per_prompt (int, opcional, valor predeterminado 1):
Número de videos por prompt.
num_frames (int, opcional, valor predeterminado 241):
Número de fotogramas de píxeles generados; debe ser 1 + k * vae_temporal_compression_ratio.
frame_rate (float, opcional, valor predeterminado 25.0):
Tasa de fotogramas del video generado.
latents (Tensor, opcional):
Ruido de video inicial opcional en forma de VAE (B, C, F, H, W).
audio_latents (Tensor, opcional):
Ruido de audio inicial opcional en forma de VAE (B, C, L, M).
generator (Generator, opcional):
Generador de Torch para una generación determinista.
sigmas (list | tuple):
Programa de sigma de DMD, incluido el cero terminal.
attention_kwargs (dict, opcional):
Kwargs adicionales para los procesadores de atención.
output_type (str, opcional, valor predeterminado pil):
Formato de salida: ‘pil’, ‘np’, ‘pt’.
decode_timestep (None, opcional, valor predeterminado 0.0):
Paso temporal utilizado para decodificar los latentes finales.
decode_noise_scale (None, opcional):
Factor de interpolación de ruido aplicado en el paso temporal de decodificación.
Salidas:
videos (list):
Los videos generados.
audio (Tensor):
La forma de onda de audio generada.