Anny is a differentiable human body mesh model written in PyTorch. Anny models a large variety of human body shapes, from infants to elders, using a common topology and parameter space.
- Anny is based on the tremendous work of the MakeHuman community, which offers plenty of opportunities for extensions.
- We provide both full body and part-specific models for hands and faces.
- Anny is open-source and free.
- 2026-08-06: v0.6: New "anny" rig, facial actions, improved SOMA compatibility, API refactoring, and better torch.compile support. See CHANGELOG.md for more details.
- 2026-06-03: v0.5: code refactoring (one can now use
anny.Annysyntax). Support for "soma" rig and topology. SMPLX wrapper with "anny" topology support. - 2026-02-04: v0.3: "smplx" topology available for interoperability with SMPL-X (non-commercial use only). Nipple blend shapes excluded from default settings (use
local_changes="all"for backward compatibility). - 2025-11-21: v0.2: support for different mesh topologies.
- 2025-11-05: v0.1: initial release.
pip install anny[smpl,examples] # Full install (non-free dependencies).
pip install anny[examples] # Free install.
pip install anny # Minimal install.
# Note that the free install may download non-commercial only assets when needed.
pip install anny[examples]@git+https://github.com/naver/anny.git # latest sources.import torch, anny, trimesh
model = anny.Anny(local_changes="default", facial_actions="all").to(dtype=torch.float32)
# The model accept both dictionnary and stacked tensor inputs.
# Skeletal rig pose parameters (see model.bone_labels).
pose_parameters = torch.eye(4)[None, None].repeat(1, model.bone_count, 1, 1)
# High-level shape parameters (within [0,1], see model.phenotype_labels):
phenotype_kwargs = {key : 0.5 for key in model.phenotype_labels}
# Local shape changes (within [-1,1], see model.local_change_labels):
local_changes = {'stomach-pregnant-incr': 1.}
# Facial expression changes (within [0,1], see model.facial_action_labels):
facial_actions = {"jawOpen": 0.8, "mouthSmileLeft": 0.4}
# Export default mesh output
output = model(
pose_parameters=pose_parameters,
phenotype_kwargs=phenotype_kwargs,
local_changes_kwargs=local_changes,
facial_actions=facial_actions
)
trimesh.Trimesh(vertices = output["vertices"].squeeze(dim=0).numpy(), faces=model.faces).export("anny_output.ply")To get started with Anny, you can have a look at the different tutorials in the tutorials directory:
- Shape parameterization
- Pose parameterization
- Portability of pose parameterizations
- Texture coordinates
- Alternative models
We provide a simple Gradio demo enabling to interact with the model easily:
python -m anny.examples.interactive_demoBy default, anny.Anny() uses the compact anny rig with 104 bones. This is the recommended default for most full-body use cases: it keeps the main body, hand, and head articulation while removing facial expression, eye, tongue, and other zero-weight/pruned bones that are present in the full MakeHuman rig. For comparison, Anny(rig="makehuman") exposes the full 163-bone MakeHuman rig with the old blender/root-identity orientation. Choose rig="anny" for a smaller, stable default skeleton; choose rig="makehuman" if you need exact compatibility with old models or direct access to the removed face/tongue/eye bones. Facial action blendshapes remain available separately with facial_actions="all".
By default, anny.Anny() uses the anny topology: a MakeHuman-derived full-body mesh with Anny's minor nudity-related mesh edits, unattached vertices removed, and triangular faces. This is the recommended topology for new full-body models because every output vertex is referenced by the mesh connectivity and the triangulated faces work directly with downstream tools such as anthropometry and most mesh processing libraries. Use topology="anny-quads" if you need the original quad faces, topology="anny-full" if you need to keep unattached vertices and disable the nudity-related mesh edits, or topology="makehuman" for the unedited quad MakeHuman body mesh convention. Alternative retopologies such as smplx, smpl, and soma are available when interoperability with those ecosystems is more important than using Anny's native mesh.
anny.Anny() defaults to the new Anny model (rig="anny", topology="anny", pose_parameterization="local-ref"), while the deprecated anny.create_fullbody_model(...) factory preserves the legacy full-body defaults. If you just want the new defaults, call anny.Anny() directly. If you need the exact legacy behavior, either keep using create_fullbody_model(...) while migrating, or translate its arguments to Anny(...) as follows:
Legacy create_fullbody_model(...) argument |
Equivalent anny.Anny(...) argument |
|---|---|
rig="default" (full 163-bone MakeHuman rig) |
rig="makehuman" |
topology="default" (with the default triangulate_faces=False) |
topology="anny-quads" |
topology="default", triangulate_faces=True |
topology="anny" |
remove_unattached_vertices=False |
append -full to the topology string (e.g. topology="anny-quads-full") |
pose_parameterization (default "local-bone") |
pose_parameterization="local-bone", passed explicitly (Anny() defaults to "local-ref") |
all_phenotypes=True |
phenotypes="all" |
bone_orientation=... |
folded into the rig string via modifiers such as -blender or -rootidentity |
"local-bone" default will not produce the same pose under the new "local-ref" default. Either pass pose_parameterization="local-bone" explicitly for compatibility, or convert existing pose data with anny.utils.pose.transfer_pose_parameters (see the pose portability tutorial).
See CHANGELOG.md for the full list of changes.
Anny parses MakeHuman assets and caches pre-computed blend shape data to avoid recomputation on subsequent runs.
The first instantiation of a model can take a few minutes.
By default the cache is stored in ~/.cache/anny/. To use a different location, set the ANNY_CACHE_DIR environment variable:
export ANNY_CACHE_DIR=/path/to/cacheThe code of Anny, Copyright (c) 2025 NAVER Corp., is licensed under the Apache License, Version 2.0 (see LICENSE).
data/mpfb2: Anny relies on MakeHuman assets adapted from MPFB2 that are licensed under the CC0 1.0 Universal License.
data/faceunits01: Facial actions of Anny rely on Face Units asset pack by Mika Suominen, licensed under the CC0 1.0 Universal License.
data/soma: Anny provide a "soma" topology adapted from SOMA-X which is licenced under the Apache 2.0 license.
smplx: A "smplx" topology can be downloaded for non-commercial use only, allowing interoperability with SMPL-X. See LICENSE.txt and NOTICE.txt files in http://download.europe.naverlabs.com/humans/Anny/noncommercial.zip for more information.
@misc{br\’egier2025humanmeshmodelinganny,
title={Human Mesh Modeling for Anny Body},
author={Romain Br\’egier and Gu\’enol\’e Fiche and Laura Bravo-S\’anchez and Thomas Lucas and Matthieu Armando and Philippe Weinzaepfel and Gr\’egory Rogez and Fabien Baradel},
year={2025},
eprint={2511.03589},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2511.03589},
}