Official implementation of the method described in the following paper, including training and evaluation scripts:
Raël et al., "Adaptive Interpolation-Synthesis for Motion In-Betweening on Keyframe-Based Animation", SIGGRAPH 2026 Conference Papers (2026)
This repo uses uv as the package manager. See the uv documentation for installation instructions.
Once installed, run:
uv sync --frozen --all-groupsCreate a .env file at the repo root:
# Dataset & experiment directories
export MIB_POCOYO_DATASET_DIR=data/dataset
export MIB_POCOYO_EXPERIMENT_DIR=data/exp
# Optional: MLflow tracking server
export MLFLOW_TRACKING_URI=https://your-mlflow-server-uriIf the dataset directory is missing, it will be automatically downloaded from AnimajSAS/mib_rig_controllers_values on HuggingFace.
uv run python -m motion_inbetweening.scripts.train pocoyo --training-type bestTrained in ~2 hours on a RTX 4070.
uv run python -m motion_inbetweening.scripts.test path/to/checkpoint
# e.g. uv run python -m motion_inbetweening.scripts.test data/exp/<exp_name>/checkpoints/safetensorspath/to/checkpoint should point to the safetensors directory, generated at the end of training.
We provide a pretrained model on HuggingFace at AnimajSAS/AIS_BI_LSTM_v0:
uv run python -m motion_inbetweening.scripts.test AnimajSAS/AIS_BI_LSTM_v0By default, all three test sets are evaluated. Use --test-set to run a specific one:
uv run python -m motion_inbetweening.scripts.test path/to/checkpoint --test-set held_out_algorithmicValid values for --test-set:
held_out_algorithmic— in-house dataset with algorithmic block scheduleheld_out_random— in-house dataset with random maskingproduction— production test setall(default) — runs all three test sets
Run linting and formatting checks before committing:
uv run pre-commit runThis project is licensed under the Apache 2.0 License.