Multi-backend parametric body models (SMPL, SMPLH, SMPLX, FLAME, SKEL, ANNY, MHR, SOMA, GarmentMeasurements, BrainCo, G1) for NumPy, PyTorch, and JAX
Project description
body-models
body-models provides a shared interface for parametric human body, head, hand,
anatomical, measurement, and robot models across NumPy, PyTorch, and JAX.
Documentation: https://abcamiletto.github.io/body-models/
Features
- Shared API across human, anatomical, hand, head, measurement, and robot models
- NumPy, PyTorch, and JAX backends
- Separate mesh and skeleton forwards with
forward_vertices()andforward_skeleton() - Prepared identities for repeated poses with fixed shape/expression parameters
- Skinned-mesh and rigid-body helpers for
viser - Mesh simplification and vertex-subset forwards for supported mesh models
- Multiple rotation representations for supported pose models
Install
uv add body-models
Install optional extras when needed:
uv add "body-models[torch]"
uv add "body-models[jax]"
uv add "body-models[viser]"
Quick Start
from body_models.smpl.torch import SMPL
model = SMPL(gender="neutral")
params = model.get_rest_pose(batch_dims=(1,))
vertices = model.forward_vertices(**params)
skeleton = model.forward_skeleton(**params)
When shape-dependent identity parameters stay fixed across many poses, prepare
them once and pass the returned dictionary back through identity. This avoids
recomputing rest joints, local offsets, and rest vertices on every forward pass.
shape = params.pop("shape")
identity = model.prepare_identity(shape)
vertices = model.forward_vertices(**params, identity=identity)
skeleton = model.forward_skeleton(**params, identity=identity)
For models with expression-dependent rest state, such as SMPL-X and FLAME, pass
both identity controls to prepare_identity(shape, expression). Skeleton-only
work can use skip_vertices=True to avoid preparing rest vertices.
Supported Models
- Full bodies: SMPL, SMPL-H, SMPL-X, ANNY, MHR, SOMA, GarmentMeasurements
- Anatomicals: SKEL, MyoFullBody
- Heads: FLAME
- Hands: MANO
- Robots: BrainCo, G1
See the model docs for setup, supported backends, inputs, and model-specific behavior.
Extras
Optional integrations live under body_models.extras, including the
viser plugin.
import viser
from body_models.extras import viser_plugin as vp
from body_models.smpl.numpy import SMPL
server = viser.ViserServer()
model = SMPL(gender="neutral")
handle = vp.add_body_model(server.scene, "/body", model)
handle.set_pose(**model.get_rest_pose())
Development
uv run ruff format .
uv run ruff check .
uv run ty check
License
See the documentation and upstream model projects for model-specific license terms.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file body_models-0.13.2.tar.gz.
File metadata
- Download URL: body_models-0.13.2.tar.gz
- Upload date:
- Size: 166.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85b5eb5aef739f22fa53aecdfddadebc5eaa106719723df9ba8ee74a7eef4dcd
|
|
| MD5 |
c8f4df501a42cf960c29a732735e654c
|
|
| BLAKE2b-256 |
045c295e0d719046bff170eae9545a42997fb463c4ef7ac8b1c0cf261497aa1c
|
File details
Details for the file body_models-0.13.2-py3-none-any.whl.
File metadata
- Download URL: body_models-0.13.2-py3-none-any.whl
- Upload date:
- Size: 297.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a723a8d47ab7a7eb88aed6dcc73102dbc0c185bda658477ced8230d40b18be63
|
|
| MD5 |
267396d389b4fb0ea3af280a50367625
|
|
| BLAKE2b-256 |
34297dbb2b5b7a2fdf91aa35ba072153983de75b8b6169881e04833dd8cea491
|