MVNT Generate Dance
The Node That Turns a WAV Into a Dancing GLB (It Lives in the Cloud)
- audio
- character_glb
- dance_3d
This is the heart of ComfyUI-MVNT. Everything else in the pack exists to feed this node or prettify its output. Wire an audio clip in, pick a style, queue it, and you get an animated GLB of a dancer performing to that track. The name is honest and it's also a little misleading, because nothing dances on your machine - the choreography is generated on MVNT's servers and the node just uploads your audio, waits, and downloads the result. No model files, no VRAM hit, no local diffusion. Just a cloud call, an API key, and some patience.
It plugs into the middle of the main flow: audio → MVNT Audio Segment → this node → MVNT Preview Dance 3D (fast review) → MVNT Render Dance Video (optional MP4). If you want your own character dancing instead of the default mannequin, you add the character flow: a character image → MVNT Image to T-Pose → a rigged GLB (Tripo-style) → wire that GLB into character_glb here, and MVNT retargets the base motion onto it.
How it works
The node saves your audio to a temp WAV, uploads it to MVNT's generation API, then polls the job every few seconds until it's done (it'll wait up to ten minutes). On success it downloads the animated GLB to ComfyUI/output/ as mvnt_<id>.motion.glb. If you connected a character_glb, it then calls MVNT's retarget endpoint and produces mvnt_<id>.tripo_retargeted.glb - that retargeted file is what comes out of dance_3d. It also writes a small sidecar JSON (job id, audio path, character path) that the Render Dance Video node reads later, so keep the output file where it put it.
The inputs that matter
style(enum) - the dance genre:#K-Pop / All,#K-Pop / Boy,#K-Pop / Girl,#Challenge,#Poppin,#Hip-hop,#Krump,#Jazz. It maps to a backend token, so don't worry that the values look like hashtags.creative_level(enum) -Stable/Normal/Creative/Wild. This is the fun one: it maps to sampling temperature, from 0.9 up to 1.35.Stablekeeps the choreography predictable and close to the style's norm;Wildis where it gets interpretive and loose. Start onCreativeand go up once you're bored.seed(INT, default -1) - set a value to reproduce a performance; -1 is random.api_key(STRING, optional) - paste your key here, or skip it and setMVNT_API_KEYas an environment variable before launching ComfyUI (export MVNT_API_KEY=mvnt_live_xxxxxxxxxxxxx). Keys start withmvnt_live_,mvnt_test_,mk_live_, ormk_test_; anything else is rejected.character_glb(*) - optional rigged GLB for retargeting.
One output: dance_3d (STRING) - the path to the animated GLB. That's it. There is deliberately no VIDEO output on this node. People miss this constantly: the MP4 is a separate, optional server render done by MVNT Render Dance Video, because a server video render costs more than the motion itself. If you only want to look at the dance, preview the GLB in 3D and skip the video.
Installing it
Part of ComfyUI-MVNT. ComfyUI Manager → search MVNT → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/mvnt-app/ComfyUI-MVNT.git comfyui-mvnt
cd comfyui-mvnt
pip install -r requirements.txt
Restart. Dependencies are light (requests, numpy, soundfile, Pillow) - the heavy work is remote. You do need an MVNT account and key from mvnt.studio; generation consumes credits. Never commit a key inside a shared workflow JSON - the README is blunt about this for good reason.
Gotchas
The most common failure is the missing key: "MVNT API key is required" means neither the env var nor the widget is set. If character_glb is connected but the node can't resolve it to a real file, you get a hard error telling you exactly that - it wants a local path, not a URL. And the classic stale-node trap: uninstall or rename any legacy MVNT Dance Generate / MVNT Dance (All-in-One) folders so old nodes don't shadow these. If a generation just doesn't return a GLB, the console prints the job id - that's your starting point for support.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| style | COMBO | #K-Pop / All | 8 options: #K-Pop / All, #K-Pop / Boy, #K-Pop / Girl, #Challenge, #Poppin, #Hip-hop, +2 |
| creative_level | COMBO | Creative | 4 options: Stable, Normal, Creative, Wild |
| character_glbopt | * | — | |
| api_keyopt | STRING | — | |
| seedopt | INT | -1-1–2147483647 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| dance_3d | STRING | — |