RoboParty Lab

PartyMimic

One whole-body tracking policy, fast: trained in 26 min on 1× RTX 4090 (24 GB), on 41 h of diverse motion. It generalizes to five held-out test sets up to extreme martial arts and is the most precise of every method we compared, with two architectures (MLP, attention) and two modalities (joint references or five keypoints).

Fast26 min on 1× RTX 4090 (24 GB) Diverse data41 hGeneralizes5 held-out sets Precise20.5 | 16.5 mm2 architecturesMLP | attention 2 modalitiesjoints | 5 keypoints
Fast26 min RTX 4090 · 24 GBon one consumer GPU for the full library, G1 and RP1 alike (attention: 41 min). The other methods took 50–120 min.
Diverse data41 h10,731 clips from LAFAN1, BONES-SEED, kneeling / crawling and KungfuAthlete: 864 distinct motion types (how measured).
Generalizes5 held-out setsLoco, Mani, Dance, Ground and 308 extreme martial-arts clips, all zero-shot. 92% of the Dance and 85% of the Extreme windows have no close match in training.
Precise20.5 | 16.5 mmbody error on held-out manipulation, G1 | RP1; the best other method: 28.2 mm (Mimic Lite, −27%) | 27.3 mm (BlinkMimic, −40%).
Two architecturesMLP | attentionthe MLP is the fastest and fits a 24 GB card; the attention encoder is the most precise (G1 43.5 mm mean).
Two modalitiesjoints | 5 keypointsfrom only pelvis, head, wrist and ankle poses, RP1 reaches 48.7 mm, below every baseline given the full joint reference (60.4 mm).
Mean held-out body position error against training GPU-hours for every method
Mean body position error over the five held-out test sets (lower is better) against training compute. PartyMimic with the default MLP and with the attention reference encoder, 2-seed means at 12,000 iterations. The other methods were trained by us on the same data and GPU; SONIC and Mimic Lite v1.1 are the official policies, evaluated as released (G1 only).

Results on held-out motions

Every method is trained on the same 10,731 clips: LAFAN1, a 10k diversity subset of BONES-SEED, 56 kneeling and crawling clips of our own, and 635 KungFuAthlete clips. It is tested on five held-out sets: Loco (80 clips), Mani (48), Dance (40) and Ground (60) from MotionDecode, a different motion-capture source, and Extreme (308): KungFuAthlete martial arts, jumps and flips, held out by whole source video. RP1 uses the same motions retargeted to RP1. PartyMimic comes with two reference encoders: an MLP (default) and a cross-attention encoder (attention, --ref_enc xattn).

MethodTrainingMeanLocoManiDanceGroundExtreme
Unitree G1 · body position error (mm, lower is better), completion below
SONIC (NVIDIA GEAR, official)21,000 GPU-h58.428.7100%45.5100%48.799%80.386%88.788%
Mimic Lite v1.1 (official)50 GPU-h67.525.099%28.294%43.355%145.266%95.774%
SuperMimic (paper hyperparameters)52 min67.934.9100%34.3100%55.597%119.282%95.593%
NablaMimic (official config, 2 h)120 min59.932.999%30.3100%46.989%107.881%81.696%
BlinkMimic (main preset)59 min59.932.9100%30.9100%54.197%100.189%81.497%
XMimic (BlinkMimic main in JAX)50 min60.232.3100%30.6100%53.598%101.390%83.197%
PartyMimic, MLP (default)26 min45.125.7100%20.599%36.897%80.694%62.098%
PartyMimic, attention41 min43.525.1100%21.199%35.098%76.293%60.398%
RoboParty RP1 · body position error (mm, lower is better), completion below
SuperMimic (paper hyperparameters)149 min74.034.8100%29.1100%53.499%162.576%90.294%
BlinkMimic (main preset)68 min60.433.7100%27.3100%50.396%110.591%80.398%
XMimic (BlinkMimic main in JAX)59 min62.733.8100%29.1100%49.796%121.388%79.598%
PartyMimic, MLP (default)26 min47.823.4100%16.5100%35.396%105.188%58.999%
PartyMimic, attention42 min44.622.9100%16.1100%33.498%94.390%56.298%
PartyMimic, sparse keypoints, MLP29 min48.724.7100%19.1100%38.399%100.990%60.798%
PartyMimic, sparse keypoints, attention46 min47.824.1100%18.2100%36.897%100.090%60.198%

PartyMimic rows and the shipped checkpoints use the prior defaults (std_scale 0.35, no Muon weight decay). The updated recipe (--muon_wd 0.1 --std_scale 0.6) matches that tracking to within seed noise and improves deployment metrics (Recipe, Sim2real). Scored by the sim2real leaderboard MuJoCo sim2sim evaluator after ONNX export: every clip played from start to end, failure when the pelvis height error exceeds 0.3 m or the gravity direction error exceeds 0.8. Error is the local body position error over the tracked part of each clip; completion is the tracked share of each clip; Mean is the mean error of the five sets. All trained methods ran 12,000 iterations (NablaMimic: its 2-hour budget) with 2 seeds; the table gives the means. Training is the wall-clock time of 12,000 iterations on an otherwise idle RTX 4090 (i9-14900K). Our cards are 48 GB editions; the MLP fits the standard 24 GB card: with only 24.1 GB left free, G1 and RP1 runs kept the same speed and peaked at 22.6 and 23.4 GB.

Training data and how new the test sets are

t-SNE map of the training windows by source, and the share of test windows close to the training data
Left: the 1-s windows of the training library (a sample per source), embedded with t-SNE. Right: the share of each test set's windows that have a close training window, as the sources are added.

We describe every 1-s window by heading-invariant root, joint and hand / foot kinematics, project to 32 dimensions and cluster the 41 h into 2,000 motion clusters. The library spans 864 distinct motion types (the exponential of the cluster entropy): LAFAN1 alone 548, BONES-SEED adds 249, kneeling / crawling 11 and KungfuAthlete, with only 1.3 h, 56. A test window counts as covered when a training window lies within the median distance between windows of different training sources. Only 47% of Loco, 57% of Mani, 8% of Dance, 46% of Ground and 15% of Extreme windows are covered: most test motion is new to every method. KungfuAthlete training clips raise the Extreme coverage from 7% to 15%.

MLP or attention

The attention encoder lets a causal Transformer over the observation history query the goal frames, so the robot's own dynamics shape how it reads the reference. It lowers the G1 error on Ground by 4.4 mm and on Extreme by 1.7 mm, and the mean by 1.6 mm (RP1: 3.2 mm), at 1.6× the training time. The MLP fits a 24 GB card; the attention encoder needs more memory, or --pi_batch 1024 on 24 GB (29 min on G1), which costs G1 2.7 mm on Ground and 2.1 mm on Extreme. --pipeline splits training over two GPUs for 1.6–1.9× the speed.

EncoderG1 timeRP1 timeG1 mean errorRP1 mean errorGPU memory
MLP (default)26 min26 min45.1 mm47.8 mm22 GB peak: fits 24 GB
Attention41 min42 min43.5 mm44.6 mm> 24 GB (or --pi_batch 1024)

Sparse keypoints: one command for any body

With --interface sparse5 the command is six poses per frame: the pelvis pose, the head orientation and the poses of both wrists and both ankles, 51 numbers and no joint angles. Any body with a pelvis, a head, two hands and two feet can be written this way: a person in a motion-capture suit, a VR tracker set, a video pose estimate, or another robot. The command does not depend on a robot's joint layout.

The same LAFAN1 motion as captured from a person and retargeted to Unitree G1 and RoboParty RP1, each written as the same six keypoint poses (spheres, with their orientation axes). The person's axes are aligned to G1's at the first frame.

Three additions let the policy follow such a command nearly as well as full joint references:

On RP1 the mean whole-body error over the five sets is 48.7 mm from keypoints against 47.8 mm from joint references with the MLP (47.8 vs 44.6 mm with attention), below every baseline that sees the full joint reference (best: 60.4 mm). The keypoints themselves are tracked within 2 mm of joint references on Loco/Mani and Dance, with about half the error of the baselines. tools/export_deploy_onnx.py exports the policy with a keypoint input (ref_kp) and a deployment YAML.

ReferenceEncoderLoco/ManiDanceGroundExtremeExtreme, whole body
RoboParty RP1 · wrist and ankle position error (mm, relative to the own pelvis heading)
JointMLP22.541.9118.385.458.999%
Sparse keypointsMLP24.342.8111.987.760.798%
Jointattention22.139.4101.181.056.298%
Sparse keypointsattention22.439.9110.286.260.198%
JointBlinkMimic40.071.8126.6120.480.398%
JointXMimic42.370.3143.1119.079.598%
Locomotion
Dance
Extreme: martial arts

The RP1 sparse-keypoint policy (MLP, seed 0) in sim2sim. Only its command is drawn: the six target poses, placed in the robot's own pelvis heading frame as the policy reads them, and a red line from each of the robot's wrists and ankles to its target. Locomotion and Dance are the median clips of their sets; Extreme is the martial-arts clip of the videos below.

Sim2sim on held-out motions: zero-shot

Rollouts from the evaluator (MuJoCo, deterministic policy, default MLP encoder, seed 0). Loco, Mani, Dance and Ground show the clip with the median error of its set. Extreme shows two fast clips with clean references, chosen by us: a 12-second fist routine (faster than 63% of the Extreme clips; error 39 mm) and a jump (faster than 86%; 50 mm). The robot is solid, the reference a blue ghost, both at their global poses.

Unitree G1
Locomotion
Manipulation
Dance
Ground
Extreme: martial arts (fast, chosen)
Extreme: jump (fast, chosen)
RoboParty RP1
Locomotion
Manipulation
Dance
Ground
Extreme: martial arts (fast, chosen)
Extreme: jump (fast, chosen)

Why the fast Extreme clips are harder

The Extreme references are estimated from monocular video. We split the 308 clips into thirds by reference speed (95th percentile of the wrist and ankle speed) and measured every G1 rollout:

G1, ExtremeSlowest thirdFastest third
Reference wrist / ankle speed0.8 m/s4.5 m/s
Body position error22 mm77 mm
Robot behind the reference20 ms40 ms
Reference foot sliding while on the ground0.06 m/s0.98 m/s
Largest gap between robot and reference root0.2 m1.1 m

The robot is not late: it trails by one or two control steps, and shifting the reference by that much lowers the error by only 9%. Two other things grow with speed. In the fast clips the reference's feet slide over the ground at about 1 m/s while in contact, an artifact of the video estimate; the robot plants its feet, so its position drifts away from the reference and the ghost runs off. And the fastest swings exceed what the actuators deliver: the robot reaches 78% of the reference speed. Over all clips the error follows foot sliding (rank correlation 0.85) about as closely as speed (0.88). RP1 shows the same pattern (fastest third: 84% of the speed, 0.86 m/s sliding).

Speed on LAFAN: learned in 3–5 min

This comparison is on the LAFAN dataset (LAFAN-40: the 40 G1 LAFAN1 clips, used for both training and evaluation), XMimic's speed benchmark, not on the held-out test sets above. XMimic rebuilds BlinkMimic's main recipe in JAX and reports BlinkMimic's LAFAN-40 target in 0.91 min on four H100s. We ran its 1-GPU and 2-GPU (AL) trainers, BlinkMimic main and PartyMimic on our two RTX 4090s, under XMimic's protocol, 3 seeds each. PartyMimic keeps its recipe unchanged; it was not tuned for this benchmark. In the comparison above XMimic matches BlinkMimic (G1 mean error 60.2 vs 59.9 mm).

LAFAN-40 evaluation return against training minutes and time to target
MethodGPUsit/sFirst return ≥ 0.82 Held ×3, 0 failedHeld ×3, with start-upReturn at 3,500 it
BlinkMimic (main)17.82.93 min3.45 min3.62 min0.865
XMimic, 1 GPU19.32.32 min3.71 min3.96 min0.860
PartyMimic, 1 GPU18.22.45 min5.17 min5.57 min0.883
XMimic, 2 GPUs (actor | learner)213.21.71 min2.89 min3.17 min0.863
PartyMimic, 2 GPUs (--pipeline)212.71.66 min3.41 min3.82 min0.883

Protocol. LAFAN-40: the 40 G1 LAFAN1 clips, both for training and evaluation, with the same files as XMimic (checked against its SHA-256 list). Every run trains 3,500 iterations with a checkpoint every 100. Each checkpoint plays every clip once from its first frame per replica (4 replicas), without randomization or noise. A clip fails when the training termination triggers. BlinkMimic and PartyMimic checkpoints are scored by BlinkMimic's eval_batch.py, XMimic's by its JAX evaluator, which XMimic reports agrees with it to +0.001. Training minutes exclude the first log interval's excess over the steady interval for every method, by XMimic's tools/exclude_compile.py rule. That is compilation and CUDA-graph capture for the PyTorch trainers, and the first-execution overhead left in XMimic's clock, since XMimic compiles before its clock starts. The with-start-up column adds back each method's start-up with warm compilation caches (seeds 1 and 2): 0.17 min for BlinkMimic, 0.26 / 0.28 min for XMimic (its ahead-of-time compilation), 0.41 min for PartyMimic. The very first run on a machine compiles from scratch and takes longer: 3.3 / 2.0 min more for XMimic 1 GPU / AL, 1.9 min for the PartyMimic pipeline. Hardware: two RTX 4090 (48 GB), i9-14900K. The two-GPU methods share the x1 link of the second GPU. XMimic AL runs its probe process on the learner GPU under CUDA MPS, as in its README.

The PartyMimic recipe and what matters most

PartyMimic trains with BPTT: the policy gradient is the derivative of an analytic tracking reward through 32 imagined steps of a learned world model, closed by the critic's value gradient ∇sV. The defaults of python -m partymimic.train are this recipe. Effects are the change when a factor is removed (G1, held-out Loc/Man error, ablations on the earlier 9,173-clip library).

FactorSettingEffect when removedWhy
Muon optimizer--pi_opt muon --wm_opt muon+10.7 mm (Dance +25) Orthogonalized updates keep the rare motions' nearly orthogonal gradients from being drowned by the majority.
Muon weight decay--muon_wd 0.1−2.4 mm five-set mean torch.optim.Muon's default decoupled decay; the only official SuperMimic choice that clearly helps PartyMimic.
Reward kernels--std_scale 0.60.35: +smoothness cost; 1.0: +5.5 mm Narrower than BeyondMimic's 1.0 so BPTT still has slope at cm-level errors; wider than 0.35 so the policy is less aggressive for deployment (see Sim2real).
Horizon 32--horizon 3216 steps: +5.9 mm Shorter chains lean on ∇sV, which is only loosely fit.
Reference-action skip--pi_ref_skip+5.6 mm The network refines the next reference pose instead of rebuilding it.
Policy EMA--pi_ema 0.995+3.4 mm Single updates are noisy at this batch size; the average removes the noise.
Evaluator's collision model--robot g1mjLAFAN falls 14/40 vs 3/40 The policy exploits whatever contacts the world model learned from the training simulator.
Value-gradient consistency--v_gcons 0.5+1.0 mm Fits ∇sV to the true return gradient already computed by the backward pass.
Diversity-balanced resets--div_k 24Ground +6–19 mm Resets spread over motion clusters instead of duration, so ground motions get 30% of them instead of 8%.
Self-imitation--sil 1+0.5 mm early Real better-than-V actions guide the policy while the world model and critic are still inaccurate.

Why SuperMimic works: full-factor ablation

Stage 1 of the study ablated SuperMimic itself, factor by factor, on our reimplementation (LAFAN-40, G1, 6,000 iterations per variant, one variant per factor). The score is the normalized evaluation return (mean of the last two evaluations, deterministic policy). The baseline over 3 seeds is 0.686 ± 0.048, and single-seed |z| < 1.5 counts as noise. Δ is the change from the baseline.

All variants
VariantWhat it testsScoreΔVerdict
Baseline (3 seeds)
base_s0 seed 0seed noise0.719+0.038
base_s1 seed 1seed noise0.658-0.023
base_s2 seed 2seed noise0.650-0.023
World model
k1 WM rollout loss window 8 → 1multi-step autoregressive vs one-step model loss0.656-0.017no clear effect
k16 WM rollout loss window 8 → 16longer autoregressive window0.619-0.054worse (trend)
wmworld invariant increments → raw world-frame state deltasnaive MBRL parameterization (no translation / yaw invariance)0.621-0.052worse (trend)
noerrfloor no error floor in the WM lossnear-constant components dominating a std-normalized loss0.666-0.006no clear effect
wm512 WM width 2048 → 512world-model capacity0.535-0.138worse
wmonly0 WM-only warm-up 500 → 0 iterationsneed for a model-only phase0.692+0.019no clear effect
wmb2 WM batches per iteration 10 → 2amount of world-model fitting0.520-0.153worse
wmb20 WM batches per iteration 10 → 20more world-model fitting0.721+0.048better (trend)
wm4l WM 3 → 4 layersmore world-model capacity0.696+0.024no clear effect
Policy optimization
nocritic no critic bootstraprole of the critic at H = 320.428-0.253worse
h8 horizon 32 → 8short horizon (bias from the critic)0.430-0.250worse
h64 horizon 32 → 64long horizon (gradient variance / explosion)0.661-0.012no clear effect
noclip no gradient clippingis clipping needed0.692+0.020no clear effect
noclipv no element-wise 0.1 clipdoes the element-wise clip act0.663-0.010no clear effect
beta999 Adam β2 0.95 → 0.999second-moment adaptation speed0.708+0.035no clear effect
out1 output-layer init 0.01 → 1 (3 seeds)small init (initial action ≈ default pose)0.713+0.040better (trend)
ln LayerNorm in the actordoes LN slow learning0.604-0.069worse (trend)
floor4 input-normalizer floor 1e-2 → 1e-4normalizer floor0.670-0.003no clear effect
survhard soft survival weight → hard terminationdifferentiable termination probability0.672-0.000no clear effect
survnone no survival weightrole of the termination signal0.648-0.025no clear effect
noimagnoise no sensor noise in imaginationnoise as regularizer / deployment consistency0.674+0.002no clear effect
nocerr critic without tracking-error inputscritic features0.677+0.004no clear effect
vclip critic output clipped to ±10community fix against value divergence0.703+0.031no clear effect
lr1e4 lr 2e-4 → 1e-4learning rate0.591-0.081worse
lr4e4 lr 2e-4 → 4e-4 (3 seeds)learning rate (community choice)0.726+0.054better (trend)
lr6e4 lr 2e-4 → 6e-4 (3 seeds)learning rate0.750+0.077better
ema policy EMA 0.995 (3 seeds)weight averaging (community)0.761+0.089better
lam0 critic target λ 0.95 → 0bias / variance of the critic target0.628-0.045worse (trend)
lam1 critic target λ 0.95 → 1bias / variance of the critic target0.701+0.028no clear effect
gamma097 discount γ 0.99 → 0.97effective horizon and value scale0.624-0.048worse (trend)
cep1 critic epochs 5 → 1critic fitting strength0.652-0.021no clear effect
h16 horizon 32 → 16horizon curve0.596-0.077worse
h48 horizon 32 → 48longer gradient chain0.702+0.029no clear effect
emalr6 EMA 0.995 + lr 6e-4EMA × higher learning rate0.825+0.153better
emalr8 EMA 0.995 + lr 8e-4EMA × higher learning rate0.816+0.143better
Data and curriculum
noise0 action noise 0.1 → 0identifiability of ∂f/∂a0.692+0.020no clear effect
noise03 action noise 0.1 → 0.3wider action coverage0.696+0.023no clear effect
clean50 half the worlds collect without noisecovariate shift (community)0.707+0.034no clear effect
uniform return-based reset sampling → uniformadaptive curriculum0.657-0.016no clear effect
noepcap no 500-step episode capepisode length0.643-0.029no clear effect
utd1 UTD 0.4 → 1.0less fresh data0.669-0.004no clear effect
utd02 UTD 0.4 → 0.2more fresh data0.660-0.013no clear effect
buf100 replay 1000 → 100 stepsfreshness vs diversity0.656-0.016no clear effect
Observation interface
paperobs no reference-anchor relative orientationpaper observation (strongest community factor)0.484-0.188worse
noselfcol self-collision off (3 seeds)contact complexity (falls 33/40 on the leaderboard evaluator)0.739+0.067better
vibed supermimic_vibed interface (3 seeds)pelvis anchor + reference goal + relative obs + no self-collision0.749+0.076better
Gradient paths and mechanism
gwin8 H = 32, gradient cut every 8 stepscritic share vs gradient-chain length0.525-0.147worse
onestep one-step model gradient onlymulti-step Jacobian propagation0.002-0.670worse
noobsgrad no gradient through the observation feedbackclosed-loop (corrective) gradient0.517-0.156worse
wmfreeze freeze the WM after 1000 iterationson-policy refitting / model exploitation0.004-0.668worse
noxi WM and critic without ξdeterministic model conditioned on known randomness0.695+0.023no clear effect
curstart imagine only from the 10 newest stepsdiversity of the Dyna start states0.640-0.032no clear effect
gwin1boot gradient cut every step, V at every steplong chain vs ∇V at the cut (SVG(1)-style)0.001-0.671worse
gwin8boot gradient cut every 8 steps, V at the cutssame, SHAC-style0.416-0.256worse
vstopgrad no state gradient through the terminal Vdoes the policy use ∇V0.543-0.130worse
wmfreeze4k freeze the WM after 4000 iterationsis refitting needed once the model is good0.507-0.166worse
Stage-2 additions
medclip per-sample action gradient ≤ 3 × medianheavy-tailed contact gradients (NablaMimic)0.613-0.060worse (trend)
piup2 2 policy updates per iterationupdates vs wall-clock0.723+0.050better (trend)
piup4 4 policy updates per iterationupdates vs wall-clock (2.2× slower per iteration)0.781+0.109better

Conclusions: what dominates and why

Official SuperMimic choices on PartyMimic (full library)

After the official code opened, we ported its design choices as switches and tested each one on PartyMimic's full library (mix_kf, 10,731 clips, 12,000 iterations, G1). Score: mean body-position error over Loco/Mani, Ground, Dance, Extreme and XM14 (mm, lower is better). Official SuperMimic itself cannot run here (it needs the private mjlab_research); the ported row turns every official choice on and PartyMimic's extras off.

Change on PartyMimicSeedsFive-set meanTimeVRAMVerdict
Prior defaults (std_scale 0.35, muon_wd 0)554.70.44 h22 GBbaseline
+ --muon_wd 0.1452.30.45 h22 GBbetter tracking
+ --muon_wd 0.1 --std_scale 0.6 (final)454.30.52 h22 GBsame tracking, better sim2real
+ policy LN-GELU353.00.51 h26 GBnoise / cost
+ soft-termination max253.20.44 h22 GBnoise
+ v_max clamp153.20.45 h22 GBnoise
+ WM 10 batches / iter152.90.52 h22 GBnoise
+ goal stride 5253.90.44 h22 GBnoise
+ official ReturnSampler (keep fail/div shares)154.00.44 h22 GBnoise
+ ReturnSampler alone (drop fail/div)160.10.45 h22 GBworse
+ reward kernel 1.0259.80.58 h22 GBworse tracking
+ action-rate penalty −0.25456.90.47 h22 GBsmoother, worse tracking
Official SuperMimic (ported, fp32)268.61.60 h32 GBfar worse

Only Muon weight decay clearly improves PartyMimic. Widening the reward kernel to 0.6 keeps the five-set mean within noise of the prior defaults and is the change that improves foot-slip and action smoothness under deployment-like perturbations (next section). Everything else from the official release is noise or worse on this library; dropping PartyMimic's failure / diversity reset shares hurts a lot.

Sim2real-oriented evaluation

G1 actuators, action scale and default pose match the public mjlab BeyondMimic model used by official SuperMimic; the gap people report on hardware is not from those. We score completion, body error, joint-target rate / jerk, torque saturation and foot slip under perturbations the training never saw (delay, PD scale, mass, push, low friction, soft foot contact). Same clips for every method.

MethodSeedsNominal % / mmTrain DR jerk Combo slip cm/sSoft-foot slip cm/s
Prior defaults298.2 / 18.1705.728.10
+ Muon wd 0.1298.3 / 17.9685.668.22
Final (muon_wd 0.1, std_scale 0.6)498.2 / 20.8585.147.05
+ kernel 1.0298.3 / 24.9524.816.49
+ action-rate −0.25498.0 / 18.7465.297.36
Official SuperMimic (ported)297.7 / 33.8515.406.73

Completion stays ≥96% under delay 20 ms, PD×0.75, push and friction 0.25 for every method. Switching the solver to the official 10 iterations changes nothing; soft-foot contact is where the prior recipe slips more than the ported official policy. The final recipe closes most of that gap while keeping tracking far ahead of the port (20.8 vs 33.8 mm nominal). Shipped checkpoints were trained with std_scale 0.35; retrain with the new defaults for the numbers above.

Use it

Instructions for data, training, export and evaluation are in the README.