music-to-3d choreography → roblox

AI Dance Animation for Roblox

mvnt Studio turns a track into 3D choreography in the browserand exports BVH or FBX.Roblox has its own rig, its own units, and its own publishing step — all three matter.

Roblox does not play animation files, it plays assets

The thing that trips up everyone importing AI dance animation for Roblox for the first time is that a file on disk is never the final form. Roblox animations live in the Animation Editor, get published to Roblox as assets, and are played at runtime by asset ID. An FBX in your project folder is a step along the way, not something a script can reference. Plan for the publish step from the start, because ownership of that asset determines whether the animation loads at all.

The generation side is straightforward. mvnt Studio is a music-to-3D-choreography tool that runs in the browser with no install: give it a track — YouTube, Suno, and SoundCloud are among the supported sources — and it produces a dance scene you can review immediately. Sign in and you can download the result as BVH or FBX, with GLB coming soon. There is no Roblox plugin and no direct upload; the FBX goes through Roblox Studio’s own animation import.

Which download to take

Roblox’s animation import path is FBX-shaped. BVH serves an upstream role, and GLB is coming soon.

  • FBX Use this one

    Roblox Studio’s Animation Editor can import animation from an FBX file onto a rig already present in the workspace. That is the supported path from an external tool into a Roblox animation asset, and it is the reason FBX is the download to take if Roblox is your target.

  • BVH Retargeting source

    Joint hierarchy and rotation channels, no geometry. Its role here is specific and useful: if you need to move the motion onto an R15-named armature before export, BVH into Blender is a clean way to do it without dragging mesh data along.

  • GLB Coming soon

    GLB is not available to download yet. It is a single self-contained file with mesh, skin, and motion, readable by any glTF viewer and by Blender, so once it ships it will be a quick way to check the choreography and a convenient file to open in Blender when the skeleton needs rework.

The Roblox-specific obstacles

Roblox differs from the other engines on this site in more places than people expect — units, rig, and the fact that publishing is mandatory.

1. Studs are not metres

Roblox measures in studs, its own unit, and a stud is not a metre. A character exported at real-world human scale will not line up with a default Roblox rig, and the mismatch shows up as limbs that overshoot or undershoot rather than as an obviously giant character. Compare the imported motion against a rig inserted by Roblox’s own Rig Builder rather than reasoning about it in metres, and rescale in Blender before export if the two clearly disagree.

2. Y-up, and check the facing direction

Roblox is Y-up, which matches the usual FBX convention, so the "character lying on its back" failure common to Z-up round trips is less likely here. The orientation issue that does bite is facing direction: Roblox has its own convention for which way a character looks, and an export authored to a different one will dance backwards relative to everything else in your place. Verify against the Rig Builder rig in the viewport rather than assuming — it takes ten seconds and saves a reimport.

3. R15, not R6

Roblox has two body layouts. R6 is six parts — torso, head, two arms, two legs — with no elbows, knees, or waist. R15 splits the body into fifteen, with names like UpperTorso, LowerTorso, LeftUpperArm, LeftLowerArm, LeftHand, RightUpperLeg, RightLowerLeg, RightFoot, and so on. Choreography generated for a full biped assumes joints that R6 simply does not have, so a detailed dance mapped onto R6 collapses into something much coarser. Insert an R15 rig with Rig Builder from the Avatar tab and import against that.

4. Joint naming has to correspond

The importer matches the incoming skeleton to the rig in the workspace, which means the source joints need to correspond to R15’s layout and naming. The mvnt export does not use R15 names — it uses the Mixamo convention without the mixamorig prefix (Hips, Spine, Spine1, LeftUpLeg, LeftLeg, LeftFoot, and so on) — so expect to map rather than to drop in. The practical fix is a Blender pass: import the BVH, retarget onto an armature that uses R15 names and hierarchy, then export FBX from there. This is more work than anyone wants, but it is deterministic — once you have an R15-named armature saved, every subsequent dance goes through the same pass in minutes.

5. Animation priority decides whether you see anything

Roblox plays multiple animation tracks at once, and priority resolves the conflict. The default character scripts are constantly playing idle and movement animations, so a dance imported at a low priority is simply overridden and the character appears to ignore it. Set the priority to Action in the Animation Editor, or set AnimationTrack.Priority in code. This is the answer to a large share of "my animation does not play" questions, and it is the first thing to check when the asset loads without error but nothing visible happens.

6. Publishing and asset ownership

An animation has to be published to Roblox before a script can use it; publishing returns an asset ID that you reference as rbxassetid://. The catch is ownership. An animation published under a personal account will not load in an experience owned by a group, and vice versa — the asset has to be published under the same owner as the place using it. This fails silently in ways that look like a scripting bug, so if the code is right and the track never plays, check who owns the animation before you check anything else.

7. Looping

Looping is a property of the animation, set with the Looped toggle in the Animation Editor or on the AnimationTrack at runtime. A dance that stops dead after one pass is usually not a broken import, just an unlooped clip.

Import checklist

Download to in-game playback.

  1. 1 Export FBX from Studio. Generate the dance from your track in mvnt Studio, sign in, and download the FBX.
  2. 2 Insert an R15 rig. In Roblox Studio, open the Avatar tab and use Rig Builder to place an R15 rig in the workspace. This is the rig the imported animation will be matched against.
  3. 3 Import the animation. Open the Animation Editor, select the rig, and import the animation from your FBX file. Scrub the timeline immediately to check scale and orientation.
  4. 4 Set priority and looping. Set the animation priority to Action so it is not overridden by the default idle and movement tracks, and set Looped if the dance should repeat.
  5. 5 Publish to Roblox. Publish the animation from the Animation Editor under the account or group that owns the experience, and copy the resulting asset ID.
  6. 6 Play it from a script. Create an Animation instance with the asset ID, load it through the character’s Animator, and play the returned AnimationTrack.

Playing the published animation

Load through the Animator rather than the Humanoid — Humanoid:LoadAnimation is deprecated. Replace the numeric id with the one publishing gave you.

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://0000000000"

local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")

local track = animator:LoadAnimation(animation)
track.Priority = Enum.AnimationPriority.Action
track.Looped = true
track:Play()

Symptom to cause

Work down this list before rewriting any code.

The script runs without errors but the character does not dance
Animation priority too low, so the default idle and movement tracks win. Set it to Action.
The animation will not load in a group experience
It was published under a personal account. Republish under the group that owns the place.
The dance looks coarse and jointless
It was mapped onto an R6 rig, which has no elbows, knees, or waist. Rebuild against R15.
The import lands but limbs overshoot
Scale mismatch between the source and the Roblox rig. Rescale in Blender against a Rig Builder reference and reimport.
The dance plays once and stops
Looped is off, either on the published animation or on the AnimationTrack.

Where generated choreography fits in a Roblox experience

Emotes, NPC ambience, and crowd fill are the natural home for generated dance. It gets you a beat-aligned pass in an afternoon instead of a sprint.

DimensionHand-keyed or mocap dancemvnt Studio 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 exportsBVH or FBX download from the browser, with GLB coming soon
Best used for Final hero performances and signature choreographyDrafts, background crowds, emotes, and fast iteration

AI dance animation for Roblox — common questions

Which file format does Roblox want for animation?
FBX. Roblox Studio’s Animation Editor imports animation from an FBX file onto a rig you have already placed in the workspace. Download the BVH as well if you plan to retarget in Blender first.
Should I use R6 or R15?
R15. It splits the body into fifteen parts with articulated elbows, knees, and a waist, which is what a full-body dance needs. R6 has six parts and no elbows or knees, so detailed choreography flattens out into something much simpler when mapped onto it.
Why does my animation not play even though the script runs?
Most often animation priority. The default character scripts continually play idle and movement animations, and a lower-priority track is overridden without any error. Set the priority to Action. If that does not fix it, check that the animation asset is owned by the same account or group as the experience.
Do I have to publish the animation to Roblox?
Yes. Scripts reference animations by asset ID through rbxassetid://, so the clip has to be published from the Animation Editor before it can be loaded at runtime. Publish it under the owner of the experience that will use it.
Why is the imported character the wrong size?
Roblox measures in studs rather than metres, so a real-world-scale export does not line up with a default Roblox rig. Compare against a rig inserted with Rig Builder and rescale in Blender before exporting the FBX if they clearly disagree.
Can I use the same export in Unity or Unreal too?
Yes — it is the same download, just different import settings at the other end. The Unity page covers metre units and Humanoid Avatars; the Unreal page covers centimetre units and Skeleton assets.