Skip to main content

arena-composer

Artefacts CI: showcase Artefacts CI: parity Guide

A visual editor, headless renderer and MCP server for authoring IsaacLab-Arena YAML environment specs.

The visual editor with the asset browser searched The visual editor with the spatial graph and a relation drawn over the layout
Search Arena's assets and NVIDIA's SimReady props, and drag one onto the layout. Every entry of the spec is a card in the panel. The spatial graph: a node per object, an edge per relation. A click opens its card, and the view draws the relation's shape over the layout.

https://github.com/user-attachments/assets/fe77916a-6a83-4348-b8b7-55a05d9676da

Contents

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>.yaml opens the visual editor, a window with the layout Arena solves for the spec in 3D, beside a form that edits the spec.
  • arena-mcp is 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 orthographic top, front and side. It needs no display, and a machine with no GPU draws through Mesa's lavapipe.
  • arena-resolve-layout <spec>.yaml prints the solved layout as JSON or text.
  • arena-composer new environments/tasks/<name>.yaml starts 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 Generationarena-composer
Starts froma natural-language prompta 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 graphobjects as nodes with their pictures, relations as edges
PlacementArena's relation solver
AssetsArena's registry, plus NVIDIA's SimReady props
Editingthe YAML as text, validated as you type the visual editor (a form, and drag-and-drop from an asset browser) and MCP tools
LLMcalls one itself, with an NVIDIA or OpenAI API key none; MCP tools for the agent you use
The model seesthe catalogs and validation errors also where the solver put things, and renders
An invalid specretried, then handed back with its errors refused; the files stay as they were
Tasks and relationsthose Arena marks as agent-readyevery 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

See AGENTS.md and docs/.

The showcase on Artefacts

Six showcase environments, drawn by arena-render: an AgiBot, a Galbot and a DROID in Lightwheel kitchens, a KUKA arm over a bench of hand tools, a DROID in a Replicator kitchen, and a GR1's kitchen from above

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

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)

Table of built distributions (wheels) for arena-composer 0.5.0
File Interpreter ABI Platform
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 log

Security 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 log

A 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.

Release history Release notifications | RSS feed

This release

0.5.0 This release

1 release file Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page