Skip to main content

Anny Body

Anny

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.

ArXiv Demo Blogpost

Features

  • 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.

News

  • 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.Anny syntax). 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.

Installation

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.

Quickstart example

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")

Tutorials

To get started with Anny, you can have a look at the different tutorials in the tutorials directory:

Interactive demo

We provide a simple Gradio demo enabling to interact with the model easily:

python -m anny.examples.interactive_demo
Interactive demo

Technical details

Default anny rig

By 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".

Default anny topology

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.

Migration from legacy defaults

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

⚠️ Pose parameters are not interchangeable across pose parameterizations: pose data saved with the legacy "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.

Caching

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/cache

License

The 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.

Citation

@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}, 
}

Release files for anny 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for anny 0.6.0
File Size Uploaded
anny-0.6.0.tar.gz 47.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for anny 0.6.0
File Interpreter ABI Platform
anny-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 95.3 MB

Release files / anny-0.6.0.tar.gz

Download URL anny-0.6.0.tar.gz
Size 47.6 MB
Tags Source
SHA-256 checksum
How to use checksums
4b0a01a789d448ff2d6d6da56d866600d2274b93e6fd7a40599cc56c19a476d7
BLAKE2b-256 checksum
How to use checksums
97dc0b1ce98945e7c872c0f16cbf36a23ab35454c4b43ca4da8565c2e4ee827c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / anny-0.6.0-py3-none-any.whl

Download URL anny-0.6.0-py3-none-any.whl
Size 47.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
050a0b24a3e7fdb89b46dc3581947ea84225305425ac9a1a97b65ea997fb2ad6
BLAKE2b-256 checksum
How to use checksums
67a559594be242b7239d725ce982bacbe5fa6a7e37075cc62488396234f2c4f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5

2 release files

0.3.1

2 release files

0.3.0

1 release file

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page