The whole thing is one equation.
Trained headless on a shared H100 with our Isaac Lab on H100 guide · the K1 USD is on Hugging Face.
Watch it follow.
Human motion capture on the left, the K1 policy on the right, on motions it never saw during training.
How it compares.
Success on motions the policy never trained on, scored with SONIC's own rule, next to the numbers in the SONIC paper. Higher is better.
| Benchmark | SONIC-K1 ours · Booster K1 | SONIC* NVIDIA · G1 | BeyondMimic* G1 | Any2Track* G1 |
|---|---|---|---|---|
| PHUMAexternal benchmark, 15 motion sources | 93.6% | 97.2% | 73.8% | 78.5% |
| Held-out mocapmotions unseen in training (ours: 1,985 Bones-SEED clips; SONIC: in-house test set) | 97.4% | 98.5% | 82.0% | 61.6% |
100STYLE: 100 ways to walk and run
Zombie, penguin, dinosaur, drunk, superman, proud: 100 walking and running styles from a public dataset it never trained on.
All numbers use the SONIC paper's success rule (a rollout fails if the root or a hand/foot height drifts more than 0.25 m from the reference), in MuJoCo. *Reported in the SONIC paper (Luo et al., 2025); we did not rerun these methods. They run on the 1.3 m Unitree G1 with their own data and retargeting, so this is an indicative comparison, not a controlled one.
Stays on its feet.
We made things go wrong on purpose and counted how many unseen motions it still finished without falling.
MuJoCo, 200 unseen motions per row (the last row uses all 1,985). Hover a bar for details.
Run it on your laptop.
No GPU and no Isaac. Four lines, then a MuJoCo window with the K1 following a sample motion, or an mp4 you can share.
GIT_LFS_SKIP_SMUDGE=1 git clone --depth 1 --filter=blob:none --sparse https://github.com/Kyk0/sonic-k1 && cd sonic-k1 git sparse-checkout set gear_sonic/scripts examples/k1 gear_sonic/data/assets/robot_description pip install mujoco onnxruntime numpy "imageio[ffmpeg]" huggingface_hub hf download Kyry10/sonic-k1 onnx/policy_g1.onnx k1_plant.json --local-dir checkpoints/sonic-k1 python gear_sonic/scripts/play_k1.py # live viewer (macOS: mjpython) python gear_sonic/scripts/play_k1.py --record demo.mp4
Your own clip: retarget it to the K1 with UMR and pass --motion my_clip.npz. Share it with #SONICK1.
Next for SONIC-K1.
- Real K1 runsThe policy on a physical Booster K1, with videos.
- Whole-body teleopDrive the K1 live from a VR headset.
- Deployment controllerAn open runtime for the Booster SDK.
- Video to K1Film a move with your phone and the K1 does it.
- Bigger modelTrained on 62K motions, 6× more.
Open weights. Open code.
PyTorch and ONNX policies, configs, the MuJoCo player and the full K1 port of SONIC.
@misc{kolesnichenko2026sonick1,
title = {SONIC-K1: Whole-Body Motion Tracking for the Booster K1 Humanoid},
author = {Kolesnichenko, Kyrylo},
year = {2026},
howpublished = {\url{https://github.com/Kyk0/sonic-k1}}
}