music-to-3d choreography → vrchat avatars

AI Dance Animation for VRChat

mvntSTUDIO generates 3D choreography from music in the browserand gives you a GLB download today.Inspect that file now, then use this planned FBX/BVH path when the engine exports arrive.

VRChat is Unity with extra rules

Everything you upload to VRChat as an avatar is built in a Unity project with the VRChat SDK, installed through the Creator Companion. That has two consequences for anyone looking for AI dance animation for VRChat. First, every Unity import rule applies: metres, Y-up, the Rig tab, the Scale Factor field. Second, a clip sitting in your project does nothing on its own — VRChat plays avatar animation through playable layers described by the Avatar Descriptor, and a dance has to be wired into one of them and given something to trigger it.

mvntSTUDIO handles the generation half: it is a music-to-3D-choreography tool that reads a track — YouTube, Suno, and SoundCloud are common sources creators bring into Studio — and produces a dance scene in the browser with nothing to install. Sign in and you can download the current GLB export. FBX and BVH exports are coming soon, so the Unity and VRChat setup below is a forward-looking guide for when those formats arrive. There is no VRChat integration and no upload path from Studio; inspect the GLB in a glTF viewer or Blender today, then take the planned FBX through your avatar project and the SDK when that export launches.

Which format is available for VRChat today

GLB is available today; FBX and BVH are coming soon. The current GLB is useful for viewing or Blender, while the planned FBX workflow is what will feed a Unity-based VRChat avatar project.

  • FBX Coming soon

    FBX export is coming soon. When it launches, your avatar project will be able to use Unity’s native FBX importer, with the Model, Rig, and Animation tabs providing the Humanoid setting and scale factor. Nothing about the VRChat SDK changes this planned path — it sits on top of Unity’s import pipeline rather than replacing it.

  • BVH Coming soon

    BVH export is coming soon. It will hold joint rotations and no geometry, and will be useful when you want to drive an armature you already have — import it into Blender, retarget onto your avatar’s armature, and use the planned FBX export from there. If you are not retargeting in a DCC, you will not need this future file.

  • GLB Available now

    GLB is the current download. Unity does not read GLB without a third-party package, so a .glb is not directly useful inside an avatar project, but it is a fast way to check the motion outside Unity — in any glTF viewer or in Blender — while the FBX and BVH exports are prepared.

What actually stops people

Half of these are Unity problems and half are VRChat problems. The VRChat half is where most of the lost evenings are.

1. Humanoid is not optional here

On the Rig tab, set Animation Type to Humanoid. VRChat’s avatar IK and the standard emote setup are built on Unity’s humanoid Avatar system, and a Generic rig gives up the features that make an avatar an avatar. Practically this also means the same requirements Unity has anywhere else: hips, spine, head, and both arms and legs down to hands and feet must map, a rest pose close to T-pose gives you a clean Avatar, and any red slot in Configure has to be assigned by hand before the mapping is usable.

2. Humanoid clips retarget, Generic clips do not

A Humanoid AnimationClip is stored in Unity’s normalised muscle space, which is why the same dance can play on avatars with wildly different proportions. A Generic clip is bound to the exact transform paths it was authored against, so dropping one onto someone else’s avatar produces no motion at all rather than an obvious error. If you plan to share the emote or use it on more than one avatar, the clip has to come in as Humanoid.

3. Retargeting drift on unusual proportions

Muscle-space retargeting normalises by bone length rather than by absolute position, so contact points are approximate. A clap, a hand on the hip, a hand brushing the floor — these land accurately on a body close to the source proportions and drift on very tall, very short, or long-armed avatars. There is no setting that fixes this; it is a property of how humanoid retargeting works. Preview the dance on the specific avatar rather than assuming, and prefer choreography with fewer self-contact beats if the avatar is unusually proportioned.

4. The clip has to live on the Action layer

The Avatar Descriptor exposes playable layers, and a full-body dance belongs on Action. That layer is designed to take over the whole body and override locomotion while it runs, which is exactly what an emote needs. FX is the layer for things that do not move transforms — materials, blendshapes, toggles — so putting a dance there is the wrong tool. You build an Animator Controller for the Action layer, add a state that plays your clip, and transition into it.

5. Tracking control, or the dance only half plays

This is the most common single symptom people describe: the legs dance and the upper body stubbornly follows the headset and controllers. In VR, your tracked joints drive the avatar, and animation does not override that by default. The standard emote pattern is to add a VRC Animator Tracking Control behaviour on the state that starts the dance, switching head, hands, hips, and feet from Tracking to Animation, and a matching behaviour on exit that switches them back. Pair it with a VRC Playable Layer Control that raises the Action layer weight when the emote starts and lowers it when it ends. Miss either and the emote looks broken in VR while appearing fine in desktop mode, which is why it so often ships broken.

6. Write Defaults consistency

Keep the Write Defaults setting consistent across the states in a controller. Mixing it produces properties that stick after a state exits — an arm that stays raised after the dance ends, a toggle that will not clear — and the resulting bugs are intermittent enough to be genuinely hard to trace back. Pick one convention for the controller and hold it.

7. Editing an imported clip

When the planned FBX workflow arrives, the AnimationClip inside an imported FBX will be read-only. Expand the FBX in the Project window, select the clip, and duplicate it to get a writable copy you can edit in the Animation window or reference from a controller you intend to modify. People often lose time here believing the clip is corrupt when it is simply nested inside an imported asset.

Setting it up as an emote

From the current GLB handoff to the planned emote workflow.

  1. 1 Download GLB from Studio. Generate the dance from your track in mvntSTUDIO, sign in, and download the current GLB export.
  2. 2 Inspect GLB or plan the avatar import. Open the GLB in a glTF viewer or Blender today. When the planned FBX export arrives, drop it into the Unity project that has the VRChat SDK; on the Model tab check the scale against your avatar, and on the Rig tab set Animation Type to Humanoid and resolve any red slots in Configure.
  3. 3 Prepare a writable future clip. When FBX export becomes available, expand the imported FBX in the Project window and duplicate the AnimationClip so you have a copy you can edit and reference freely.
  4. 4 Build the Action layer state. In the Animator Controller assigned to the avatar’s Action playable layer, add a state that plays the clip, with transitions in and out driven by a parameter.
  5. 5 Add the state behaviours. On the entry state, add VRC Animator Tracking Control set to Animation for head, hands, hips, and feet, plus VRC Playable Layer Control to bring the Action layer to full weight. Reverse both on exit.
  6. 6 Expose it in the menu. Add an expression parameter for the emote and a menu entry that drives it, so the dance can be triggered in game rather than only in the editor.
  7. 7 Test, then publish. Test in play mode and, ideally, in VR before uploading — tracking control problems are invisible in desktop mode. When you have a valid imported clip and avatar setup, build and publish through the SDK; today this remains planning guidance until the FBX export path ships.

Symptom to cause

The fast diagnosis list.

The legs dance but the arms and head follow my controllers
No VRC Animator Tracking Control on the state, or it is not switching hands and head to Animation.
Nothing happens at all when the emote triggers
The Action layer weight was never raised, or the clip is Generic rather than Humanoid and binds to nothing on this avatar.
Something stays stuck after the dance ends
Inconsistent Write Defaults across states, or a missing exit behaviour that never restores tracking or layer weight.
The clip cannot be edited
When the planned FBX workflow arrives, the clip will still be inside the imported FBX. Duplicate it to make a writable copy.
The choreography looks fine on one avatar and off on another
Humanoid retargeting drift from differing limb proportions. Preview per avatar; there is no global fix.

Why generate rather than buy a dance asset

Bought emote packs are fixed to whatever song they were built for. Generating from a track means the motion is aligned to that track.

DimensionHand-keyed or mocap dancemvntSTUDIO music-to-3D choreography
Starting point An empty timeline, or a booked capture sessionA song — Studio reads the track and builds motion against it
Beat alignment Counted and keyed by hand, or cleaned up after captureGenerated against the rhythm, tempo, and structure of the audio
What you take away Whatever your DCC exportsGLB download from the browser today, with BVH and FBX coming soon
Best used for Final hero performances and signature choreographyDrafts, background crowds, emotes, and fast iteration

AI dance animation for VRChat — common questions

Can I import a GLB dance straight into VRChat?
GLB is the current download, but VRChat avatars are built and uploaded from a Unity project, and Unity does not read GLB without a third-party package. Use a glTF package or Blender to inspect or convert it today; the FBX export for the avatar project is planned for a future release.
Does the rig have to be Humanoid?
For a dance emote on a humanoid avatar, yes. VRChat’s IK and the standard emote layers are built on Unity’s humanoid Avatar system, and only Humanoid clips retarget across avatars. A Generic clip is bound to the specific transform hierarchy it was authored on and will not drive a different avatar.
Why does only the lower body follow my dance animation?
In VR your tracked head and hands keep driving those joints unless the animation explicitly takes them over. Add a VRC Animator Tracking Control behaviour to the state that plays the emote, switching head, hands, hips, and feet from Tracking to Animation, and add the reverse on exit.
Which playable layer should a dance emote go on?
Action. It is the layer intended to override locomotion and drive the whole body for the duration of an emote. Keep FX for material, blendshape, and toggle work.
Will the dance look the same on every avatar?
Close, but not identical. Unity’s humanoid retargeting normalises by bone length, so poses transfer well while contact points — claps, hands on hips, a hand near the floor — drift on avatars with unusual proportions. Preview on the actual avatar before publishing.
Does the export include the music?
No. The current GLB carries geometry and motion, not audio; the planned BVH and FBX exports will likewise carry motion and, in the case of FBX, geometry — not audio. The song is handled separately, and you remain responsible for having the rights to use it wherever the dance ends up.