SMPL-X Mannequin
mannequin-x provides two lightweight figures driven by SMPL-X body and hand
rotations:
armoris the repo's segmented rigid mannequin, available in three LODs.woodenis a skinned wooden mannequin at its source resolution.
Both designs accept the same Pose. Ten SMPL-X shape coefficients resize their
bones and geometry. The NumPy runtime includes the required shape calibration,
so it does not need SMPL-X model files.
pip install mannequin-x
Python API
import numpy as np
from mannequin import Mannequin
shape = np.zeros(10, dtype=np.float32)
shape[0] = 1.5
model = Mannequin("wooden", shape=shape)
pose = model.rest_pose()
pose.body[17, 2] = 0.8
vertices = model.vertices(pose)
faces = model.faces
joint_transforms = model.joint_transforms(pose)
Create armor with Mannequin("armor", lod=0). Armor supports LODs 0, 1, and
2. The wooden model has one resolution, so it does not accept lod.
rest_pose() returns a mutable Pose with five arrays:
body:[..., 21, 3]SMPL-X body rotationshands:[..., 30, 3]left and right hand rotationsroot_rotation:[..., 3]world rotationpelvis_rotation:[..., 3]pelvis rotation about the pelvis jointtranslation:[..., 3]world translation
root_rotation rotates the whole figure around the SMPL-X origin.
pelvis_rotation rotates the body around the pelvis without moving the pelvis.
Rotations use axis-angle vectors. Leading batch dimensions are supported.
Jaw, eye, and expression parameters are absent because neither mannequin has
matching geometry or joints.
Shape is identity state, not motion state. Set it at construction or call
model.reshape(shape). Pose evaluation then stays concise:
model.reshape(new_shape)
vertices = model.vertices(pose)
links = model.link_transforms(pose)
Viser
Install the optional viewer dependency with pip install mannequin-x[viser].
import viser
from mannequin import Mannequin, add_to_scene
server = viser.ViserServer()
model = Mannequin("wooden")
handle = add_to_scene(server.scene, "/mannequin", model)
handle.set_pose(model.rest_pose())
handle.set_position((1.0, 0.0, 0.0))
handle.set_shape(new_shape)
handle.set_palette("sage")
Pass one of sand, ivory, charcoal, sage, clay, slate, or wood to
add_to_scene(..., palette=...) or handle.set_palette(...).
Wooden meshes use Viser's native add_mesh_skinned(), so pose updates send
bone transforms instead of vertex buffers.
Run the live comparison against a local neutral SMPL-X model:
uv run python examples/compare.py /path/to/SMPLX_NEUTRAL.npz
The viewer shows armor, wooden, and full SMPL-X figures with matched motion, random hand poses, shape controls, front and side views, a T-pose button, and a shared palette. The SMPL-X file remains external to the package.
three.js
authoring/export_glb.py exports rigid armor as a nested GLB joint hierarchy.
The root extras contain the SMPL-X body and hand parameter mapping. See
examples/threejs.html.
Assets
The editable armor source is authoring/mannequin.blend.
src/mannequin/assets/wooden.npz retains its source vertices and skin weights,
converts coordinates, triangulates faces, and maps 52 source bones onto this
package's joint hierarchy. Rebuild it with authoring/import_wooden.py.
authoring/bake_calibration.py uses the NumPy SMPL-X implementation from
body-models to bake the joint, ground-plane, head, and height response for the
first ten shape coefficients. Pass it a local SMPLX_NEUTRAL.npz; the runtime
does not depend on body-models or the SMPL-X file. The wooden torso keeps its
source proportions.
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 mannequin_x-0.1.2.tar.gz.
File metadata
- Download URL: mannequin_x-0.1.2.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","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 |
a36bc5cc3c6c1d8346485ca1f4f4aaf6e064a8439f40be8078b57290c035736d
|
|
| MD5 |
7fba84684f848b92d1ffee943a494091
|
|
| BLAKE2b-256 |
1244175c9eb33175957ca5841b40ee9aa6d9a56e03b2e78b2d09066a12ab8174
|
File details
Details for the file mannequin_x-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mannequin_x-0.1.2-py3-none-any.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","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 |
05773609a4f6c82472b1d6a22e1eb1edc1709bb635d943b5d1487d9d6d9e7991
|
|
| MD5 |
6dac2fdee156b6b93717313cc2ac3d9e
|
|
| BLAKE2b-256 |
7a0a245cf760c2b982a72fad72edbc98e0313e7b5eb15defa0fee8dc6436452e
|