body-models
body-models provides a shared interface for parametric human body, head, hand, and measurement models across PyTorch, NumPy, and JAX.
Install
# Install the core package with the NumPy backend.
uv add body-models
Install optional differentiable backends when needed:
# Add PyTorch or JAX support only when your project needs it.
uv add "body-models[torch]"
uv add "body-models[jax]"
Supported Models
Full Bodies
| Model |
Scope |
Setup |
| SMPL |
body |
registration required |
| SMPL-H |
body and hands |
registration required |
| SMPL-X |
body, hands, face |
registration required |
| ANNY |
phenotype-driven body |
auto-download |
| MHR |
expressive full body |
auto-download |
| SOMA |
skinned body from SOMA-X assets |
auto-download |
| GarmentMeasurements |
PCA body for garment measurements |
auto-download |
Anatomicals
| Model |
Scope |
Setup |
| SKEL |
body with anatomical skeleton |
registration required |
| MyoFullBody |
MuJoCo-derived musculoskeletal full body |
auto-download |
Heads
| Model |
Scope |
Setup |
| FLAME |
head and face |
registration required |
Hands
| Model |
Scope |
Setup |
| MANO |
hand |
registration required |
Robots
| Model |
Scope |
Setup |
| BrainCo |
BrainCo Revo 2 robotic hand |
auto-download |
| G1 |
Unitree G1 rigid links |
auto-download |
Common Usage
Each model exposes backend modules under body_models.<model>.torch, body_models.<model>.numpy, and body_models.<model>.jax when that backend is supported. The model pages use the NumPy backend for API generation because it has the same public model interface without optional backend dependencies.
from body_models.smpl.torch import SMPL
# Load the neutral SMPL model from the configured model path.
model = SMPL(gender="neutral")
# Start from a batched rest pose.
params = model.get_rest_pose(batch_dims=(1,))
# Evaluate the mesh vertices and skeleton transforms with the same parameters.
vertices = model.forward_vertices(**params)
skeleton = model.forward_skeleton(**params)
Skinned models share faces, num_vertices, num_joints, joint_names, skin_weights, rest_vertices, forward_vertices, forward_skeleton, and get_rest_pose. Rigid articulated models expose link metadata and forward_links instead of skinning weights.