Diffusers documentation
Эхо
Эхо
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
< 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 )
ModularPipeline для контрольной точки DMD длинных видео Echo.
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):
Сгенерированная звуковая волна.