MOVA generates the sound with the frames, and leaves the gaps in writing
A foundation model that generates synchronized video and audio in a single model
At a glance
- What is it?
- MOVA is a diffusion foundation model that writes video and synchronized audio in one inference pass, shipping weights, inference, training, LoRA and evaluation code. Its documentation is precise about flags and almost silent about hardware, clip length and how to run the fine-tuning scripts it advertises.
- Who is it for?
- MOVA fits teams that need to fine-tune a video and audio model on their own accelerators and can absorb the setup cost. It does not fit anyone who only wants finished clips, and the project text documents no duration, frame rate or GPU figure to size a job against.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 33 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One forward pass replaces the cascaded video and audio pipeline
The name expands to MOSS Video and Audio, and the central claim is structural: picture and sound leave a single model in one inference pass rather than arriving from a chain that runs one system and then another. The project states the reason plainly, that a cascade accumulates error. Underneath sits an asymmetric dual-tower architecture. A pre-trained video tower and a pre-trained audio tower stay on their own paths and are fused by a bidirectional cross-attention mechanism, so each branch reads the other instead of one waiting on the other's output.
For a user, the visible consequence sits in the inputs and the outputs. Both documented examples take one text prompt plus one reference image and produce a single mp4 that carries the sound, with no second script, no voice cloning stage and no separate audio model to schedule. What you tune is one checkpoint, one prompt and a short list of flags.
Reference images carry the cast, the prompt carries the spoken words
Both quick start calls open from an image. `--ref_path` points at `./assets/single_person.jpg` in the first example and `./assets/multi_person.png` in the second, and the same `scripts/inference_single.py` runs both, so two-person dialogue is not a separate pipeline or an extra flag. What changes is the prompt. In the multi-person example the whole exchange sits inside one quoted string: who asks the question, what the child answers, the reaction that follows it. No speaker label, no dialogue file and no audio or music conditioning argument appear in the key optional arguments list.
Read against the repository's own topic tags, that interface is where the friction sits. The tags include text-to-video, yet both published commands require an image path argument. Text decides what happens and what is said. The reference image decides who is on camera.
Two checkpoints, one repeated note, no stated duration
Two checkpoints are published on Hugging Face, MOVA-360p and MOVA-720p, and both rows of the download table carry the same note, Support TI2VA. The only documented difference between them is the number in the name. The quick start pulls down both, then wires only the 360p one into the command that follows, at `--height 352` and `--width 640`. Nothing in the text shows which values to pass for the larger checkpoint.
Two download commands cover both weights, with the target directories left to you.
hf download OpenMOSS-Team/MOVA-360p --local-dir /path/to/MOVA-360p
hf download OpenMOSS-Team/MOVA-720p --local-dir /path/to/MOVA-720pThe directory you choose becomes CKPT_PATH for the inference call. Past resolution, the text stays quiet on the numbers that decide whether a job fits in a queue: no clip length, no frame rate, no audio sample rate, no channel count. For anyone costing a batch, that silence has to be closed before the first run rather than after it.
CPU offload trades speed for VRAM headroom
Only two optional arguments are spelled out, and both concern memory rather than quality. `--offload cpu` is component-wise CPU offload to reduce VRAM, described as typically slower and using more host RAM. `--offload group` is the finer-grained layerwise and group variant, credited with lower VRAM at the cost of speed, and its sentence stops mid-word, after increa, in the README as published. Taken together they form one trade with no reverse gear attached: less GPU memory, more waiting.
Neither argument appears in the minimum command line. What does appear is `--cp_size`, driven by the CP_SIZE environment variable, `--seed 42` for reproducible sampling, and a `torchrun` launch carrying `--nproc_per_node`, so one entry point spans several processes when that count changes. That multi-process path is documented only through the launch flag; no table maps device count onto memory or runtime.
The dependency pins decide whether the install lands
Setup is three commands in a fresh conda environment, and the package comes from the repository itself.
conda create -n mova python=3.13 -y
conda activate mova
pip install -e .`pyproject.toml` names the distribution mova at version 0.1.0 and sets `requires-python` to at least 3.12, so Python 3.13 in that first line is a choice the quick start makes rather than a floor the package enforces. The dependency list is short and opinionated: torch, torchvision, diffusers, mmengine, `transformers<5`, accelerate, imageio, imageio-ffmpeg, einops, yunchang, descript-audiotools, ftfy, pillow, tqdm.
Two entries narrow the surface further. Training packages live in an optional extra, `pip install .[train]`, which adds bitsandbytes and torchcodec and nothing else. And the package finder includes only `mova*`, so the top level evaluation, scripts, configs and workflow directories are never installed into site-packages; they stay repository files that you run from a checkout. Meanwhile the download step calls the hf command, yet no huggingface_hub entry appears in that dependency list, so the CLI has to arrive from somewhere else in the environment.
Evaluation sits in a directory, LoRA only in an anchor
One navigation line links readers to five destinations: a quick start, samples, model weights, a LoRA fine-tuning anchor and an evaluation anchor. Only the quick start resolves to a section in the text as published. Evaluation is real but lives in the top level evaluation directory, announced on 2026/05/06, after the 2026/04/01 note about adding videos generated by different MOVA variants to the benchmark. Reproducible comparison rests on the MOVA Benchmark for Arena, a 732 sample dataset published on 2026/03/14. LoRA fine-tuning shows up in prose, in the repository description and in the topic list, yet no command, flag or config file for it is given, and the training extra installs two packages without naming a script.
Upkeep is easy to pin down and easy to misread. The repository is published under Apache-2.0, and the last push on main was 2026-09-20, later than every dated entry in the news list. There are no GitHub releases and no tag list to read as a schedule, so the paper, the code and the weights can drift apart without an entry announcing it.
Open weights against three closed models
The project names Sora 2, Veo 3 and Kling as the closed-source models it positions against, and the difference it argues concerns what you can do afterwards rather than sample quality, which no number in the text settles. Those three are closed. MOVA publishes model weights on Hugging Face next to inference code, training pipelines and LoRA fine-tuning scripts, and the same announcement points at a hosted API whose key still has to be requested.
The price of owning those weights is the environment. A diffusion stack with two towers and bidirectional cross-attention runs on your own accelerators, the two offload modes exist because that memory story is tight, and the text names no GPU, no driver, no CUDA build and no runtime. A closed endpoint hides all four. Teams that need a fine-tune, a private data path or a predictable cost per clip have a reason to absorb that setup. Teams that only need finished frames do not.
Three ways in: torchrun, an application form, a third party node
Entry points appeared in three separate places inside a two month window. On 2026/03/09 the project announced the MOVA API, with keys requested from studio.mosi.cn, and the same day announced ComfyUI support through comfyui-mova, a node contributed by richservo and described as low cost. The local route stays the `torchrun` call, preceded by two lines of environment setup.
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 cpuThose three routes are not equivalent. The hosted one needs an approved key, the ComfyUI path pulls in a separate repository that this pyproject does not describe, and only the torchrun path hands you the checkpoint together with the flags. Ordering matters for anyone pinning a commit: the first dated entry is 2026/01/29, the technical report sits on arXiv as 2602.08794, and the inference workflow changed again through pull request 29 on 2026/02/10.
Editorial conclusion
MOVA fits teams that need to fine-tune a video and audio model on their own accelerators and can absorb the setup cost. It does not fit anyone who only wants finished clips, and the project text documents no duration, frame rate or GPU figure to size a job against. Before committing, check three things on your own machine: whether scripts/inference_single.py fits your VRAM under --offload cpu, where the LoRA scripts the project advertises actually sit in a checkout, and which commit your copy holds, since no tag marks one.
Frequently asked questions
What hardware does MOVA need to run locally?
The project states no GPU model, no CUDA build and no memory figure. The only hardware guidance is two optional arguments, `--offload cpu` for component-wise CPU offload to reduce VRAM, and the finer-grained `--offload group`.
How do I get the MOVA model weights?
Two repositories on Hugging Face, MOVA-360p and MOVA-720p, are pulled with the `hf download` command into a local directory that then becomes CKPT_PATH. Both carry the note Support TI2VA, and only the 360p checkpoint appears in a documented inference command.
Can MOVA be fine-tuned with LoRA?
The project says it ships LoRA fine-tuning scripts and its topics list includes lora, but no command, flag or config file for them is given. The optional training extra adds only bitsandbytes and torchcodec, without naming a script to run.
How long a video can MOVA generate?
No clip length, frame rate or audio sample rate is stated anywhere in the project text. The only resolution data points are the two checkpoint names and the `--height 352` and `--width 640` pair in the documented torchrun call.
How is MOVA output evaluated?
Through a top level evaluation directory whose code was announced on 2026/05/06, and through the MOVA Benchmark for Arena, a 732 sample dataset published on 2026/03/14 under zhiyuzhang-0212/MOVA_benchmark_for_arena.
Does MOVA generate video from text alone?
Both documented commands pass a `--ref_path` image alongside the prompt, even though the repository topics include text-to-video. The prompt carries the dialogue for multi-person scenes, and the image fixes who appears on camera.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/openmoss-mova)