Diffusers documentation

Эхо

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 — это модель генерации длинных видео. Она поддерживает необязательный чистый первый кадр, упорядоченные слоты памяти для изображений и аудио, а также стохастический сэмплер с малым числом шагов на основе дистилляции соответствия распределений (Distribution Matching Distillation, DMD). Пайплайн генерирует синхронизированные видео и аудио.

Echo реализован как ModularPipeline, поэтому блоки кодирования текста, обусловливания памятью, стохастического DMD-денуазинга и декодирования можно запускать как единый рабочий процесс или использовать независимо.

Вывод

Загрузите официальный чекпоинт jdopensource/JoyAI-Echo напрямую. Он использует текстовый энкодер и токенизатор из google/gemma-3-12b-it. Репозиторий Gemma имеет ограничения, поэтому примите его лицензию и выполните аутентификацию в Hugging Face перед загрузкой пайплайна.

Опубликованная модель использует 241 кадр в своём примере с длинным видео. Координаты видео RoPE остаются на уровне 24 к/с, как при обучении, независимо от частоты выходного контейнера.

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",
)

По умолчанию используется расписание сигм DMD, опубликованное для восьмиступенчатого процесса. На каждом шаге предсказывается x0, а затем выполняется повторное добавление шума с использованием нового гауссова шума на следующем уровне сигмы, поэтому инициализированный torch.Generator управляет как начальным шумом, так и всеми промежуточными операциями повторного добавления шума.

Сырое кодирование аудио в память требует torchaudio. Для соответствия эталонной реализации держите audio_vae в FP32, как показано выше. Модульные рабочие процессы могут кэшировать нормализованные, распакованные тензоры кодировщика VAE. Латенты видео имеют форму (batch, channels, frames, height, width), а латенты аудио — форму (batch, channels, time, mel_bins). Базовый блок denoise упаковывает эти тензоры, расширяет условия для num_videos_per_prompt и распаковывает выводы после шумоподавления обратно в ту же форму VAE. Передавайте начальные latents и audio_latents тоже в этой распакованной форме. Декодеры принимают нормализованные тензоры VAE и денормализуют их непосредственно перед декодированием. output=["latents", "audio_latents"] возвращает нормализованные тензоры VAE. С output_type="latent" и output=["videos", "audio"] вы получаете денормализованные тензоры VAE без декодирования.

EchoModularPipeline

класс 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 )

ModularPipeline для контрольной точки DMD длинных видео Echo.

EchoBlocks

класс diffusers.EchoBlocks

< >

( )

Генерация видео по эталонному образцу с чистым условием первого кадра, упорядоченными слотами памяти для изображений и аудио, а также стохастическим DMD-денузингом.

Компоненты: text_encoder (PreTrainedModel) tokenizer (PreTrainedTokenizerBase) connectors (LTX2TextConnectors) vae (AutoencoderKLLTX2Video) audio_vae (AutoencoderKLLTX2Audio) transformer (LTX2VideoTransformer3DModel) video_processor (VideoProcessor) vocoder (LTX2Vocoder)

Входные данные: prompt (str): Промпт или промпты для управления генерацией изображения. max_sequence_length (int, необязательный, по умолчанию 1024): Максимальная длина последовательности для кодирования промпта. image (Image | Tensor, необязательный): Необязательный одиночный первый кадр, используемый в качестве чистого референсного условия. memory_images (list, необязательный): Упорядоченные референсные изображения, по одному на каждый слот памяти Echo. memory_audio_waveforms (list, необязательный): Упорядоченные звуковые волны в виде тензоров (channels, samples). Входы длиннее 9,62 секунд обрезаются до их окна с максимальным откликом. Используйте None для тихого слота. memory_audio_sample_rates (int | list, необязательный): Частота дискретизации, общая для всех звуковых волн памяти, или одна частота на слот. height (int, необязательный, по умолчанию 512): Высота генерируемого изображения в пикселях. width (int, необязательный, по умолчанию 704): Ширина генерируемого изображения в пикселях. model_frame_rate (float, необязательный, по умолчанию 24.0): Частота кадров, используемая на этапе обучения для координат RoPE видео Echo. memory_position_offset (float, необязательный, по умолчанию 500.0): Временной центр, назначенный первому слоту памяти. memory_position_slot_stride (float, необязательный, по умолчанию 50.0): Временное расстояние между центрами последовательных слотов памяти. num_videos_per_prompt (int, необязательный, по умолчанию 1): Количество видео на один промпт. num_frames (int, необязательный, по умолчанию 241): Количество генерируемых пиксельных кадров; должно быть 1 + k * vae_temporal_compression_ratio. frame_rate (float, необязательный, по умолчанию 25.0): Частота кадров генерируемого видео. latents (Tensor, необязательный): Необязательный начальный шум видео в форме VAE (B, C, F, H, W). audio_latents (Tensor, необязательный): Необязательный начальный шум аудио в форме VAE (B, C, L, M). generator (Generator, необязательный): Генератор Torch для детерминированной генерации. sigmas (list | tuple): Расписание сигм DMD, включая конечный ноль. attention_kwargs (dict, необязательный): Дополнительные аргументы для процессоров внимания. output_type (str, необязательный, по умолчанию pil): Формат вывода: ‘pil’, ‘np’, ‘pt’. decode_timestep (None, необязательный, по умолчанию 0.0): Шаг времени, используемый для декодирования финальных латентов. decode_noise_scale (None, необязательный): Коэффициент интерполяции шума, применяемый на шаге декодирования.

Выводы: videos (list): Сгенерированные видео. audio (Tensor): Сгенерированная звуковая волна.

Update on GitHub