Echo-Team/Echo-WM-Base-Diffusers
Echo-WM Base — Diffusers Format
This repository provides the Diffusers-format version of Echo-WM Base. The weights are converted from the official `Echo-Team/Echo-WM` checkpoint, with the model architecture and inference workflow adapted to the Diffusers Modular Pipeline API.
Echo-WM jointly generates video and synchronized environmental sound, music, and speech from an initial image, a text prompt, and a camera-action sequence.
Diffusers components
EchoWMTransformer3DModelEchoWMModularPipelineEchoWMBlocks
Installation
pip install -U diffusers transformers accelerate avUsage
The following example uses the official `wm_cases/0010` input and camera trajectory.
import torch
from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import encode_video, load_image
components_manager = ComponentsManager()
components_manager.enable_auto_cpu_offload(device="cuda")
pipe = ModularPipeline.from_pretrained(
"Echo-Team/Echo-WM-Base-Diffusers", components_manager=components_manager
)
pipe.load_components(dtype=torch.bfloat16)
image = load_image(
"https://raw.githubusercontent.com/jd-opensource/JoyAI-Echo/main/echo_wm/examples/wm_cases/0010/input.png"
)
prompt = """Environment: A fantasy canyon with a teal pool, pale cliffs, and a distant palace.
Character: A solitary adventurer in a teal cloak, seen from behind.
Style: Painterly cinematic fantasy with soft golden daylight.
Perspective: Wide third-person rear view at standing height.
Sounds: Water laps against the shore, birds echo between the cliffs, and leaves move in a light breeze.
Speech: None."""
result = pipe(
image=image,
prompt=prompt,
negative_prompt="blurry, jittery, text, watermark",
action="w-60,a-60,w-60,d-60",
num_frames=241,
num_inference_steps=30,
generator=torch.Generator(device="cuda").manual_seed(34),
output=["videos", "audio"],
)
encode_video(
video=result["videos"][0],
audio=result["audio"][0].float().cpu(),
fps=24,
audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
output_path="echo_wm_av.mp4",
)Optional action overlay
The pipeline returns clean frames. To draw a WASD/IJKL HUD, apply the Echo-WM postprocessing utility before encoding:
from diffusers.modular_pipelines.echo_wm import apply_action_overlay
video = apply_action_overlay(result["videos"][0], action="w-60,a-60,w-60,d-60")
encode_video(
video=video,
audio=result["audio"][0].float().cpu(),
fps=24,
audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
output_path="echo_wm_action_av.mp4",
)Camera controls
Each action segment uses the form <keys>-<duration>. W/S move forward or backward, A/D strafe, I/K pitch, J/L yaw, and none holds the camera still. Segments are joined with commas, for example w-60,a-60,w-60,d-60.
Original project
Citation
@article{zhang2026echowm,
title = {EchoWM: Open and Enterable Omnimodal World Models},
author = {Zhang, Songchun and Li, Yaowei and Zhuang, Junhao and Jin, Weiyang and Wang, Haoyu and Lu, Xin and Sun, Yilang and Zhang, Shiyi and Li, Haoran and Ma, Xiaoxiao and Li, Yuming and Liu, Yijun and Su, Yaofeng and Ma, Yanwen and Wu, Haoyu and Su, Zihan and Ma, Yue and Zhang, Lvmin and Huang, Haoyang and Xue, Zeyue and Rao, Anyi and Duan, Nan},
journal = {arXiv preprint arXiv:2608.23189},
year = {2026},
eprint = {2608.23189},
archivePrefix = {arXiv},
primaryClass = {cs.CV}
}License
Academic research and non-commercial use only. This model follows the LTX-2 Community License.
