Buckets:
| # | |
| # Лицензия Apache License, Version 2.0 («Лицензия»); | |
| # вы можете использовать этот файл только в соответствии с Лицензией. | |
| # Вы можете получить копию Лицензии по адресу | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Если это не требуется применимым законодательством или не оговорено письменно, программное | |
| # распространяется по Лицензии на условиях «КАК ЕСТЬ», | |
| # БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, прямо указанных или подразумеваемых. | |
| # См. Лицензию для получения конкретных условий, регулирующих разрешения и | |
| # ограничениями Лицензии. --> | |
| # Эхо | |
| [Echo](https://github.com/jd-opensource/JoyAI-Echo) — это модель генерации длинных видео. Она поддерживает необязательный чистый первый кадр, упорядоченные слоты памяти для изображений и аудио, а также стохастический сэмплер с малым числом шагов на основе дистилляции соответствия распределений (Distribution Matching Distillation, DMD). Пайплайн генерирует синхронизированные видео и аудио. | |
| Echo реализован как [ModularPipeline](/docs/diffusers/v0.43.0/ru/api/modular_diffusers/pipeline#diffusers.ModularPipeline), поэтому блоки кодирования текста, обусловливания памятью, стохастического DMD-денуазинга и декодирования можно запускать как единый рабочий процесс или использовать независимо. | |
| ## Вывод | |
| Загрузите официальный чекпоинт [jdopensource/JoyAI-Echo](https://huggingface.co/jdopensource/JoyAI-Echo) напрямую. Он использует текстовый энкодер и токенизатор из [google/gemma-3-12b-it](https://huggingface.co/google/gemma-3-12b-it). Репозиторий Gemma имеет ограничения на доступ, поэтому примите его лицензию и выполните аутентификацию в Hugging Face перед загрузкой пайплайна. | |
| Опубликованная модель использует 241 кадр в своём примере с длинным видео. Координаты видео RoPE остаются на уровне 24 к/с, установленном при обучении, независимо от частоты выходного контейнера. | |
| ```py | |
| 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]] | |
| #### diffusers.EchoModularPipeline[[diffusers.EchoModularPipeline]] | |
| ```python | |
| diffusers.EchoModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs) | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/echo/modular_pipeline.py#L27) | |
| ModularPipeline для контрольной точки DMD длинных видео Echo. | |
| ## EchoBlocks[[diffusers.EchoBlocks]] | |
| #### diffusers.EchoBlocks[[diffusers.EchoBlocks]] | |
| ```python | |
| diffusers.EchoBlocks() | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/echo/modular_blocks_echo.py#L220) | |
| Генерация видео по эталонному образцу с чистым условием первого кадра, упорядоченными слотами памяти для изображений и аудио, а также стохастическим шумоподавлением 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`): сгенерированная звуковая волна. | |
Xet Storage Details
- Size:
- 12.5 kB
- Xet hash:
- d3bd646e9d244c2e54bed724faa81756bf3c9fa0eab6924f45a1e409af3fe1d4
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.