Installation#
EmbodiChain is a Python framework built on the DexSim simulation engine (dexsim_engine on PyPI). This guide covers system requirements, package indexes, Docker and local install paths, optional generative-simulation dependencies, and verification.
After installation, continue with the Quick Start Tutorial.
Choose your setup#
Path |
Best for |
Notes |
|---|---|---|
Docker |
First run, reproducible GPU sim |
Pre-built image with CUDA 12.8, Vulkan, and Python 3.11 |
Local + uv |
Day-to-day development |
Fast installs; recommended with a virtual environment |
Local + pip |
Simple environments |
Use a virtual environment |
System requirements#
Component |
Requirement |
|---|---|
OS |
Linux x86_64 (Ubuntu 20.04+ recommended) |
GPU |
NVIDIA GPU with compute capability 7.0+ |
NVIDIA driver |
≥ 535 (tested on driver branches up to 595.x) |
CUDA |
12.x (aligned with the Docker image and |
Vulkan |
Host ICD/layer files for GPU rendering (see Docker notes) |
Python |
Core: 3.10, 3.11, or 3.12; |
Display (optional) |
X11 |
[!IMPORTANT] Python 3.12 is supported for the core EmbodiChain installation. The optional
gensimextra includes Blender’s ABI-specificbpypackage and must run in a Python 3.11 environment. If your core installation uses Python 3.12, create a separate Python 3.11 environment forgensimand start its commands from that environment; there is no automatic cross-environment handoff.
NVIDIA drivers are backward compatible with applications built against older CUDA toolkits. A 595-series host driver therefore works with the current CUDA 12.8 Docker image and wheels; installing a CUDA 13 toolkit on the host is not required. See NVIDIA’s CUDA compatibility documentation for details.
[!NOTE] PyTorch: EmbodiChain depends on PyTorch transitively (for example via
dexsim_engineandpytorch_kinematics). If you install or upgrade PyTorch separately, match the wheel to your CUDA version using the official PyTorch install selector.
Package indexes#
EmbodiChain and its simulation backend are published on a DexForce package index. Generative-simulation extras also need Blender’s index for the bpy wheel.
Index |
URL |
Used for |
|---|---|---|
DexForce (required) |
|
|
Blender (gensim only) |
|
|
Reuse these flags on every pip / uv pip install command:
DEXFORCE_INDEX="http://pyp.open3dv.site:2345/simple/"
DEXFORCE_TRUSTED_HOST="pyp.open3dv.site"
BLENDER_INDEX="https://download.blender.org/pypi/"
PIP_EXTRA_ARGS="--extra-index-url ${DEXFORCE_INDEX} --trusted-host ${DEXFORCE_TRUSTED_HOST}"
GENSIM_EXTRA_ARGS="${PIP_EXTRA_ARGS} --extra-index-url ${BLENDER_INDEX}"
[!TIP] To avoid repeating flags, you can configure pip once:
pip config set global.extra-index-url "${DEXFORCE_INDEX}"and
pip config set global.trusted-host "${DEXFORCE_TRUSTED_HOST}".
Docker (recommended for first run)#
The pre-configured image includes CUDA 12.8, Vulkan-related mounts, and dependencies needed for GPU simulation and rendering.
Prerequisites#
NVIDIA driver ≥ 535 on the host
For GUI runs: working X11 forwarding (
DISPLAY,~/.Xauthority,/tmp/.X11-unix)For headless servers: no display required; use
--headlessin tutorial scripts
Pull and start a container#
1. Pull the image:
docker pull dexforce/embodichain:ubuntu22.04-cuda12.8
2. Start a container using the repo script docker/docker_run.sh (mounts GPU drivers, Vulkan, shared memory, and your data directory):
git clone https://github.com/DexForce/EmbodiChain.git
cd EmbodiChain
./docker/docker_run.sh <container_name> <data_path>
Argument |
Meaning |
|---|---|
|
Name for the new container |
|
Host directory mounted at |
The script checks for Vulkan ICD/layer and EGL vendor JSON files on the host. Warnings usually mean reduced rendering support; the script exits only when required driver paths are missing entirely.
3. Attach to the running container:
docker exec -it <container_name> bash
Inside the container, install or update EmbodiChain with the local installation commands if needed, then verify.
[!NOTE] The script uses
--network=host,--gpus all, and a large--shm-sizefor simulation workloads. Adjust mounts indocker/docker_run.shif your driver files live under/etcinstead of/usr/share.
Local installation#
Use a dedicated virtual environment to avoid conflicts with system Python packages.
For the core package, choose Python 3.10, 3.11, or 3.12. The examples below use
Python 3.12; choose Python 3.11 instead if you plan to install gensim in the
same environment.
1. Create a virtual environment#
With uv (recommended):
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.12 .venv
source .venv/bin/activate
With pip:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
2. Install EmbodiChain#
Set the index variables from Package indexes, then pick one row:
Source |
Tool |
Command |
|---|---|---|
PyPI |
uv |
|
PyPI |
pip |
|
Git clone |
uv |
|
Git clone |
pip |
|
Example — editable install from source with uv:
git clone https://github.com/DexForce/EmbodiChain.git
cd EmbodiChain
uv venv --python 3.12 .venv && source .venv/bin/activate
uv pip install -e . \
--extra-index-url http://pyp.open3dv.site:2345/simple/ \
--trusted-host pyp.open3dv.site
Example — install from PyPI with pip:
pip install embodichain \
--extra-index-url http://pyp.open3dv.site:2345/simple/ \
--trusted-host pyp.open3dv.site
This pulls in dexsim_engine (Python package dexsim) and the rest of the core dependencies declared in pyproject.toml.
3. Official task environments#
The main embodichain distribution includes the official task environments as
the embodichain_tasks import package, together with their JSON/YAML configs.
Both a published-wheel install and pip install -e . register the
embodichain.tasks entry point automatically; do not install
embodichain_tasks/ separately.
If an older checkout was installed with pip install -e embodichain_tasks/,
remove that legacy editable distribution once before reinstalling the main
project:
pip uninstall -y embodichain_tasks
pip install -e .
Commands can continue to use repository-style paths such as
embodichain_tasks/configs/tasks/manipulation/tableware/pour_water/task.cobotmagic.yaml.
EmbodiChain resolves these paths from the checkout when present and otherwise
from the installed wheel.
Optional: cuRobo V2 motion planning#
Install cuRobo separately to use EmbodiChain’s CUDA-accelerated, collision-aware motion planner. cuRobo is intentionally not part of the core dependency set, and its Git source requirement cannot be included in metadata published to PyPI. Select exactly one command that matches the CUDA version used by PyTorch in the active environment:
python -c "import torch; print(torch.version.cuda)"
nvidia-smi reports the newest CUDA version supported by the installed driver,
which can be newer than the CUDA runtime used by PyTorch and is therefore not
the value to use when choosing the cuRobo extra.
The normal EmbodiChain environment already provides PyTorch, so prefer one of
the non-torch variants:
# CUDA 12.x
uv pip install \
"nvidia-curobo[cu12] @ git+https://github.com/NVlabs/curobo.git@v0.8.0"
# CUDA 13.x
uv pip install \
"nvidia-curobo[cu13] @ git+https://github.com/NVlabs/curobo.git@v0.8.0"
For a fresh environment that also needs cuRobo to select and install PyTorch,
replace cu12 or cu13 with cu12-torch or cu13-torch. The same source
requirements work with pip; replace uv pip install with pip install.
Recommended for the current CUDA 12.x EmbodiChain stack:
uv pip install \
"nvidia-curobo[cu12] @ git+https://github.com/NVlabs/curobo.git@v0.8.0"
python -c "import curobo; print(curobo.__version__)"
pytest --pyargs curobo.tests
The dependency is installed from NVIDIA’s source repository and pinned to the
cuRobo V2 v0.8.0 release. cuRobo has stricter requirements than the core
EmbodiChain installation: Linux, Python 3.10–3.13, a supported NVIDIA GPU with
at least 4 GB VRAM, and a driver that supports CUDA 12 or newer. See
NVIDIA’s official installation guide
for the current compatibility requirements, and see
cuRobo V2 Planner for EmbodiChain
configuration and usage. cuRobo planning always runs on CUDA, but the
SimulationManager physics device may be either CPU or CUDA.
Optional: generative simulation (gensim)#
Install the gensim extra for SimReady asset pipelines, Blender-based mesh
processing, and pyrender. It requires a Python 3.11 environment because its
bpy wheel is ABI-specific. Use the Blender index in the install command.
If your core installation uses Python 3.12, create and activate a separate Python 3.11 environment before running any of the commands below. The current GenSim launchers use the interpreter that starts them, so start Blender-based commands from this Python 3.11 environment.
Source |
Tool |
Command |
|---|---|---|
PyPI |
uv |
|
PyPI |
pip |
|
Git clone |
uv |
|
Git clone |
pip |
|
Example — separate Python 3.11 environment:
uv venv --python 3.11 .venv-gensim
source .venv-gensim/bin/activate
pip install -e ".[gensim]" \
--extra-index-url http://pyp.open3dv.site:2345/simple/ \
--trusted-host pyp.open3dv.site \
--extra-index-url https://download.blender.org/pypi/
[!TIP] When using uv from a source checkout,
pyproject.tomlalready defines the Blender index under[tool.uv.index]for thebpysource. You still need the DexForce index flags fordexsim_engine.
For SimReady pipeline usage and LLM configuration, see SimReady Asset Pipeline.
Verify installation#
Quick check (all install methods)#
python -c "import embodichain, dexsim; print('embodichain', embodichain.__version__); print('dexsim', dexsim.__version__)"
You should see version strings for both packages with no import errors.
Simulation tutorial (source tree or Docker with repo)#
The tutorial script scripts/tutorials/sim/create_scene.py ships with the repository. Run it from the repository root:
cd /path/to/EmbodiChain
python scripts/tutorials/sim/create_scene.py
With a display: omit
--headlessto open the DexSim viewer after the scene is built.Headless / SSH: use
--headlessto run without a window (FPS logs in the terminal):
python scripts/tutorials/sim/create_scene.py --headless
Optional GPU smoke test:
python scripts/tutorials/sim/create_scene.py --headless --device cuda
For a headless browser view, enable Viser:
python scripts/tutorials/sim/create_scene.py --viser
Open the endpoint printed in the terminal, normally
http://127.0.0.1:8080. On a remote machine, keep the default loopback binding
and forward the port:
ssh -N -L 8080:127.0.0.1:8080 user@worker-host
See Browser visualization with Viser for supported objects, camera preview, update-rate options, and remote-access guidance.
Press Ctrl+C to stop; the script cleans up the simulation on exit.
Troubleshooting#
Symptom |
What to try |
|---|---|
|
Add the DexForce index and |
|
Reinstall with the DexForce index; |
Docker Vulkan / EGL warnings from |
Install host NVIDIA drivers and Vulkan user-space packages; paths must be files under |
Viewer does not open |
Export |
PyTorch / CUDA errors at runtime |
Reinstall a PyTorch build that matches your driver/CUDA from pytorch.org. |
|
Install the CUDA-matched cuRobo source requirement separately, such as |
|
Include the Blender index ( |