Skip to main content

Multi-backend parametric body models (SMPL, SMPLH, SMPLX, FLAME, SKEL, ANNY, MHR, SOMA, GarmentMeasurements, BrainCo, G1) for NumPy, PyTorch, and JAX

Project description

Body model lineup

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() and forward_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

body_models-0.13.4.tar.gz (167.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

body_models-0.13.4-py3-none-any.whl (297.6 kB view details)

Uploaded Python 3

File details

Details for the file body_models-0.13.4.tar.gz.

File metadata

  • Download URL: body_models-0.13.4.tar.gz
  • Upload date:
  • Size: 167.0 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

Hashes for body_models-0.13.4.tar.gz
Algorithm Hash digest
SHA256 5a1d86cf36c47bb74e27496c8b20bfc3e83103ae51193f30cab7aac315ad6ee0
MD5 e841a3383289c57054003297eeefc675
BLAKE2b-256 5665a2630ad0451b1982bb383e210202f6cf8c2a90a6144740ab339f9424008a

See more details on using hashes here.

File details

Details for the file body_models-0.13.4-py3-none-any.whl.

File metadata

  • Download URL: body_models-0.13.4-py3-none-any.whl
  • Upload date:
  • Size: 297.6 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

Hashes for body_models-0.13.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c8bbdeaa06d6fe9cc8fd58ef0c7e037e9e643bc37dd75b5c8a1730b78c0f63bd
MD5 b7b8842f89a0c0cb3f9820b18d02ba71
BLAKE2b-256 81da32b9938a2602d0d0919ca0c2e4ffe4781be361cc0d34132f41622ad62c19

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page