MuseVRun
Animate one photo into a natural virtual-human clip with Tencent's MuseV
- ref_image
- IMAGE
MuseVRun is the ComfyUI wrapper around Tencent's MuseV, the model behind half the "AI influencer" clips you saw in spring 2024. You feed it one portrait and it generates a short clip of that person moving - subtle head motion, eye blinks, a slight turn. If you want a talking-head avatar or a virtual-human asset, this is the node. If you want general video generation, don't come here: Wan and Hunyuan long ago outclassed it on arbitrary scenes. MuseV's niche is specifically virtual humans on a small SD 1.5 footprint, and in that niche it still has no real rival.
What it is
MuseV is a human-specific image-to-video model released by Tencent's TMElyralab team in March 2024. It rides the SD 1.5 ecosystem: a motion module plus a reference network (musev_referencenet) and IP-Adapter give the frozen base model temporal awareness and appearance lock-in. The pack's author, chaojie, did the minimal thing - the README is a paragraph and two workflow files, and the real documentation lives in the upstream TMElyralab/MuseV repo. Don't let the thin README worry you; the node works.
The output is intentionally small-motion: eye blinks, head waves, breathing. The default prompt ((eye blinks:1.8), (head wave:1.3)) tells you exactly what the authors trained it for. Fixed-camera character shots, not camera moves.
How it works
The node saves your ref_image to a temp file, then runs a two-phase pipeline. First a first-frame redraw: an img2img pass (first_redraw_steps, default 30) cleans up your input and establishes the look. Then the actual video pass runs parallel denoising - the motion module generates all frames together rather than frame-by-frame, which is why it avoids the error accumulation that plagued early AnimateDiff workflows. Appearance comes from the reference net + IP-Adapter keyed on your image, motion comes from the prompt and the training.
One honest gotcha from the source: video_len maps to time_size, the number of frames generated per batch (default 12, and the shipped workflow cranks it to 120). Each generated frame is also capped in motion - longer and wider means smaller motion, as the config comments note.
Inputs that matter
- ref_image (IMAGE) - your portrait. Feed it straight from LoadImage.
- prompt (STRING) - drives motion and style. The default is a good starting point for human subjects.
- video_len (INT) - total frames of the clip. 12 is short; 60–120 is typical.
- first_redraw_steps / first_redraw_guidance_scale - how much the first frame is redrawn (30 / 7.5).
- video_steps / video_guidance_scale - the video pass (10 / 3.5). Higher guidance = more motion, but more chance of the clip falling apart.
- sd_model_name -
majicmixRealv6Fp16(default) orfantasticmix_v10, both SD 1.5 checkpoints that ship inside the MuseV model download. - uselcm (BOOLEAN) - flips on an LCM-LoRA for much faster generation at lower quality. Good for previews.
The output is a single IMAGE tensor - a batch of frames (T, H, W, C) - which you wire into VHS_VideoCombine to save as an mp4. That's exactly how the shipped workflow is wired. Skip the img_edge_ratio slider; the source hardcodes it to 1.0 in this version, so it's inert.
Install
Grab it from ComfyUI Manager (search "ComfyUI-MuseV"), or manually:
cd ComfyUI/custom_nodes
git clone --recursive https://github.com/chaojie/ComfyUI-MuseV
cd ComfyUI-MuseV
pip install -r requirements.txt
The --recursive matters: this pack vendors three submodules (MMCM, controlnet_aux, a diffusers fork), and a plain clone gets you an empty MMCM/. Then the big one - the model, several gigabytes:
huggingface-cli download --resume-download TMElyralab/MuseV --local-dir ComfyUI/models/diffusers/TMElyralab/MuseV
That one download contains everything: the motion UNet, the SD 1.5 base checkpoints, IP-Adapter weights, the LCM LoRA, and the negative embeddings. The pack's requirements.txt is short (decord, moviepy, h5py, …), but in practice you also need the pose/OpenMMLab stack (openmim, mmengine, mmcv==2.0.1, mmdet==3.1.0, mmpose==1.1.0) or the node refuses to import. Budget for a beefy GPU too - the community reported MuseV eating a full 24 GB back in 2024.
Common issues
- "Cannot be loaded" / import errors - almost always the missing MM packages or a clone without submodules. See install above.
- Model not found - the diffusers checkpoint must be at exactly
ComfyUI/models/diffusers/TMElyralab/MuseV. - OOM - drop
width/heightorvideo_len. 563×714 at 12 frames is a gentle start. - Slow - enable
uselcmand dropvideo_stepsto 4–6 for iteration, then turn it off for final output.
It's a 2024-era model and it shows - but for one-photo avatar animation it remains the fastest path to something that looks alive.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| ref_image | IMAGE | — | |
| prompt | STRING | (masterpiece, best quality, highres:1),(1girl, solo:1),(beautiful face, soft skin, costume:1),(eye blinks:1.8),(head wave:1.3) | — |
| img_edge_ratio | FLOAT | 1.00 | — |
| video_len | INT | 12 | — |
| seed | INT | 1234 | — |
| width | INT | 563 | — |
| height | INT | 714 | — |
| first_redraw_steps | INT | 30 | — |
| video_steps | INT | 10 | — |
| first_redraw_guidance_scale | FLOAT | 7.50 | — |
| video_guidance_scale | FLOAT | 3.50 | — |
| sd_model_name | COMBO | majicmixRealv6Fp16 | 2 options: majicmixRealv6Fp16, fantasticmix_v10 |
| uselcm | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |