TopX: Text-to-Motion for Unseen Skeletons from the Skeleton File Alone
Organizations: University of Southampton · MOGO AI · Nanjing University
Abstract
Text-to-motion models generate for the skeletons they were trained on, while a new character arrives as a skeleton file and nothing else. We study text-to-motion for skeletons that no training clip has used, with no clips of the character, no template, no retargeting and no fine-tuning. We present TopX, a 73M-parameter flow-matching transformer that generates joint rotations and a root trajectory for any kinematic tree from its tree, rest pose and joint names. Motion is normalised by the rest pose and the size of the skeleton, and the rest pose enters as a world-frame descriptor that does not depend on how the rig's author oriented each joint, with rest conventions randomised in training. Attention is factorised over the joints and the frames of a motion and carries a spatial--temporal encoding designed for skeleton graphs of any topology: queries and keys are rotated across joints by a heat-kernel coordinate of the skeleton graph, which is defined for every tree and does not change with the order of its joints or the eigenbasis of its Laplacian, and across frames by a rotary encoding of frame order. To measure what this buys, we build SkelShift: four motion corpora under one codec, 143,334 captioned clips on skeletons of 4 to 142 joints, from which 4,232 clips on 2,043 skeletons are held out by clip, rig, tree class or species and organised along topology, joint count, body plan, species and rig source, and scored by motion quality: Fréchet distances on public kinetic features and on kinematic descriptors, foot skating and ground contact. Against UniMate trained on the same clips, on test rigs without a training clip, TopX lowers the descriptor FID from 5.73 to 4.58 when UniMate's guidance is tuned for the kinetic FID, and the kinetic FID from 1.48 to 0.55 when it is tuned for the descriptor FID, also on motions no training skeleton performs; fewer of its frames sink below the ground.
Figures & tables
| Bucket | Source | Unseen at test time | Clips dev / test | Rigs | Trees | Joints | TED | Reused motion |
| ID-clip | UniML3D | clips of training rigs | 70 / 172 | 135 | 79 | 10–60 | 0 | 26% |
| ID-tree | UniML3D | rigs whose tree is seen | 255 / 508 | 759 | 140 | 6–60 | 0 | 63% |
| OOD-tree | UniML3D | tree classes (bipeds, quadrupeds) | 213 / 320 | 333 | 266 | 11–60 | 2 | 15% |
| OOD-plan | UniML3D | tree classes of rare body plans | 40 / 62 | 70 | 63 | 5–60 | 5 | 2% |
| OOD-J 60 (Mixamo) | UniML3D | rigs of one 65-joint humanoid tree | 155 / 350 | 250 | 1 | 65 | 5 | 51% |
| OOD-J 60 (other) | UniML3D | rigs above the corpus’s joint range | 166 / 512 | 464 | 184 | 61–117 | 7 | 33% |
| UniMate tuned on FID kin | UniMate tuned on FID desc | |||||||||||||
| FID desc | FID kin | Pen. | FID desc | FID kin | Pen. | |||||||||
| Test clips | Clips | R–R | Ours | Uni. | Ours | Uni. | Ours | Uni. | Ours | Uni. | Ours | Uni. | Ours | Uni. |
| All | 1,062 | 0.48 | 4.83 | 6.06 | 2.00 | 2.05 | 0.24 | 0.33 | 4.83 | 4.32 | 2.00 | 2.52 | 0.24 | 0.28 |
| ID-clip | 172 | 2.83 | 7.18 | 9.09 | 2.40 | 2.49 | 0.25 | 0.34 | 7.18 | 5.96 | 2.40 | 2.57 | 0.25 | 0.27 |
| No training clip | 890 | 0.55 | 4.58 | 5.73 | 0.55 | 0.48 | 0.24 | 0.33 | 4.58 | 4.22 | 0.55 | 1.48 | 0.24 | 0.28 |
| novel motion | 453 | 1.13 | 9.63 | 10.70 | 1.15 | 0.89 | 0.27 | 0.35 | 9.63 | 7.95 | 1.15 | 2.17 | 0.27 | 0.29 |
| Bucket | Rigs / clips | KID desc (real–real) | Slip (real) | Pen. | Float (real) | Speed |
| ID-clip | 93 / 172 | 0.950 (0.455) | 0.309 (0.353) | 0.204 | 0.110 (0.128) | 0.87 |
| ID-tree | 504 / 508 | 0.145 (0.002) | 0.304 (0.349) | 0.172 | 0.021 (0.039) | 0.90 |
| OOD-tree | 218 / 320 | 1.74 (0.142) | 0.310 (0.366) | 0.200 | 0.045 (0.078) | 0.77 |
| OOD-plan | 45 / 62 | 10.9 (6.04) | 0.176 (0.280) | 0.251 | 0.106 (0.164) | 0.81 |
| OOD-J 60 (Mixamo) | 172 / 350 | 0.664 (0.874) | 0.311 (0.363) | 0.131 | 0.024 (0.050) | 0.82 |
| OOD-J 60 (other) | 351 / 512 | 0.240 (0.092) | 0.275 (0.333) | 0.162 | 0.021 (0.029) | 0.77 |
| Arm | OOD- tree | OOD- plan | New species | OOD- rig | Rest |
| Real | 0.142 | 6.04 | 104 | 0.914 | – |
| Full recipe | 1.78 | 11.1 | 82.4 | 1.01 | 0.44 |
| Learned frame table | 1.88 | 11.7 | 84.4 | 1.59 | – |
| Learned joint table | 1.87 | 11.5 | 83.7 | 1.12 | – |
| Eigenvectors + SignNet | 1.83 | 11.5 | 83.6 | 1.17 | – |
| augmentation | 1.95 | 12.1 | 91.8 | 1.03 | 0.89 |
Appendix figures & tables14 assets
Supplementary material from the paper’s appendix.
Appendix
| Slice | Content | Rows |
| 0:3 | position: XZ from the smoothed root track, Y absolute | all |
| 3:9 | rotation , continuous 6D | all |
| 9:12 | world velocity (supervision only) | all |
| 12 | contact: height , speed /s | all |
| 13:15 | smoothed root track XZ | root |
| 15:17 | heading | root |
| Width , blocks , heads | 512, 10, 8 (73.3M parameters) |
| Frames | 1 rest frame + target frames |
| Heat-kernel scales | , |
| Temporal rotary base | 700 |
| Caption dropout | 0.1 |
| Epochs, draws per epoch | 600, 55,984 (437 steps of 128; the last 48 dropped) |
| Optimiser | AdamW, weight decay 0.01 |
| Bucket | T0 | T1 | T2a | T2b |
| ID-clip, ID-tree | 1,005 | – | – | – |
| OOD-tree | – | 169 | 145 | 219 |
| OOD-plan | – | 8 | 32 | 62 |
| OOD-J 60 (Mixamo) | – | 505 | – | – |
| OOD-J 60 (other) | – | 356 | 120 | 202 |
| OOD-J 5 | – | 1 | – | 1 |
| FID desc | Skate | Slide | Cov. | Pen. | Float | Speed | KID desc | |
| Real clips | – | 0.254 | 1.71 | 0.442 | 0.000 | 0.050 | 1 | 0.091 |
| 1.88 | 0.231 | 1.60 | 0.452 | 0.179 | 0.025 | 0.78 | 0.149 | |
| 1.71 | 0.243 | 1.74 | 0.441 | 0.170 | 0.030 | 0.84 | 0.142 | |
| 1.79 | 0.260 | 2.02 | 0.417 | 0.172 | 0.039 | 0.95 | 0.176 |
| Evaluations | Seconds | |
| TopX, 20 steps | 40 | 0.67 |
| TopX, 50 steps | 100 | 1.63 |
| TopX, 100 steps | 200 | 3.23 |
| TopX, 200 steps | 400 | 6.43 |
| TopX, 400 steps | 800 | 12.82 |
| UniMate, guidance 3 | 366.4 | 6.13 |
| FID desc | FID kin , Motion2Motion | FID kin , Bailando | ||||||
| Test clips | Clips | Ours | UniMate | R–R | Ours | UniMate | Ours | UniMate |
| All | 1,062 | 4.83 | 6.06 | 0.48 | 2.00 | 2.05 | 1.85 | 1.90 |
| ID-clip | 172 | 7.18 | 9.09 | 2.83 | 2.40 | 2.49 | 2.10 | 2.14 |
| No training clip | 890 | 4.58 | 5.73 | 0.55 | 0.55 | 0.48 | 0.56 | 0.44 |
| novel motion | 453 | 9.63 | 10.70 | 1.13 | 1.15 | 0.89 | 1.05 | 0.77 |
| reused motion | 437 | 0.65 | 1.64 | 0.60 | 0.06 | 0.24 | 0.08 | 0.27 |
| Pen. | Skate | Cov. | Speed | |||||||
| Test clips | Ours | UniMate | Ours | UniMate | Real | Ours | UniMate | Real | Ours | UniMate |
| All | 0.24 | 0.33 | 0.33 | 0.35 | 0.35 | 0.60 | 0.58 | 0.64 | 0.93 | 1.08 |
| ID-clip | 0.25 | 0.34 | 0.34 | 0.37 | 0.33 | 0.52 | 0.51 | 0.55 | 0.98 | 1.23 |
| No training clip | 0.24 | 0.33 | 0.33 | 0.34 | 0.35 | 0.61 | 0.59 | 0.66 | 0.92 | 1.06 |
| novel motion | 0.27 | 0.35 | 0.26 | 0.33 | 0.30 | 0.52 | 0.47 | 0.57 | 0.90 | 1.13 |
| reused motion | 0.23 | 0.32 | 0.39 | 0.35 | 0.39 | 0.69 | 0.70 | 0.75 | 0.94 | 1.02 |
| FID desc | FID kin M2M | FID kin Bk. | Pen. | Skate | Speed | |||||||||
| Test clips | Clips | Ours | Uni. | Ours | Uni. | Ours | Uni. | Ours | Uni. | Ours | Uni. | Real | Ours | Uni. |
| All | 1,062 | 4.83 | 4.32 | 2.00 | 2.52 | 1.85 | 2.18 | 0.24 | 0.28 | 0.33 | 0.24 | 0.35 | 0.93 | 0.85 |
| ID-clip | 172 | 7.18 | 5.96 | 2.40 | 2.57 | 2.10 | 2.22 | 0.25 | 0.27 | 0.34 | 0.25 | 0.33 | 0.98 | 0.93 |
| No training clip | 890 | 4.58 | 4.22 | 0.55 | 1.48 | 0.56 | 1.13 | 0.24 | 0.28 | 0.33 | 0.24 | 0.35 | 0.92 | 0.83 |
| novel motion | 453 | 9.63 | 7.95 | 1.15 | 2.17 | 1.05 | 1.70 | 0.27 | 0.29 | 0.26 | 0.21 | 0.30 | 0.90 | 0.83 |
| reused motion | 437 | 0.65 | 1.21 | 0.06 | 0.72 | 0.08 | 0.47 | 0.23 | 0.27 | 0.39 | 0.27 | 0.39 | 0.94 | 0.83 |
| Method | FID desc | Skate | Slide | Cov. |
| Rigs unseen by all three: capybara and emu, 6 rigs, 635 clips | ||||
| Real clips | – | 0.213 | 1.03 | 0.199 |
| AnyTop † [ 12 ] | 24.63 | 0.759 | 10.65 | 0.358 |
| UniMate [ 31 ] | 3.32 | 0.268 | 1.59 | 0.220 |
| TopX | 1.19 | 0.208 | 1.27 | 0.234 |
| Trained on by both baselines: 6 Truebones rigs, 62 clips | ||||
| Bucket | Rigs / clips | Real–real | Full | Frame table | Joint table | Eigvec. + SignNet | aug. |
| OOD-tree | 218 / 320 | 0.142 | 1.78 0.03 | 1.88 0.03 | 1.87 0.04 | 1.83 0.03 | 1.95 0.04 |
| OOD-plan | 45 / 62 | 6.04 | 11.1 0.2 | 11.7 0.1 | 11.5 0.3 | 11.5 0.2 | 12.1 0.2 |
| OOD-new-species ∗ | 9 / 47 | 104 | 82.4 0.8 | 84.4 1.0 | 83.7 0.7 | 83.6 1.3 | 91.8 1.8 |
| OOD-rig ∗ | 6 / 62 | 0.914 | 1.01 0.11 | 1.59 0.04 | 1.12 0.11 | 1.17 0.15 | 1.03 0.03 |
| Mesh (author) | Licence | Figure |
| Defeat Idle (vicente betoret ferrero) | CC BY 4.0 | 2 (a) |
| Lowpoly Dog Walk (timesen) | CC BY 4.0 | 2 (a) |
| Dey Flair Dancing (jdey123) | CC BY 4.0 | 2 (a) |
| Back Flip To Uppercut (1) (marcolinadesign) | CC BY 4.0 | 2 (a) |
| Low poly fox running animation (dragonsnap) | CC BY 4.0 | 3 |
| fario3 (masterdef) | CC BY 4.0 | 3 |
| All | Emu | |||
| R@1 | Shuf. | R@1 | Shuf. | |
| Real clips, first 60 frames | 0.896 | – | 0.871 | – |
| Real clips, full length | 0.929 | – | 0.933 | – |
| TopX, generating 60 frames | 0.915 0.007 | 0.122 | 0.928 0.006 | 0.137 |
| TopX, clip length, first 60 frames | 0.932 0.007 | 0.113 | 0.922 0.016 | 0.127 |
| TopX, clip length, full | 0.953 0.004 | 0.120 | 0.954 0.013 | 0.137 |
Text-to-Motion Generation
Text-to-motion generation converts natural-language descriptions into semantically aligned, temporally coherent 3D human movement.
See all 96 papers