A foundation model that generates synchronized video and audio in a single model
1,111
stars
53
commits
Python
primary language
Sep 10, 2026
updated
MOVA (MOSS Video and Audio) generates video and synchronized audio in a single model. This repository provides model weights, inference, training, LoRA fine-tuning, and evaluation workflows.
Start here: Quick start · Watch samples · Model weights · LoRA fine-tuning · Evaluation
🌟Key Highlights
Single person speech:
Multi-person speech:
View more demos on our website.
conda create -n mova python=3.13 -y
conda activate mova
pip install -e .
| Model | Download Link | Note |
|---|---|---|
| MOVA-360p | 🤗 Huggingface | Support TI2VA |
| MOVA-720p | 🤗 Huggingface | Support TI2VA |
hf download OpenMOSS-Team/MOVA-360p --local-dir /path/to/MOVA-360p
hf download OpenMOSS-Team/MOVA-720p --local-dir /path/to/MOVA-720p
Generate a video of single person speech:
export CP_SIZE=1
export CKPT_PATH=/path/to/MOVA-360p/
torchrun \
--nproc_per_node=$CP_SIZE \
scripts/inference_single.py \
--ckpt_path $CKPT_PATH \
--cp_size $CP_SIZE \
--height 352 \
--width 640 \
--prompt "A man in a blue blazer and glasses speaks in a formal indoor setting, framed by wooden furniture and a filled bookshelf. Quiet room acoustics underscore his measured tone as he delivers his remarks. At one point, he says, \"I would also say that this election in Germany wasn’t surprising.\"" \
--ref_path "./assets/single_person.jpg" \
--output_path "./data/samples/single_person.mp4" \
--seed 42 \
--offload cpu
Generate a video of multi-person speech:
export CP_SIZE=1
export CKPT_PATH=/path/to/MOVA-360p/
torchrun \
--nproc_per_node=$CP_SIZE \
scripts/inference_single.py \
--ckpt_path $CKPT_PATH \
--cp_size $CP_SIZE \
--height 352 \
--width 640 \
--prompt "The scene shows a man and a child walking together through a park, surrounded by open greenery and a calm, everyday atmosphere. As they stroll side by side, the man turns his head toward the child and asks with mild curiosity, in English, \"What do you want to do when you grow up?\" The boy answers with clear confidence, saying, \"A bond trader. That's what Don does, and he took me to his office.\" The man lets out a soft chuckle, then responds warmly, \"It's a good profession.\" as their walk continues at an unhurried pace, the conversation settling into a quiet, reflective moment." \
--ref_path "./assets/multi_person.png" \
--output_path "./data/samples/multi_person.mp4" \
--seed 42 \
--offload cpu
Please refer to the inference script for more argument usage.
scripts/inference_single.py)--offload cpu: component-wise CPU offload to reduce VRAM, typically slower and uses more Host RAM.
--offload group: finer-grained layerwise/group offload, often achieves lower VRAM but is usually slower and increases Host RAM pressure (see the benchmark table below).
--remove_video_dit: after switching to low-noise video_dit_2, frees the stage-1 video_dit reference, which can reduce ~28GB of Host RAM when offload is enabled.
We provide inference benchmarks for generating an 8-second 360p videos under different offloading strategies. Note that actual performance may vary depending on hardware configurations, driver versions, and PyTorch/CUDA builds.
| Offload Strategy | VRAM (GB) | Host RAM (GB) | Hardware | Step Time (s) |
|---|---|---|---|---|
| Component-wise offload | 48 | 66.7 | RTX 4090 | 37.5 |
| Component-wise offload | 48 | 66.7 | H100 | 9.0 |
| Layerwise (group offload) | 12 | 76.7 | RTX 4090 | 42.3 |
| Layerwise (group offload) | 12 | 76.7 | H100 | 22.8 |
We also support NPUs. For more details about NPU training/inference, please refer to this document.
We release our evaluation code in the evaluation/ directory, which provides 11 metrics across 7 metric groups for assessing synchronized audio-visual video generation quality, including audio quality, lip-sync, AV alignment, and more.
We evaluate our model through both objective benchmarks and subjective human evaluations.
We provide quantitative comparison of audiovisual generation performance on Verse-Bench. The Audio and AV-Align metrics are evaluated on all subsets; the Lip Sync and Speech metrics are evaluated on Verse-Bench Set3; and ASR Acc is evaluated on a multi-speaker subset proposed by our team. Boldface and underlined numbers indicate the best and second-best results, respectively.
In the lip-sync task, which shows the largest performance gap, MOVA demonstrates a clear advantage. According to the Lip Sync Error metric, with Dual CFG enabled, MOVA-720p achieves an LSE-D score of 7.094 and an LSE-C score of 7.452. Furthermore, MOVA also attains the best performance on the cpCER metric, which reflects speech recognition accuracy and speaker-switching accuracy.
Below are the Elo scores and win rates comparing MOVA to existing open-source models.
We release the MOVA Benchmark for Arena on Hugging Face for reproducible subjective evaluation. The benchmark contains 732 samples organized into two subsets:
| Subset | Samples | Description |
|---|---|---|
| MOVA-Bench | 132 | Real-world scenarios across 7 categories: multi-speaker (27), movie (12), sports (20), games (20), shot-effect (30), anime (20), and others (3) |
| VerseBench (Bilingual) | 600 | Bilingual English-Chinese speech data adapted from VerseBench, split into set1 (205), set2 (295), and set3 (100) |
Each sample includes a first-frame image and a prompt (rewritten by the workflow introduced in the paper) for joint image-text to video-audio generation.
🤗 Download: zhiyuzhang-0212/MOVA_benchmark_for_arena
SGLang provides Day0-support for MOVA. You can use the latest SGLang release and the examples below for high-throughput inference.
sglang generate)sglang generate \
--model-path OpenMOSS-Team/MOVA-720p \
--prompt "A man in a blue blazer and glasses speaks in a formal indoor setting, \
framed by wooden furniture and a filled bookshelf. \
Quiet room acoustics underscore his measured tone as he delivers his remarks. \
At one point, he says, \"I would also believe that this advance in AI recently wasn’t unexpected.\"" \
--image-path "./assets/single_person.jpg" \
--adjust-frames false \
--num-gpus 8 \
--ring-degree 2 \
--ulysses-degree 4 \
--num-frames 193 \
--fps 24 \
--seed 67 \
--num-inference-steps 25 \
--enable-torch-compile \
--save-output
sglang serve)export SG_OUTPUT_DIR=/root/output_mova
mkdir -p "$SG_OUTPUT_DIR"
sglang serve \
--model-path OpenMOSS-Team/MOVA-720p \
--host 0.0.0.0 \
--port 30002 \
--adjust-frames false \
--num-gpus 8 \
--ring-degree 2 \
--ulysses-degree 4 \
--tp 1 \
--enable-torch-compile \
--save-output \
--output-dir "$SG_OUTPUT_DIR"
/v1/videos)curl -X POST "http://0.0.0.0:30002/v1/videos" \
-F "prompt=A man in a blue blazer and glasses speaks in a formal indoor setting, framed by wooden furniture and a filled bookshelf. Quiet room acoustics underscore his measured tone as he delivers his remarks. At one point, he says, \"I would also believe that this advance in AI recently wasn't unexpected.\"" \
-F "input_reference=@./assets/single_person.jpg" \
-F "size=640x352" \
-F "num_frames=193" \
-F "fps=24" \
-F "seed=67" \
-F "guidance_scale=5.0" \
-F "num_inference_steps=25" \
-o create_video.json
We provide an AI-assisted video generation workflow for end-to-end video creation via a Streamlit web UI. It supports:
See the workflow README for setup, configuration (SGLang server, API keys), and usage.
MOVA is available as a hosted API on our platform. You can apply for an API key and start generating synchronized video-audio content without managing any infrastructure.
Apply here: studio.mosi.cn/docs/models/mova
MOVA is supported in ComfyUI through the community plugin comfyui-mova by @richservo. It provides two nodes — MOVA Model Loader and MOVA Generate — for both Image-to-Video-Audio (I2VA) and Text-to-Video-Audio (T2VA) workflows.
cd ComfyUI/custom_nodes
git clone --recursive https://github.com/richservo/comfyui-mova.git
cd comfyui-mova
pip install -r requirements.txt
Models download automatically from HuggingFace on first use. See the comfyui-mova README for full usage details, VRAM guide, and workflow examples.
The following commands show how to launch LoRA training in different modes; for detailed memory and performance numbers, see the LoRA Resource & Performance Reference section below.
diffusion_pipeline section of the corresponding config.data section of the corresponding config (e.g., mova_train_low_resource.py); see mova/datasets/video_audio_dataset.py for the expected fields.pip install -e ".[train]" (includes torchcodec and bitsandbytes).configs/training/mova_train_low_resource.pybash scripts/training_scripts/example/low_resource_train.sh
configs/training/mova_train_accelerate.pybash scripts/training_scripts/example/accelerate_train.sh
configs/training/mova_train_accelerate_8gpu.pyconfigs/training/accelerate/fsdp_8gpu.yamlbash scripts/training_scripts/example/accelerate_train_8gpu.sh
All hyper-parameters (LoRA rank/alpha, target modules, optimizer, offload strategy, etc.) are defined in the corresponding config files; the example scripts only take the config path as input.
All peak usage numbers below are measured on 360p, 8-second video training settings and will vary with resolution, duration, and batch size.
| Mode | VRAM (GB/GPU) | Host RAM (GB) | Hardware | Step Time (s) |
|---|---|---|---|---|
| Low-resource LoRA (single GPU) | ≈18GB | ≈80GB | RTX 4090 | 600 |
| Accelerate LoRA (1 GPU) | ≈100GB | ≥128GB | H100 | N/A |
| Accelerate + FSDP LoRA (8 GPUs) | ≈50GB | ≥128GB | H100 | 22.2 |
Note: Training 8-second 360p videos on RTX 4090 is not recommended due to high resource requirements and slow training speed. We strongly suggest reducing video resolution (e.g., 240p) or total frame count to accelerate training and reduce resource consumption.
If you find our work helpful, please cite us.
@misc{openmoss_mova_2026,
title = {MOVA: Towards Scalable and Synchronized Video-Audio Generation},
author = {{SII-OpenMOSS Team} and Donghua Yu and Mingshu Chen and Qi Chen and Qi Luo and Qianyi Wu and Qinyuan Cheng and Ruixiao Li and Tianyi Liang and Wenbo Zhang and Wenming Tu and Xiangyu Peng and Yang Gao and Yanru Huo and Ying Zhu and Yinze Luo and Yiyang Zhang and Yuerong Song and Zhe Xu and Zhiyu Zhang and Chenchen Yang and Cheng Chang and Chushu Zhou and Hanfu Chen and Hongnan Ma and Jiaxi Li and Jingqi Tong and Junxi Liu and Ke Chen and Shimin Li and Songlin Wang and Wei Jiang and Zhaoye Fei and Zhiyuan Ning and Chunguo Li and Chenhui Li and Ziwei He and Zengfeng Huang and Xie Chen and Xipeng Qiu},
year = {2026},
month = feb,
eprint = {2602.08794},
archivePrefix = {arXiv},
primaryClass = {cs.CV},
doi = {10.48550/arXiv.2602.08794},
url = {https://arxiv.org/abs/2602.08794},
note = {Technical report. Corresponding authors: Xie Chen and Xipeng Qiu. Project leaders: Qinyuan Cheng and Tianyi Liang.}
}
We would like to thank the contributors to Wan, SGLang, diffusers, HuggingFace, DiffSynth-Studio, and HunyuanVideo-Foley for their great open-source work, which is helpful to this project.
Python
98.4%
Shell
1.6%
A foundation model that generates synchronized video and audio in a single model
1,111
stars
53
commits
Python
primary language
Sep 10, 2026
updated
MOVA (MOSS Video and Audio) generates video and synchronized audio in a single model. This repository provides model weights, inference, training, LoRA fine-tuning, and evaluation workflows.
Start here: Quick start · Watch samples · Model weights · LoRA fine-tuning · Evaluation
🌟Key Highlights
Single person speech:
Multi-person speech:
View more demos on our website.
conda create -n mova python=3.13 -y
conda activate mova
pip install -e .
| Model | Download Link | Note |
|---|---|---|
| MOVA-360p | 🤗 Huggingface | Support TI2VA |
| MOVA-720p | 🤗 Huggingface | Support TI2VA |
hf download OpenMOSS-Team/MOVA-360p --local-dir /path/to/MOVA-360p
hf download OpenMOSS-Team/MOVA-720p --local-dir /path/to/MOVA-720p
Generate a video of single person speech:
export CP_SIZE=1
export CKPT_PATH=/path/to/MOVA-360p/
torchrun \
--nproc_per_node=$CP_SIZE \
scripts/inference_single.py \
--ckpt_path $CKPT_PATH \
--cp_size $CP_SIZE \
--height 352 \
--width 640 \
--prompt "A man in a blue blazer and glasses speaks in a formal indoor setting, framed by wooden furniture and a filled bookshelf. Quiet room acoustics underscore his measured tone as he delivers his remarks. At one point, he says, \"I would also say that this election in Germany wasn’t surprising.\"" \
--ref_path "./assets/single_person.jpg" \
--output_path "./data/samples/single_person.mp4" \
--seed 42 \
--offload cpu
Generate a video of multi-person speech:
export CP_SIZE=1
export CKPT_PATH=/path/to/MOVA-360p/
torchrun \
--nproc_per_node=$CP_SIZE \
scripts/inference_single.py \
--ckpt_path $CKPT_PATH \
--cp_size $CP_SIZE \
--height 352 \
--width 640 \
--prompt "The scene shows a man and a child walking together through a park, surrounded by open greenery and a calm, everyday atmosphere. As they stroll side by side, the man turns his head toward the child and asks with mild curiosity, in English, \"What do you want to do when you grow up?\" The boy answers with clear confidence, saying, \"A bond trader. That's what Don does, and he took me to his office.\" The man lets out a soft chuckle, then responds warmly, \"It's a good profession.\" as their walk continues at an unhurried pace, the conversation settling into a quiet, reflective moment." \
--ref_path "./assets/multi_person.png" \
--output_path "./data/samples/multi_person.mp4" \
--seed 42 \
--offload cpu
Please refer to the inference script for more argument usage.
scripts/inference_single.py)--offload cpu: component-wise CPU offload to reduce VRAM, typically slower and uses more Host RAM.
--offload group: finer-grained layerwise/group offload, often achieves lower VRAM but is usually slower and increases Host RAM pressure (see the benchmark table below).
--remove_video_dit: after switching to low-noise video_dit_2, frees the stage-1 video_dit reference, which can reduce ~28GB of Host RAM when offload is enabled.
We provide inference benchmarks for generating an 8-second 360p videos under different offloading strategies. Note that actual performance may vary depending on hardware configurations, driver versions, and PyTorch/CUDA builds.
| Offload Strategy | VRAM (GB) | Host RAM (GB) | Hardware | Step Time (s) |
|---|---|---|---|---|
| Component-wise offload | 48 | 66.7 | RTX 4090 | 37.5 |
| Component-wise offload | 48 | 66.7 | H100 | 9.0 |
| Layerwise (group offload) | 12 | 76.7 | RTX 4090 | 42.3 |
| Layerwise (group offload) | 12 | 76.7 | H100 | 22.8 |
We also support NPUs. For more details about NPU training/inference, please refer to this document.
We release our evaluation code in the evaluation/ directory, which provides 11 metrics across 7 metric groups for assessing synchronized audio-visual video generation quality, including audio quality, lip-sync, AV alignment, and more.
We evaluate our model through both objective benchmarks and subjective human evaluations.
We provide quantitative comparison of audiovisual generation performance on Verse-Bench. The Audio and AV-Align metrics are evaluated on all subsets; the Lip Sync and Speech metrics are evaluated on Verse-Bench Set3; and ASR Acc is evaluated on a multi-speaker subset proposed by our team. Boldface and underlined numbers indicate the best and second-best results, respectively.
In the lip-sync task, which shows the largest performance gap, MOVA demonstrates a clear advantage. According to the Lip Sync Error metric, with Dual CFG enabled, MOVA-720p achieves an LSE-D score of 7.094 and an LSE-C score of 7.452. Furthermore, MOVA also attains the best performance on the cpCER metric, which reflects speech recognition accuracy and speaker-switching accuracy.
Below are the Elo scores and win rates comparing MOVA to existing open-source models.
We release the MOVA Benchmark for Arena on Hugging Face for reproducible subjective evaluation. The benchmark contains 732 samples organized into two subsets:
| Subset | Samples | Description |
|---|---|---|
| MOVA-Bench | 132 | Real-world scenarios across 7 categories: multi-speaker (27), movie (12), sports (20), games (20), shot-effect (30), anime (20), and others (3) |
| VerseBench (Bilingual) | 600 | Bilingual English-Chinese speech data adapted from VerseBench, split into set1 (205), set2 (295), and set3 (100) |
Each sample includes a first-frame image and a prompt (rewritten by the workflow introduced in the paper) for joint image-text to video-audio generation.
🤗 Download: zhiyuzhang-0212/MOVA_benchmark_for_arena
SGLang provides Day0-support for MOVA. You can use the latest SGLang release and the examples below for high-throughput inference.
sglang generate)sglang generate \
--model-path OpenMOSS-Team/MOVA-720p \
--prompt "A man in a blue blazer and glasses speaks in a formal indoor setting, \
framed by wooden furniture and a filled bookshelf. \
Quiet room acoustics underscore his measured tone as he delivers his remarks. \
At one point, he says, \"I would also believe that this advance in AI recently wasn’t unexpected.\"" \
--image-path "./assets/single_person.jpg" \
--adjust-frames false \
--num-gpus 8 \
--ring-degree 2 \
--ulysses-degree 4 \
--num-frames 193 \
--fps 24 \
--seed 67 \
--num-inference-steps 25 \
--enable-torch-compile \
--save-output
sglang serve)export SG_OUTPUT_DIR=/root/output_mova
mkdir -p "$SG_OUTPUT_DIR"
sglang serve \
--model-path OpenMOSS-Team/MOVA-720p \
--host 0.0.0.0 \
--port 30002 \
--adjust-frames false \
--num-gpus 8 \
--ring-degree 2 \
--ulysses-degree 4 \
--tp 1 \
--enable-torch-compile \
--save-output \
--output-dir "$SG_OUTPUT_DIR"
/v1/videos)curl -X POST "http://0.0.0.0:30002/v1/videos" \
-F "prompt=A man in a blue blazer and glasses speaks in a formal indoor setting, framed by wooden furniture and a filled bookshelf. Quiet room acoustics underscore his measured tone as he delivers his remarks. At one point, he says, \"I would also believe that this advance in AI recently wasn't unexpected.\"" \
-F "input_reference=@./assets/single_person.jpg" \
-F "size=640x352" \
-F "num_frames=193" \
-F "fps=24" \
-F "seed=67" \
-F "guidance_scale=5.0" \
-F "num_inference_steps=25" \
-o create_video.json
We provide an AI-assisted video generation workflow for end-to-end video creation via a Streamlit web UI. It supports:
See the workflow README for setup, configuration (SGLang server, API keys), and usage.
MOVA is available as a hosted API on our platform. You can apply for an API key and start generating synchronized video-audio content without managing any infrastructure.
Apply here: studio.mosi.cn/docs/models/mova
MOVA is supported in ComfyUI through the community plugin comfyui-mova by @richservo. It provides two nodes — MOVA Model Loader and MOVA Generate — for both Image-to-Video-Audio (I2VA) and Text-to-Video-Audio (T2VA) workflows.
cd ComfyUI/custom_nodes
git clone --recursive https://github.com/richservo/comfyui-mova.git
cd comfyui-mova
pip install -r requirements.txt
Models download automatically from HuggingFace on first use. See the comfyui-mova README for full usage details, VRAM guide, and workflow examples.
The following commands show how to launch LoRA training in different modes; for detailed memory and performance numbers, see the LoRA Resource & Performance Reference section below.
diffusion_pipeline section of the corresponding config.data section of the corresponding config (e.g., mova_train_low_resource.py); see mova/datasets/video_audio_dataset.py for the expected fields.pip install -e ".[train]" (includes torchcodec and bitsandbytes).configs/training/mova_train_low_resource.pybash scripts/training_scripts/example/low_resource_train.sh
configs/training/mova_train_accelerate.pybash scripts/training_scripts/example/accelerate_train.sh
configs/training/mova_train_accelerate_8gpu.pyconfigs/training/accelerate/fsdp_8gpu.yamlbash scripts/training_scripts/example/accelerate_train_8gpu.sh
All hyper-parameters (LoRA rank/alpha, target modules, optimizer, offload strategy, etc.) are defined in the corresponding config files; the example scripts only take the config path as input.
All peak usage numbers below are measured on 360p, 8-second video training settings and will vary with resolution, duration, and batch size.
| Mode | VRAM (GB/GPU) | Host RAM (GB) | Hardware | Step Time (s) |
|---|---|---|---|---|
| Low-resource LoRA (single GPU) | ≈18GB | ≈80GB | RTX 4090 | 600 |
| Accelerate LoRA (1 GPU) | ≈100GB | ≥128GB | H100 | N/A |
| Accelerate + FSDP LoRA (8 GPUs) | ≈50GB | ≥128GB | H100 | 22.2 |
Note: Training 8-second 360p videos on RTX 4090 is not recommended due to high resource requirements and slow training speed. We strongly suggest reducing video resolution (e.g., 240p) or total frame count to accelerate training and reduce resource consumption.
If you find our work helpful, please cite us.
@misc{openmoss_mova_2026,
title = {MOVA: Towards Scalable and Synchronized Video-Audio Generation},
author = {{SII-OpenMOSS Team} and Donghua Yu and Mingshu Chen and Qi Chen and Qi Luo and Qianyi Wu and Qinyuan Cheng and Ruixiao Li and Tianyi Liang and Wenbo Zhang and Wenming Tu and Xiangyu Peng and Yang Gao and Yanru Huo and Ying Zhu and Yinze Luo and Yiyang Zhang and Yuerong Song and Zhe Xu and Zhiyu Zhang and Chenchen Yang and Cheng Chang and Chushu Zhou and Hanfu Chen and Hongnan Ma and Jiaxi Li and Jingqi Tong and Junxi Liu and Ke Chen and Shimin Li and Songlin Wang and Wei Jiang and Zhaoye Fei and Zhiyuan Ning and Chunguo Li and Chenhui Li and Ziwei He and Zengfeng Huang and Xie Chen and Xipeng Qiu},
year = {2026},
month = feb,
eprint = {2602.08794},
archivePrefix = {arXiv},
primaryClass = {cs.CV},
doi = {10.48550/arXiv.2602.08794},
url = {https://arxiv.org/abs/2602.08794},
note = {Technical report. Corresponding authors: Xie Chen and Xipeng Qiu. Project leaders: Qinyuan Cheng and Tianyi Liang.}
}
We would like to thank the contributors to Wan, SGLang, diffusers, HuggingFace, DiffSynth-Studio, and HunyuanVideo-Foley for their great open-source work, which is helpful to this project.
Python
98.4%
Shell
1.6%