Skip to content

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.