Diffusers documentation
エコー
エコー
Echoは、長尺動画生成モデルです。任意のクリーンな先頭フレーム、順序付けられた画像/音声メモリスロット、および確率的な少数ステップのDistribution Matching Distillation (DMD)サンプラーをサポートしています。 このパイプラインは、同期された動画と音声を生成します。
Echo は ModularPipeline として実装されているため、テキストエンコーディング、メモリ条件付け、確率的 DMD によるデノイジング、およびデコーディングの各ブロックを、完全なワークフローとして実行したり、独立して組み合わせたりできます。
推論
公式の jdopensource/JoyAI-Echo チェックポイントを直接読み込みます。 これは google/gemma-3-12b-it のテキストエンコーダーとトークナイザーを使用しています。 Gemma リポジトリはゲート付き(アクセス制限あり)のため、パイプラインを読み込む前に、そのライセンスに同意し、Hugging Face で認証してください。
公開されているモデルは、長尺動画の例で241フレームを使用しています。動画のRoPE座標は、出力コンテナのレートに関係なく、トレーニング時のレートである24 fpsのまま維持されます。
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のデフォルトのsigmaスケジュールは、リリースされた8ステップのスケジュールです。各ステップでx0を予測し、次のsigmaで新しいガウスノイズを用いて再ノイズ化するため、シード付きの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
class 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 )
Echoの長時間動画DMDチェックポイント用のModularPipelineです。
EchoBlocks
Echoは、クリーンな初フレーム条件付け、順序付けられた画像/音声メモリスロット、および確率的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 のメモリスロットごとに1枚の、順序付けられた参照画像。
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):
Echo の動画 RoPE 座標に使用される、学習時のフレームレート。
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, 省略可):
アテンションプロセッサー用の追加の kwargs。
output_type (str, 省略可、デフォルト値は pil):
出力形式: ‘pil’、‘np’、‘pt’。
decode_timestep (None, 省略可、デフォルト値は 0.0):
最終的な潜在変数をデコードするために使用されるタイムステップ。
decode_noise_scale (None, 省略可):
デコードのタイムステップで適用されるノイズ補間係数。
出力:
videos (list):
生成された動画。
audio (Tensor):
生成された音声波形。