Open-source project
xbpeng/MimicKit avatar
xbpeng/MimicKit

MimicKit: seven motion imitation methods behind one YAML-driven training loop

A lightweight suite of motion imitation methods for training controllers.

2,369 stars294 forksPythonApache-2.0

At a glance

What is it?
A deliberately small research codebase for training motion controllers, where swapping the imitation algorithm, the simulator, and the agent is a config change rather than a code change.
Who is it for?
MimicKit is built for the specific situation where you want to reproduce a motion imitation result, change one part of it, and read exactly what changed. The seven methods share a single entry point, so the diff between a DeepMimic run and an AMP run is a config file rather than a branch.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 106 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 7, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the project is actually selling

MimicKit describes itself as a suite of motion imitation methods for training motion controllers, and the README is explicit that the design goal is to be clean and lightweight with minimal dependencies. That framing matters because motion imitation research code usually arrives as a researcher's single-purpose repo with one algorithm baked in and a hardcoded environment. This one deliberately does the opposite.

What it ships is seven methods, each documented separately: DeepMimic, AMP for adversarial motion priors, AWR for advantage-weighted regression, ASE for adversarial skill embeddings, LCP for Lipschitz-constrained policies, ADD for an adversarial differential discriminator, and SMP for score-matching motion priors. Every one of them has its own markdown file under `docs/` with instructions, which is the shape you want when you are trying to understand what separates the algorithms rather than just how to launch one.

The project points at arXiv 2510.13794 for a detailed overview and recommends ProtoMotions from NVlabs if you want something more feature-rich and modular. That comparison is the honest framing of the trade: MimicKit is the smaller, more readable option, and it is explicit about being that rather than competing on breadth.

One entry point, three config files

Training is a single script invocation with the algorithm selected entirely through configuration:

bash
python mimickit/run.py --mode train --num_envs 4096 --engine_config data/engines/isaac_gym_engine.yaml --env_config data/envs/deepmimic_humanoid_env.yaml --agent_config data/agents/deepmimic_humanoid_ppo_agent.yaml --visualize true --out_dir output/

Read that command as four independent decisions. The engine config picks the simulator backend, the environment config describes the task and its reference motion, the agent config describes the learning algorithm and its hyperparameters, and the remaining flags control the run. Swapping an algorithm means pointing at a different agent config, which is why the tree carries an `args/` directory with prepared argument files for all of them.

The README documents each flag in prose rather than only in a table, and two of those explanations save real time. `--num_envs` sets how many parallel environments the simulation runs, and the README is clear that not every environment supports them, so DeepMind Control Suite style environments should use 1. `--visualize` turns rendering on, and the README notes rendering should be off for faster training, which is a reminder that the default-looking invocation above is the slow one.

`--logger` accepts `txt`, `tb`, or `wandb`, and `--video` toggles headless recording that the logger then captures. Everything can be moved out of the command line into an argument file:

bash
python mimickit/run.py --arg_file args/deepmimic_humanoid_ppo_args.txt --visualize true

Simulator engines treated as a pluggable dependency

The engine abstraction is the part of the design that most affects whether you can use this at all. MimicKit calls its simulator backends engines and supports Isaac Gym, Isaac Lab, and Newton, each selected by pointing `--engine_config` at a YAML file under `data/engines/`.

The pinning is specific enough to be useful. For Isaac Lab, the README states the framework has been tested with commit `2ed331acfcbb1b96c47b190564476511836c3754`. For Newton, it states the framework has been tested with `v1.0.0`. Isaac Gym has no pinned commit given, only a link to NVIDIA's download page. That difference in specificity is itself informative: the newer backends were verified against a specific point in their history, so if you install a current Isaac Lab and hit unexpected behaviour, checking out that commit is the first thing to try.

Installation is a four-step sequence: install the simulator of your choice, install the Python requirements, then download assets and motion data. The requirements file is short and conventional, with `torch>=1.9.1`, `gymnasium`, `numpy`, `pyyaml`, `matplotlib`, `tensorboardX`, `wandb>=0.17.4`, `moviepy`, `diffusers>=0.36.0`, and `pyglet`.

bash
pip install -r requirements.txt

The third step is the one to plan around. Assets and motion data are downloaded from a SharePoint folder and extracted into `data/`, which means a reproduction attempt depends on that link still resolving and is not versioned with the code. The README recommends using a package manager such as Conda to create a separate environment per simulator, which is good advice given how differently these backends pin their own dependencies.

How motion data is stored and referenced

Reference motions live in `data/motions/` as `.pkl` files, each parsed by a `Motion` class defined in `mimickit/anim/motion.py`. The `motion_file` field in an environment config points at one, and it can also point at a dataset file in `data/datasets/` instead, which is how you train against many clips rather than one.

The per-frame representation is worth knowing because it explains the shape of the data. Each frame specifies a root position in 3D, a root rotation in 3D, and the joint rotations, with the 3D rotations expressed as exponential maps. Joint rotations are recorded in the order the joints appear in the `.xml` file, which the README specifies is a depth-first traversal of the kinematic tree. So the data is tied to a specific character definition, and reusing a motion against a different skeleton requires remapping rather than just loading.

There is a viewer for this, which is the fastest way to check a dataset is what you think it is:

bash
python mimickit/run.py --mode test --arg_file args/view_motion_humanoid_args.txt --visualize true

The README also documents the visualizer keyboard controls, which are the kind of detail that indicates someone actually spent time in the tool. Holding Alt and dragging with the left mouse button pans the camera, the mouse wheel zooms, `Enter` pauses and unpauses the simulation, and `Space` steps the simulator one frame at a time.

Testing, distributed training, and reading the logs

Evaluation reuses the same script with a different mode and a model file:

bash
python mimickit/run.py --arg_file args/deepmimic_humanoid_ppo_args.txt --num_envs 4 --visualize true --mode test --model_file data/models/deepmimic_humanoid_spinkick_model.pt

Pretrained `.pt` files are provided in `data/models/`, and matching training logs sit in `data/logs/`. Having the logs shipped alongside the weights is a small courtesy that makes it possible to see the training curve for a model you did not train yourself.

Multi-device training is a single extra flag, and the values follow PyTorch's device syntax:

bash
python mimickit/run.py --arg_file args/deepmimic_humanoid_ppo_args.txt --devices cuda:0 cuda:1

Passing several devices parallelizes training across processes, and CPU is accepted as a device name too, which is useful for confirming a configuration runs before spending GPU hours on it.

For the TensorBoard logger, the events file lands in the same output directory as the text log:

bash
tensorboard --logdir=output/ --port=6006 --samples_per_plugin scalars=999999

The `--samples_per_plugin` argument with a very large scalar budget is a deliberate choice, since the default keeps too few points for a long reinforcement learning run and the resulting graph hides the shape of the curve. A `plot_log.py` script under `tools/plot_log/` covers the plain `txt` logger instead.

What the repository signals about its state

A few facts about the project itself are worth separating from the research. The repository is Apache-2.0 licensed, has 2,351 stars against 293 forks, and lists 26 open issues. The fork ratio is high in relative terms, which for a research codebase usually means people are forking to run their own experiments rather than to contribute patches back.

There is a single release, tagged `v0`, named "initial release" and published on 2026-01-11, with an empty release body. Against that, the last push was on 2026-06-23 and the repository is not archived, so commits are landing on the default branch without corresponding release tags. The practical consequence is that there is no versioned artifact to install: you clone, you set up a simulator environment, and you run from the checkout. There is no packaging metadata and no PyPI entry mentioned, which is normal for this kind of research code.

The topic tags reinforce the audience: animation, motion-imitation, reinforcement-learning, and robotics. So does the citation file at the repository root, `CITATION.cff`, which is the right signal to check if you intend to build on this work, since it names the paper the code accompanies.

Editorial conclusion

MimicKit is built for the specific situation where you want to reproduce a motion imitation result, change one part of it, and read exactly what changed. The seven methods share a single entry point, so the diff between a DeepMimic run and an AMP run is a config file rather than a branch. Two things the repository does not settle are worth knowing before you commit time: the motion and asset data live on a SharePoint link rather than in the tree, and the two simulator backends are pinned to specific upstream commits, so a current Isaac Lab may not be what the code was checked against. Start by running one of the pretrained models in `data/models/` through test mode before training anything.

Frequently asked questions

What is the difference between imitation learning and reinforcement learning?

Imitation learning fits a controller to recorded motion directly, while reinforcement learning optimizes a reward. MimicKit spans both, which is why AWR sits alongside the adversarial methods: it derives its targets from a learned critic rather than from a hand written reward function. The README describes each algorithm separately rather than taking a position on the split.

Is behavioral cloning the same as imitation learning?

Behavioral cloning is one approach inside imitation learning, not the whole of it. MimicKit's DeepMimic method is the closest thing here to a pure imitation setup, while AMP, ASE, ADD and SMP all add an adversarial discriminator on top of the reference motion to close some of the gap to how the data was actually collected.

Which simulators can MimicKit run on?

Three engines are supported: Isaac Gym, Isaac Lab, and Newton. You pick one with an `--engine_config` file under `data/engines/`. The README notes the framework has been tested with Isaac Lab commit `2ed331acfcbb1b96c47b190564476511836c3754` and with Newton `v1.0.0`, so pin those versions if a newer one misbehaves.

Do I need my own motion capture data to use MimicKit?

Not to start. Pretrained models are provided in `data/models/` with matching training logs in `data/logs/`, and motion clips plus assets are downloaded separately and extracted into `data/`. Clips are stored as `.pkl` files with root position, root rotation, and joint rotations per frame, in the joint order of the character's `.xml` file.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. Releases
  5. xbpeng/MimicKit on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/xbpeng-mimickit.svg)](https://hysenlabs.com/projects/xbpeng-mimickit)