This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.4.2 instead.
world-engine-client
Remote Gym-style Python client for a World Engine
simulation server — a Gaussian-Splatting real-to-sim robot simulation framework.
Your Python connects with a token, becomes the (single) controller, and drives
the MuJoCo physics with reset/step, while every browser watching the
server's viewer.html sees the episode live.
pip install world-engine-client
Base dependencies: numpy only. Install world-engine-client[img,gym] for
optional Pillow decoding and the Gymnasium adapter. The import name is world_engine_client (the
world_engine module name belongs to the simulation server package).
Usage
Server side (prints the control token):
world-engine --scenes-dir scenes serve --mode simulator \
--scene <scene> --task <task> --allow-remote-control
Client side:
import world_engine_client as we_client
env = we_client.connect("<control token>", url="http://<host>:8080")
obs, info = env.reset(seed=0)
for _ in range(200):
action = my_policy(obs) # [-1,1]^7: [dpos(3), drot_axisangle(3), gripper]
obs, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
obs, info = env.reset()
env.close()
Connecting to an editor Simulate session
While the scene editor is running a Simulate preview, the same /control
API is live against the exact scene on the editor's screen. The control token
is shown in the editor Inspector's Python API card (copy / edit /
regenerate it there):
env = we_client.connect("<token from the Inspector>", url="http://<host>:8080",
mode="resume", images=True)
obs, info = env.observe() # preserves the current attempt; no physics advance
obs, reward, term, trunc, info = env.step([0.2, 0, 0, 0, 0, 0, 0])
Resume attachment rejects active human teleoperation with TeleopActiveError.
For hosted DigiArena sessions use digiarena.attach(hosted_session_id); browser
cookies and editor write credentials are not Python control credentials.
Protocol 3 is the default. Direct connections remain reset-required and state-only
unless requested otherwise. proto=2 preserves state-only compatibility and
rejects image/resume requests. Image-enabled operation requires a real GPU renderer
on the server. images=True captures all configured cameras; cameras=['wrist']
selects a subset. RGB arrays appear in obs['rgb']; render() returns the latest
camera without stepping. as_gymnasium() supplies an optional Gymnasium Env.
Observations identify the instance, episode, step, and simulation time in info.
Heartbeats run every 30 seconds with a 90-second controller lease. Expiry freezes
the simulation until explicit takeover. A lost action response is never retried:
RecoveryRequiredError blocks further steps until explicit reset/reconnection.
Pending recording data blocks reset with RecordingPendingError and is preserved.
Action & observation space
The default control mode is osc_pose_delta — robosuite OSC_POSE
conventions:
- action =
[dpos(3), drot_axisangle(3), gripper(1)], all in[-1, 1]; dpos: EE translation delta, ±1 → ±ee_stepm/step (default 0.05);drot_axisangle: world-frame axis-angle rotation delta, ±1 → ±ee_rot_steprad/step (default 0.5);gripper: a sign-driven rate — each step moves the internal command by 0.2 in the sign's direction (full open↔close ≈ 10 steps); 0 = no change.
Observations follow robosuite naming: robot0_eef_pos (3), robot0_eef_quat
(4, scalar-last xyzw), robot0_gripper_qpos, robot0_joint_pos,
robot0_joint_vel, robot0_sew_pos (9, shoulder/elbow/wrist world keypoints,
when a preset robot is attached), object (pos(3)+quat(4, xyzw) per body,
sorted-id order). The proto-1 keys (proprio with wxyz quat, object_state,
joint_positions) remain as compatibility aliases for one release.
Negotiating the space
# at connect:
env = we_client.connect(token, url=..., control_mode="osc_pose_abs",
obs_keys=["robot0_eef_pos", "robot0_eef_quat"])
# or mid-run (lands at the next reset if an episode is active):
env.configure(control_mode="osc_pose_delta")
obs, info = env.reset() # the switch is live here
print(env.action_dim, env.control_mode, env.observation_keys)
Supported modes are advertised in env.metadata["supported_control_modes"]
with per-mode schemas in env.metadata["control_mode_schemas"]:
osc_pose_delta— 7-dim normalized deltas (default);osc_pose_abs— 7-dim absolute[pos(3), rot_axisangle(3), gripper]targets (unscaled, robosuite v1.5input_type="absolute");ee_pos_delta— the legacy 4-dim[dx, dy, dz, gripper]action.
Unknown names raise BadConfigError listing the supported values.
6D rotation helpers
Demonstration HDF5s recorded by the server carry 6D rotations
(action_dict/*_rot_6d, robomimic convention: first two rotation-matrix rows,
Gram-Schmidt decode). Pure-numpy helpers ship here:
from world_engine_client import rot6d_to_matrix, matrix_to_rot6d
R = rot6d_to_matrix(demo["action_dict/abs_rot_6d"][t])
Semantics
- Exactly one controller may be bound;
connect(token, takeover=True)revokes a dead session. - After
terminated/truncatedyou mustreset()(Gym semantics — the server refuses further steps withreset_required). env.action_space/env.observation_spaceare Gymnasium spaces for the negotiated control mode and cameras (needs thegymextra);env.as_gymnasium()returns a fullgymnasium.Env.RemoteEnvis a context manager:with we_client.connect(...) as env:releases the controller lock on exit.- Errors are typed (
TokenError,ControllerConflictError,ResetRequiredError,TeleopActiveError,BadConfigError) and carry the server's "Possible fixes" hints.
Development
pip install -e '.[img,gym]' pytest && python -m pytest
tests/ covers the client alone against a stub server: binary decoding, the
never-retry / recovery rules, heartbeats and Gymnasium spaces. The wire-contract
tests (real client against a real server) live in the server repo:
tests/test_remote_*.py and tests/test_teleop_channel.py.
Metadata
Release files for world-engine-client 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| world_engine_client-0.3.0.tar.gz | 23.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| world_engine_client-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.4 kB
Release files / world_engine_client-0.3.0.tar.gz
| Download URL | world_engine_client-0.3.0.tar.gz |
|---|---|
| Size | 23.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ec1b603025f8c23565a4b8c8b5fd2e59e0a1374dafa677d8e56a8cadb3c0812
|
|
BLAKE2b-256 checksum How to use checksums |
275de9c3b858a70c1cb85245757e7f3d95de098075f51a96301782d899f91adf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logRelease files / world_engine_client-0.3.0-py3-none-any.whl
| Download URL | world_engine_client-0.3.0-py3-none-any.whl |
|---|---|
| Size | 19.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53fb23af13a033643b2aa98899634a2d8be00d464084583253e6f022f1911cd3
|
|
BLAKE2b-256 checksum How to use checksums |
eb9f65396bded7f1dd4538c3493062a9b3eb8f5af74f366c6ba19346a3358635
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logSecurity for world-engine-client 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for world_engine_client-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.