Robola MJCF Editor Local Bridge - Local Python Library for MuJoCo and Online Web mjcf editing
Project description
Robola – Local MuJoCo Runtime Companion
RobolaPyLib powers the local runtime that feeds the Robola Web Editor:
- Load and validate MuJoCo MJCF scenes on your own machine
- Stream geometry/material/joint data to the browser in real time
- Expose a WebSocket API for simulation control, saving, and asset transfer
✅ Use the online editor at https://robolaweb.com/editor. The website never touches your disk—the CLI in this repo loads every file locally and only streams the data you approve.
Installation
From PyPI (recommended)
pip install robola
From source (development)
git clone https://github.com/robola-dev/RobolaPyLib.git
cd RobolaPyLib
pip install -e .
Prerequisites:
- Python 3.10 or later
- MuJoCo 3.3+ (and its license/key environment variables configured if required)
5-Minute Quickstart
- Prepare a model – keep an
*.xmlMJCF file handy (for example~/robots/spot.xml). - Start the local server
robola serve ~/robots/spot.xml --port 9527
- Serves WebSocket traffic on
ws://localhost:9527 - The terminal banner confirms that the runtime is up
- Serves WebSocket traffic on
- Open the online editor – visit https://robolaweb.com/editor and sign in.
- Connect to the runtime – enter
9527in the “WebSocket Port” field (top-right) and click Connect. - Model, simulate, iterate
- The editor fetches the local model and renders the scene
- You can inspect/edit bodies, joints, materials, etc.
- Start/pause/stop simulations or save back to disk from the browser
📌 Keep the CLI process running while the browser tab is open so the editor can stream frames and send commands.
Example Models
You can use MJCF models from the MuJoCo Menagerie as examples. Clone the repository and serve any .xml file:
git clone https://github.com/google-deepmind/mujoco_menagerie.git
cd mujoco_menagerie
robola serve ./google_robot/scene.xml
Then connect to the Robola Web Editor at https://robolaweb.com/editor using port 9527.
CLI Usage
# Load a model with the default port (9527)
robola serve /path/to/model.xml
# Bootstrap a blank scene and launch the server (path is created from the built-in template before serving)
robola serve /path/to/new_scene.xml --new
# Use a custom port
robola serve /path/to/model.xml --port 9000
# Restrict CORS origins (production)
robola serve /path/to/model.xml --origin https://robolaweb.com
# Tune streaming rate and logging
robola serve /path/to/model.xml --fps 30
Common Options
| Option | Description | Default |
|---|---|---|
--port |
WebSocket listening port | 9527 |
--origin |
Allowed browser origin (CORS) | * (set to https://robolaweb.com when sharing) |
--fps |
Simulation streaming rate (1–60 Hz) | 30 |
--new |
Create the specified MJCF path with the built-in template before serving (fails if the file already exists) | false |
Embedding via Python
from robola import serve
serve(
mjcf_path="/abs/path/to/model.xml",
port=9527,
allowed_origin="https://robolaweb.com",
fps=30,
)
Call serve() inside a notebook, a script, or your own application to reuse the same local WebSocket protocol that the CLI exposes.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| “Unable to connect” in the editor | Port/origin mismatch | Ensure the CLI --port and --origin match the values entered in the editor |
| Simulation crashes on start | Missing meshes/textures referenced by MJCF | Check the terminal logs and verify every asset path is valid relative to the MJCF file |
| Saving fails | File not writable | Confirm the XML can be written and that the CLI is still running |
⚠️ Current limitation: Robola does not support MuJoCo Flex (soft bodies) or height-field (
hfield) based terrain rendering yet. These assets will be ignored/omitted when streaming to the editor.
License
MIT License. PRs and issues are welcome—help more roboticists build faster with Robola. 🤖🚀
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file robola-0.2.2.tar.gz.
File metadata
- Download URL: robola-0.2.2.tar.gz
- Upload date:
- Size: 35.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f16c8abf73af37e2b517dac34c0db33fd4117246426b752059042283e1ef22f0
|
|
| MD5 |
f44327f5c94a91c42288aa4071a9409a
|
|
| BLAKE2b-256 |
f33db8ec9a7d3e8ec9bf740279d4f165a0cdca9aed888f96c8eff77d493901d0
|
File details
Details for the file robola-0.2.2-py3-none-any.whl.
File metadata
- Download URL: robola-0.2.2-py3-none-any.whl
- Upload date:
- Size: 37.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84a82ec71a6c1692922a01f9ee9eaa9becbd8b97da7ca4855f75f37b781e65e5
|
|
| MD5 |
d424cf75034856df2740379401cdf0c2
|
|
| BLAKE2b-256 |
8cb5df8abf885baf527570857632daf3e4b9a0d75b61d0eaf5bec587573bf191
|