Nodes/ComfyUI-MVNT/MVNT Generate Dance
ComfyUI Node

MVNT Generate Dance

The Node That Turns a WAV Into a Dancing GLB (It Lives in the Cloud)

By mvnt-app·Created 5 months ago·Updated 3 months ago· 3
MVNT Generate Dance
  • audio
  • character_glb
  • dance_3d
style#K-Pop / All
creative_levelCreative
api_key
seed-1

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. Stable keeps the choreography predictable and close to the style's norm; Wild is where it gets interpretive and loose. Start on Creative and 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 set MVNT_API_KEY as an environment variable before launching ComfyUI (export MVNT_API_KEY=mvnt_live_xxxxxxxxxxxxx). Keys start with mvnt_live_, mvnt_test_, mk_live_, or mk_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.

CategoryMVNT

Inputs (6)

NameTypeDefaultDescription
audioAUDIO
styleCOMBO#K-Pop / All8 options: #K-Pop / All, #K-Pop / Boy, #K-Pop / Girl, #Challenge, #Poppin, #Hip-hop, +2
creative_levelCOMBOCreative4 options: Stable, Normal, Creative, Wild
character_glbopt*
api_keyoptSTRING
seedoptINT-1-1–2147483647

Outputs (1)

NameTypeDescription
dance_3dSTRING