digiarena (PyPI: digiarena)
Python SDK for DigiArena — browse hosted robot-simulation scenes, deploy them as cloud gyms, and submit to benchmarks.
pip install digiarena
# Camera images are rendered on your machine; add this for image observations:
pip install 'digiarena[render]' && python -m playwright install chromium
import digiarena as da
da.login() # paste an API key from digiarena.org → Settings
# Continue the exact browser attempt without resetting:
with da.attach("hosted-session-id") as env:
obs, info = env.observe()
print(info["episode_id"], obs["rgb"].keys())
# Or launch an independent session from an accessible scene in one call
# (env.close() also tears the session down):
with da.make("alice/kitchen_001", task="pick_mug_to_sink") as env:
obs, info = env.reset(seed=0)
obs, reward, terminated, truncated, info = env.step(env.action_space.sample())
# Or keep the handle for the viewer URL, logs and lifetime extension:
scenes = da.scenes.list(query="kitchen")
gym = da.deploy(scene="kitchen_001", task="pick_mug_to_sink")
env = gym.connect() # → world_engine_client.RemoteEnv
obs, info = env.reset(seed=0)
obs, r, term, trunc, info = env.step(action)
gym.close()
CLI with the same surface:
digiarena login
digiarena scenes list --query kitchen
digiarena deploy --scene kitchen_001
digiarena leaderboard tabletop-v1
digiarena usage
Layering
digiarena depends on and reuses
world-engine-client
(connect(token, url) → RemoteEnv). This package covers everything from your
account to that token — scene gallery, cloud deploy, benchmark submission,
leaderboards, usage — and never reimplements the wire protocol.
- Light dependencies: numpy, Pillow (camera images) and Gymnasium (spaces),
all via
world-engine-client. No torch or opencv.import digiarenaloads only the stdlib and numpy; Pillow and Gymnasium load on first use. - Every call hits the public REST API (
/api/v1/*) withAuthorization: Bearer da_live_...— the SDK is a thin wrapper you could replace with curl. - Typed errors with actionable "Possible fixes" (the World Engine style).
- Endpoints still in later platform milestones (benchmark submission) raise
NotImplementedYetErrorwith the server's own guidance — the SDK surface is stable ahead of them.
Scene content never transits your machine: there is no upload()/download().
Content is authored in the platform's browser editor; public scenes are used
directly via da.deploy() without forking. Private scenes require ownership or
platform admin access. Pass images=False to deploy/attach for state-only operation.
Camera images are drawn on your computer, not on the platform: the hosted session
simulates physics and sends the poses with each step, and a headless Chrome on your
machine renders the same scene the browser shows. This needs the render extra and
a Chrome with hardware WebGL (chrome://gpu); without the extra, asking for images
fails before any request. Scene assets are downloaded once per session into a
temporary cache that env.close() deletes.
Remote simulation
da.attach(session_id) uses resume semantics and pauses the current attempt.
env.observe() and env.render() never advance physics. env.reset(seed=...)
starts a new episode; env.step(action) advances one negotiated control interval.
env.close() releases control; gym.close() tears down a launched session.
A live Python controller survives browser closure. Lost/uncertain actions are
never retried automatically: reconnect or explicitly reset to recover.
Images are RGB uint8 arrays in obs['rgb'], keyed by configured camera name.
Use cameras=['wrist'] for a subset and env.as_gymnasium() for the optional
Gymnasium adapter.
Runnable examples are in the repository's
examples/
directory (not part of the installed package): attach.py, reachable_pose.py, and
deploy_policy.py. measure_remote.py records throughput and soak measurements.
vla_smolvla.py runs a real VLA (SmolVLA via LeRobot, pip install 'lerobot[smolvla]')
on your machine against a remote session, and measure_link.py reports what your
network link does to stepping: steps per second, latency and bandwidth used, for
state only, one camera and all cameras.
To check the whole path end to end, start Simulate in the browser editor, copy the session id from the Inspector's Python API card, and send the end effector to a pose while watching the browser:
python examples/reachable_pose.py SESSION_ID # small offset from the start pose
python examples/reachable_pose.py SESSION_ID --pos 0.45 0.0 0.30 # absolute position, metres
python examples/reachable_pose.py SESSION_ID --pos 0.45 0 0.3 --rot 3.14 0 0 --state-only
digiarena attach SESSION_ID --state-only # inspect without stepping
Development
pip install -e '.[img,gym]' pytest && python -m pytest
The tests use a stub control plane and a fake simulator; no platform is needed.
Credentials
DIGIARENA_API_KEY env var (CI/batch) → ~/.config/digiarena/credentials
(written by da.login() / digiarena login, mode 0600).
DIGIARENA_API_URL overrides the endpoint for staging deployments.
Metadata
Release files for digiarena 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 | |
|---|---|---|---|---|
| digiarena-0.3.0.tar.gz | 33.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| digiarena-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.3 kB
Release files / digiarena-0.3.0.tar.gz
| Download URL | digiarena-0.3.0.tar.gz |
|---|---|
| Size | 33.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e94cad80f06055abb61d967734b323c1a97a6bdd3ea6dc1fd2e68c904724ef5
|
|
BLAKE2b-256 checksum How to use checksums |
1b9865be02e6d895a15e523ad3a542b32725660b31ca348612b6fb7f041d7f3d
|
| 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 / digiarena-0.3.0-py3-none-any.whl
| Download URL | digiarena-0.3.0-py3-none-any.whl |
|---|---|
| Size | 21.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9242bfd7e3ee7d867fa68494a8e15ca7b7aa895a19c3c180e2f4ac58ea8ee64f
|
|
BLAKE2b-256 checksum How to use checksums |
ac4fff4b6e5af890764037847a67d36d999e1566c2c449ff3e0f8eb5eb75fdb1
|
| 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 digiarena 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 digiarena-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.