DiffSynth: MOVA Audio Video Inference
MOVA Audio Video Inference — first frame in, picture and sound out
- pipe
- input_image
- end_image
- video
- audio
The pitch for MOVA is simple: give it a picture, get a moving version of it with sound, from a model whose weights you can download. That's a short list. LTX-2 is on it. MiniMax H3 is on it, licences permitting. MOVA is the open one from OpenMOSS, and until recently it was the model people kept linking at each other in threads complaining that nothing had ComfyUI support.
The node is a normal diffusion inference node with an unusual amount of tiling configuration on it, because two DiT towers plus a bridge is a lot of model to hold at once.
The required inputs
pipe, prompt, seed, num_inference_steps (default 50), height (352), width (640). The defaults are not a mistake - 352×640 is what the 360p variant is built around, and this is a model you should run at its own resolution before you start pushing it.
cfg_scale defaults to 5.0, which tells you MOVA is not a guidance-distilled model. At CFG 5 there's a real unconditional pass, which means the negative prompt field does something, and steps actually cost what steps cost. Pair it with the 50-step default and you have a slower, more controllable generation than the distilled audio-video models give you.
Getting your image in
input_image- the first frame. This is the headline use: image-to-audio-video, the shape the template (general_mova_360p_i2av) is built for.end_image- an optional final frame to land on, which turns the run into a guided interpolation with sound.denoising_strength(default 1.0) - how much the conditioning is respected; lower keeps you closer to the input.
num_frames (default 81) and frame_rate (default 24) set the length. 81 frames at 24fps is a bit over three seconds - short, but this is a model where you should earn your way to longer clips.
sigma_shift (default 5.0) is the flow-matching schedule shifter; switch_DiT_boundary (default 0.9) is where the sampling hands over between MOVA's two towers. Both defaults are the model's own. Leave them alone until you have a reason.
Tiling
tiled (default on) with tile_size ("30,52") and tile_stride ("15,26"). Those are strings, not numbers, because each holds a comma-separated pair - the pack parses them into two values, which are the tile dimensions on the two spatial axes. The defaults tile fairly aggressively, which is what makes the 360p target fit on consumer cards; the stride is exactly half the tile size, so there's substantial overlap and no seam to speak of. If you raise the resolution, raise the tiles with it rather than turning tiling off.
Outputs
video (an IMAGE batch) and audio (an AUDIO), generated together. Wire the video into a combine/save node and the audio into whatever you're muxing with.
Install
ComfyUI Manager → DiffSynth-ComfyUI → install → restart. Or:
pip install git+https://github.com/modelscope/DiffSynth-Studio.git
cd ComfyUI/custom_nodes && git clone https://github.com/modelscope/DiffSynth-ComfyUI.git
Load general_mova_360p_i2av from the Template tab. The merge node's wiring - MOVA's towers plus Wan's VAE and umt5 encoder - is the part you don't want to hand-build.
Where people get burned
Running it at 720p or above out of the gate. The 360p defaults exist for a reason. Move up once you've seen a working clip.
CFG hunting like it's an SDXL model. At CFG 5 the negative prompt works, so modest moves (4–6) are meaningful; going to 10 buys you artefacts.
Turning tiling off to "improve quality" and OOMing. Tiled decoding is how this fits, not a compromise you can casually drop.
Expecting the polish of a model with a million users. MOVA is early and thinly documented. If something looks wrong and the template matches your wiring, the honest next step is the DiffSynth-Studio repo rather than another forum search.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | DIFFSYNTH_PIPE | — | |
| prompt | STRING | — | |
| seed | INT | 00–4294967295 | — |
| num_inference_steps | INT | 501–200 | — |
| height | INT | 35264–4096 | — |
| width | INT | 64064–4096 | — |
| negative_promptopt | STRING | — | |
| input_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — | |
| denoising_strengthopt | FLOAT | 1.00–10000 | — |
| num_framesopt | INT | 811–1000 | — |
| frame_rateopt | INT | 240–4294967295 | — |
| cfg_scaleopt | FLOAT | 5.00–10000 | — |
| switch_DiT_boundaryopt | FLOAT | 0.90–10000 | — |
| sigma_shiftopt | FLOAT | 5.00–10000 | — |
| tiledopt | BOOLEAN | true | — |
| tile_sizeopt | STRING | 30,52 | — |
| tile_strideopt | STRING | 15,26 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | IMAGE | — |
| audio | AUDIO | — |