No project description provided
Project description
eden-soma-retargeter
Note: This is an unofficial fork of NVIDIA/soma-retargeter. It is not affiliated with or endorsed by NVIDIA.
Convert SOMA human motion captures into humanoid robot joint animation. Takes BVH motion files as input and produces robot-playable CSV joint data as output using GPU-optimized inverse kinematics via Newton and high-performance computation with NVIDIA Warp.
The retargeting pipeline handles proportional human-to-robot scaling, multi-objective IK solving with joint limits, feet stabilization to maintain ground contact, and per-DOF joint limit clamping. Currently supports SOMA as the input skeleton and Unitree G1 (29 DOF) as the output robot.
Note: This project is in active development. The API may change between releases as the design is refined.
Requirements
- Python: 3.10, 3.11, or 3.12 (upstream tested on 3.12; 3.10/3.11 supported via relaxed numpy/scipy pins)
- Git LFS: Installed and initialized for asset downloads (only needed when working from source)
- OS: Windows (x86-64) and Linux (x86-64, aarch64)
- GPU: NVIDIA GPU (Maxwell or newer), driver 545+ (CUDA 12). No local CUDA Toolkit installation required.
Installation
From PyPI (recommended)
pip install eden-soma-retargeter
soma-bvh-to-csv --help
This installs the soma_retargeter Python package and the soma-bvh-to-csv console script. The default retargeting config and the SOMA zero-frame BVH ship inside the wheel, so no LFS checkout is needed for the standard pipeline.
Runtime requirements: Python 3.10/3.11/3.12, NVIDIA GPU (Maxwell or newer), driver 545+.
From source (for contributors)
LFS only needs to be pulled if you plan to use the sample motions in assets/motions/ or rebuild the docs in assets/docs/. The wheel itself bundles only the default config and the SOMA zero-frame BVH that already live under soma_retargeter/configs/.
Method 1 (conda + pip)
conda create -n soma-retargeter python=3.12 -y
conda activate soma-retargeter
git lfs pull # sample motions / docs assets
pip install .
Method 2 (uv)
Install uv, then:
git lfs pull
uv sync
uv sync creates an isolated .venv inside the project directory, installs the correct Python version and resolves all dependencies.
Platform-specific notes
Note (Linux): For the GUI viewer to work, install tkinter
sudo apt-get install python3.12-tk
Note (Windows): If imgui-bundle fails to install, the Microsoft Visual C++ Redistributables may be missing. Download from the official Microsoft documentation.
Motion Data
This repo includes 10 sample BVH/CSV pairs in assets/motions/ for immediate testing.
For large-scale motion data, see the SEED dataset (Skeletal Everyday Embodiment Dataset) published by Bones Studio. SEED provides a large-scale collection of human motions on the SOMA uniform-proportion skeleton, which is the expected input format for this tool. The G1 robot motion data included in SEED was retargeted using the upstream SOMA Retargeter.
Quick Start
When using uv, replace
soma-bvh-to-csvwithuv run soma-bvh-to-csvin the commands below.
Interactive viewer (OpenGL)
soma-bvh-to-csv --viewer gl
This uses the bundled default config. To override:
soma-bvh-to-csv --config ./my_config.json --viewer gl
The viewer displays the source SOMA motion alongside the retargeted robot in a 3D viewport. Use the right panel to load BVH files, run retargeting, and save CSV output. Playback controls at the bottom allow scrubbing, speed adjustment, and looping. Toggle visibility of the skinned mesh, skeleton, joint axes, and positioning gizmos.
Batch conversion (headless)
Process a folder of BVH files without a display. Set import_folder and export_folder in the config file, then run:
soma-bvh-to-csv --config ./my_config.json --viewer null
Batch mode recursively finds all .bvh files in the import folder, processes them in configurable batch sizes, and writes CSV files to the export folder mirroring the input directory structure.
The same entry point is also reachable as a Python module, useful for embedding in other tools:
python -m soma_retargeter.app.bvh_to_csv_converter --viewer null
In-process Python API (soma_retargeter.retargeting)
For embedding retargeting directly in a Python program — with no temp files or
subprocesses, and flat memory across an unbounded stream of clips — use
MotionRetargeter. It also fits SMPL / SMPL-H / SMPL-X motion into the SOMA
rig on the way in (via py-soma-x), so you can
retarget raw AMASS-style body-model motion, not just SOMA BVH.
from soma_retargeter.retargeting import MotionRetargeter
# SMPL-X -> Unitree G1 (fitting requires the [fit] extra)
rt = MotionRetargeter(body_model="smplx", body_model_path="/path/to/SMPLX_NEUTRAL.npz",
target_fps=30.0, device="cuda")
out = rt.retarget(poses, trans, source_fps=120.0, betas=betas) # AMASS layout arrays
# out = {"root_pos" (T,3) m, "root_quat" (T,4) wxyz, "dof_pos" (T,29) rad,
# "joint_names" [29], "fps"}
# Native SOMA motion needs no body model and no torch:
rt_soma = MotionRetargeter(body_model="soma", target_fps=30.0)
out = rt_soma.retarget_bvh("motion.bvh") # SOMA-skeleton BVH (e.g. BONES-SEED)
out = rt_soma.retarget_soma_npz("motion.npz", source_fps=30.0) # save_soma_npz format
Install the fit dependencies with the extra:
pip install "eden-soma-retargeter[fit]"
retarget_batch([...]) retargets many clips in one IK solve (one env per clip).
See the MotionRetargeter docstring for the full option set (per-call gender,
chunk sizes, IK overrides, …).
Code Overview
soma_retargeter/
| Module | Description |
|---|---|
app/bvh_to_csv_converter.py |
Main entry point (also exposed as the soma-bvh-to-csv console script). Drives both interactive and headless batch retargeting modes. |
animation/ |
Core data structures for skeletons, animation buffers, IK, and skinned meshes. |
assets/ |
File I/O for BVH, CSV, and USD formats. |
pipelines/ |
Retargeting pipeline: IK solving, feet stabilization, and joint limit clamping. |
retargeting/ |
Fork-added in-process Python API (MotionRetargeter): SMPL-family fitting + native SOMA input. |
robotics/ |
Human-to-robot scaling and robot output formatting. |
renderers/ |
Visualization for the interactive viewer. |
utils/ |
Math, pose, coordinate conversion, Newton and Warp helpers. |
configs/ |
JSON configuration for retargeting, scaling, and feet stabilization parameters, plus the default default_bvh_to_csv_converter_config.json shipped with the wheel. |
Related Work & Acknowledgments
Upstream SOMA-ecosystem projects for humanoid motion data:
- SOMA Body Model - Parametric human body model with standardized skeleton, mesh, and shape parameters
- GEM-X - Human motion estimation from video
- Kimodo - Kinematic motion diffusion model for text and constraint-driven 3D human and robot motion generation
- ProtoMotions - GPU-accelerated simulation and learning framework for training physically simulated digital humans and humanoid robots
- SONIC - Whole-body control for humanoid robots, training locomotion and interaction policies
The upstream project also draws on GMR (General Motion Retargeting) and PyRoki (A Modular Toolkit for Robot Kinematic Optimization).
License
Licensed under Apache-2.0, same as the upstream project. Installation pulls in third-party open-source dependencies; review their license terms before use.
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
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 eden_soma_retargeter-0.2.0.tar.gz.
File metadata
- Download URL: eden_soma_retargeter-0.2.0.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f09cd405e281374fde767197d561d9c60706221b00c724595452482692236ea
|
|
| MD5 |
cd90d74d97b1a2dc56f9c7bb54a41c4f
|
|
| BLAKE2b-256 |
71112498b0ddcb9a520a593fa040c00254cb253d16df95cd7c29948b5d7677b1
|
Provenance
The following attestation bundles were made for eden_soma_retargeter-0.2.0.tar.gz:
Publisher:
release.yml on lalit-jayanti/eden-soma-retargeter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eden_soma_retargeter-0.2.0.tar.gz -
Subject digest:
6f09cd405e281374fde767197d561d9c60706221b00c724595452482692236ea - Sigstore transparency entry: 2063494385
- Sigstore integration time:
-
Permalink:
lalit-jayanti/eden-soma-retargeter@26dfcd47679c0eae0634784b87bbd1e7e693c34e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/lalit-jayanti
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@26dfcd47679c0eae0634784b87bbd1e7e693c34e -
Trigger Event:
push
-
Statement type:
File details
Details for the file eden_soma_retargeter-0.2.0-py3-none-any.whl.
File metadata
- Download URL: eden_soma_retargeter-0.2.0-py3-none-any.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
273802fe6f29f591e927d6ab6cb740248fb895e2bde6ad1c3fbde029b0deefc1
|
|
| MD5 |
e4c560f720817365aee5bc80893ffd05
|
|
| BLAKE2b-256 |
7cbdfae9a44353d2453e49f8b7044693fb8eb9672f7dbd4f75326cd4aa95f5f6
|
Provenance
The following attestation bundles were made for eden_soma_retargeter-0.2.0-py3-none-any.whl:
Publisher:
release.yml on lalit-jayanti/eden-soma-retargeter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eden_soma_retargeter-0.2.0-py3-none-any.whl -
Subject digest:
273802fe6f29f591e927d6ab6cb740248fb895e2bde6ad1c3fbde029b0deefc1 - Sigstore transparency entry: 2063494396
- Sigstore integration time:
-
Permalink:
lalit-jayanti/eden-soma-retargeter@26dfcd47679c0eae0634784b87bbd1e7e693c34e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/lalit-jayanti
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@26dfcd47679c0eae0634784b87bbd1e7e693c34e -
Trigger Event:
push
-
Statement type: