arena-composer
A visual editor, headless renderer and MCP server for authoring IsaacLab-Arena YAML environment specs.
https://github.com/user-attachments/assets/fe77916a-6a83-4348-b8b7-55a05d9676da
Contents
- Highlights
- Commands
- How it works
- Compared with Arena's Agentic Environment Generation
- Install
- Developing
- License
Highlights
- Kit-less scene renderer. Arena's solved layouts, drawn live and headless without Isaac Sim; no GPU required.
- CAD-style visual editor for humans. Drag assets in, set the relations between them, and watch Arena's solver place them.
- MCP tools for agents. Search assets, edit the spec, and check the solved layout by its numbers or in pictures.
Commands
arena-view <spec>.yamlopens the visual editor, a window with the layout Arena solves for the spec in 3D, beside a form that edits the spec.arena-mcpis an MCP server whose tools search assets, add and remove objects, and describe and render the solved layout.arena-render <spec>.yaml...draws the solved layout headless, a PNG per--view:default(perspective), or orthographictop,frontandside. It needs no display, and a machine with no GPU draws through Mesa's lavapipe.arena-resolve-layout <spec>.yamlprints the solved layout as JSON or text.arena-composer new environments/tasks/<name>.yamlstarts a spec: a task, and the scene it includes, holding a pick-and-place that validates, solves and builds.
A project that registers its own assets or kinds names the modules that do it with
--import MODULE, or in ARENA_COMPOSER_IMPORTS, separated by :.
How it works
The YAML is the source of truth: the visual editor, your agent's MCP tools and your text editor all change the same files, and the view follows whichever one did. Edits from the editor and the tools are checked before they are written, Arena's own solver places the objects, and a lightweight Rust renderer draws them, so Isaac Sim never loads.
The guide goes further: how it works, the visual editor and working with an agent.
Compared with Arena's Agentic Environment Generation
Arena's Agentic Environment Generation (experimental) works on the same specs, and a spec it generates opens here like any other.
| Agentic Environment Generation | arena-composer | |
|---|---|---|
| Starts from | a natural-language prompt | a spec you already have |
| 3D view | a sim preview in Isaac Sim: builds the environment and records a zero-action rollout | a lightweight Rust renderer, live as the spec changes, and headless PNG renders; no physics |
| Spatial graph | objects as nodes with their pictures, relations as edges | |
| Placement | Arena's relation solver | |
| Assets | Arena's registry, plus NVIDIA's SimReady props | |
| Editing | the YAML as text, validated as you type | the visual editor (a form, and drag-and-drop from an asset browser) and MCP tools |
| LLM | calls one itself, with an NVIDIA or OpenAI API key | none; MCP tools for the agent you use |
| The model sees | the catalogs and validation errors | also where the solver put things, and renders |
| An invalid spec | retried, then handed back with its errors | refused; the files stay as they were |
| Tasks and relations | those Arena marks as agent-ready | every registered one |
Install
A project made from the template needs
none of this: its source setup.sh installs a pinned release and runs init. The steps below add
arena-composer to an Arena install of your own.
Into the venv Arena is installed in, from PyPI. isaaclab_arena is not on PyPI, so
the package goes where Arena already is. Linux x86_64, Python 3.12 or newer.
uv pip install --python <Arena's venv>/bin/python arena-composer
Then point the project's agent clients at the MCP server. init writes bin/arena-mcp and the
configs Claude Code, VS Code and Cursor read, keeping any that already exist:
<Arena's venv>/bin/arena-composer init <project>
An MCP client starts the server with almost no environment, so init --import MODULE writes
ARENA_COMPOSER_IMPORTS into bin/arena-mcp itself.
init also links the author-arena-spec skill into .agents/skills/ and .claude/skills/. The
skill is the procedure an agent follows to write a spec with the MCP tools, through to every
sampled layout passing.
Developing
The showcase on Artefacts
The showcase builds about twenty environments and draws each from four views. artefacts.yaml runs it as an Artefacts job, so every run checks two ways: an environment that does not build or draw fails its test, and the pictures show at a glance whether the rest still look right.
From this repo's root, with Arena's venv active and this checkout installed in it:
artefacts config add artefacts/arena-composer # once: the project's API key
artefacts run showcase
The dashboard gets a test per environment and a PNG per environment and view. More in the Artefacts docs.
The Isaac Sim comparison on Artefacts
The composer draws a scene without Isaac Sim, so parity/ checks it against Isaac Sim's own renders. A second job in artefacts.yaml builds a handful of specs in Isaac Sim and draws each from the same cameras in both, after moving the composer's scene to where physics left everything. Each camera is a test, which fails when the composer draws further from Isaac Sim than it did before. The dashboard shows the two pictures side by side.
It also needs Isaac Sim in Arena's venv and a GPU that RTX renders on, and its EULA accepted, which nothing here does for you:
OMNI_KIT_ACCEPT_EULA=YES artefacts run parity
How the pictures are scored, and how to record a closer baseline, is in docs/development.md.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Metadata
Release files for arena-composer 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arena_composer-0.5.0-cp312-abi3-manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64 | Details |
Release files / arena_composer-0.5.0-cp312-abi3-manylinux_2_28_x86_64.whl
| Download URL | arena_composer-0.5.0-cp312-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 35.5 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f57ea374a22f5d3494cdb17351b2425e731940c7a7d3a57b352e1d504a2319c2
|
|
BLAKE2b-256 checksum How to use checksums |
df0de5d09af5f60bb72b1fc520a4dd45ff084eb0d0a2cadc94719c2ce3dabc53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 27, 2026.
Transparency logSecurity for arena-composer 0.5.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 1 file in this release has been uploaded with provenance metadata.
Attestation for arena_composer-0.5.0-cp312-abi3-manylinux_2_28_x86_64.whl
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 27, 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.