Skip to main content
SO-101 Arm

SO101-Nexus: SO-101 robot learning, from demos to policies

License Python Docs Tests GitHub release Open In Colab Discord

Beta: APIs may change between releases. Feedback and bug reports are welcome.

SO101-Nexus is an end-to-end Python library for taking an SO-101 robot from demonstrations to a trained policy. It combines physical leader-arm teleoperation, LeRobot-compatible dataset recording, Gymnasium/MuJoCo manipulation environments, and training/evaluation hooks in one installable package.

For full documentation, visit so101-nexus.com/docs.

Demo Rollouts

Recorded MuJoCo teleoperation datasets are available on Hugging Face:

TaskDatasetExample Rollout
PickLift johnsutor/MuJoCoPickLift-v1 Example Rollout
PickAndPlace johnsutor/MuJoCoPickAndPlace-v1 Example Rollout

Why

There are useful SO-101 tools, but few packages connect teleoperation, LeRobot datasets, environments, and training loops in one workflow, all using simulations. SO101-Nexus is built around the record -> clone -> reinforce path: collect demonstrations, replay and evaluate in matching SO-101 environments, bootstrap with imitation learning, then fine-tune with RL.

MuJoCo is the default backend. An optional MuJoCo Warp backend (so101-nexus[warp]) adds GPU-parallel, batched environments for large-scale RL.

What You Get

  • Teleoperation recorder: drive a simulated follower with a physical SO-100 or SO-101 leader arm.
  • LeRobot dataset output: save demonstrations with SO follower state/action units and wrist/overhead camera fields.
  • Gymnasium environments: run SO-101 MuJoCo tasks for touch, look-at, move, pick-lift, and pick-and-place.
  • Configurable curricula: swap objects, add distractors, randomize colors, tune rewards, and choose observation components.
  • Training and evaluation hooks: start with the PPO baseline, LeRobot processors, and policy adapters for real-policy evaluation.
  • GPU-parallel Warp backend (optional, experimental): batched Warp*-v1 vector environments for large-scale RL, installed with so101-nexus[warp].

Installation

pip install so101-nexus

From source

git clone https://github.com/johnsutor/so101-nexus.git
cd so101-nexus
uv sync

Start with the Workflow

Record demonstrations

uvx --from "so101-nexus[teleop]" so101-nexus teleop \
    --leader-port /dev/ttyACM0

See the teleoperation docs for hardware setup, camera fields, environment customization, and Hub upload.

Run an environment

import gymnasium as gym
import so101_nexus.mujoco  # noqa: F401

env = gym.make("MuJoCoPickLift-v1", render_mode="rgb_array")
obs, info = env.reset()

for _ in range(256):
    action = env.action_space.sample()
    obs, reward, terminated, truncated, info = env.step(action)
    if terminated or truncated:
        obs, info = env.reset()

env.close()

See the environment reference for all task IDs.

Run the GPU-parallel Warp backend

Experimental: The Warp backend's API and physics may change between minor releases while the MuJoCo backend is stable. See Stability and versioning.

Install the optional extra and create a batched vector environment:

pip install "so101-nexus[warp]"
import gymnasium as gym
import so101_nexus.warp  # noqa: F401

envs = gym.make_vec("WarpTouch-v1", num_envs=4096, device="cuda")
obs, info = envs.reset(seed=0)
obs, reward, terminated, truncated, info = envs.step(envs.action_space.sample())
envs.close()

Train a policy

The default workflow is demo-seeded: behavior cloning from teleoperation demonstrations, then PPO fine-tuning on the GPU-parallel Warp backend. Train end to end in your browser:

Open In Colab

Or run it locally with examples/bc_ppo_warp.py. For the full record -> clone -> reinforce walkthrough, see the Workflow docs.

Prefer a from-scratch baseline instead? SO101-Nexus also ships a CleanRL-style PPO baseline for Gymnasium environments (no demonstration seeding). See Training with PPO for the command-line workflow and tuning notes, or train a strong policy end to end in your browser:

Open In Colab

Roadmap

  • MuJoCo environments for the SO-101 arm
  • SO-101 tasks: Touch, LookAt, Move, PickLift, PickAndPlace
  • Physical leader-arm teleop recorder for LeRobot datasets
  • MuJoCo Warp backend for GPU-parallel throughput
  • Stronger training baselines and exemplars for every environment
  • Integration with the LeRobot Hub

Development

git clone https://github.com/johnsutor/so101-nexus.git
cd so101-nexus
uv sync

make test       # run all tests
make format     # format code
make lint       # lint code

License

This repository's source code is available under the Apache-2.0 License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

so101_nexus-0.4.9.tar.gz (16.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

so101_nexus-0.4.9-py3-none-any.whl (13.0 MB view details)

Uploaded Python 3

File details

Details for the file so101_nexus-0.4.9.tar.gz.

File metadata

  • Download URL: so101_nexus-0.4.9.tar.gz
  • Upload date:
  • Size: 16.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for so101_nexus-0.4.9.tar.gz
Algorithm Hash digest
SHA256 fe05b78b76d830f41a05d8f100933f3747d0af0d61f626706189fc274548783c
MD5 7674c81a67c906981d82475a676d9498
BLAKE2b-256 36730744cf534659dae154b4c23d41f11efe8a705576108088871d939273bbbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for so101_nexus-0.4.9.tar.gz:

Publisher: publish.yml on johnsutor/so101-nexus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file so101_nexus-0.4.9-py3-none-any.whl.

File metadata

  • Download URL: so101_nexus-0.4.9-py3-none-any.whl
  • Upload date:
  • Size: 13.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for so101_nexus-0.4.9-py3-none-any.whl
Algorithm Hash digest
SHA256 651a9d4d7b3239527c47d9dee8c3b08c796e4b330155e7131697cd70c5d72d9a
MD5 f1bf87cc7b50b8624e737410b7916d5c
BLAKE2b-256 783e708cd8ed6c8f3aedf6457109f80d8a38b318538c9d5c1fb38a71c12be304

See more details on using hashes here.

Provenance

The following attestation bundles were made for so101_nexus-0.4.9-py3-none-any.whl:

Publisher: publish.yml on johnsutor/so101-nexus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.1

2 files

0.5.0

2 files

0.4.13

2 files

0.4.12

2 files

0.4.11

2 files

0.4.10

2 files

This release

0.4.9 This release

2 files

0.4.8

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page