Skip to content

Repository files navigation

Creature Lab

CI Python License

Creature Lab is a failure-first, local workbench for robot morphology experiments. Design a body, run it in physics, and find out whether a failure came from the body, controller, task, fragility, or simulator — then hand someone the exact experiment that proves it. Everything is inspectable JSON and runs offline on an ordinary laptop.

Creature Lab demo

Design → Run → Autopsy → Improve → Verify → Share

The distinctive unit is a minimum reproducible robot experiment: creature, task, controller, trace, hashes, and runtime provenance in a verified pack. Creature Lab is an educational and early-prototyping tool — not hardware qualification, a cloud service, or a GPU-scale RL platform.

Start Here

From a fresh checkout, run one launcher. It installs the starter extras, checks the environment, and opens the interactive build editor in your browser — configure a creature first, then run it, instead of jumping straight into physics.

.\scripts\start.ps1
python scripts/start.py

A terminal shows setup progress and an editor URL such as http://localhost:8080. Pick a preset, tune it, click Simulate to run it through the physics pipeline and read its score/diagnosis and a robustness sweep in the same panel, then Save to write a normal CreatureSpec JSON (or .urdf). Try a different starting body with python scripts/start.py --creature humanoid.

No browser handy? Once installed, a bare creature-lab with no arguments runs a built-in creature through its measured gait and prints score + diagnosis straight to the terminal:

uv run creature-lab

If launch fails, start with python scripts/start.py --dry-run and uv run creature-lab doctor.

Manual Quickstart

uv sync --inexact --extra sim --extra viz
uv run creature-lab build

For the plain looping playback demo instead of the setup screen: uv run creature-lab demo --open-browser (add --no-hold to save a trace and exit after one pass).

Next Steps

uv run creature-lab zoo list
uv run creature-lab zoo run quadruped
uv run creature-lab autopsy examples/quadruped.json --task examples/crawl_forward.json
uv run creature-lab evolve examples/quadruped.json --task examples/crawl_forward.json --attempts 20

zoo run uses the measured curated controller by default; autopsy explains why a run scored the way it did and emits a reproducible pack; evolve searches for a better body/gait. See Getting Started for the full first-session walkthrough and CLI Reference for every command.

What You Get

  • A curated Creature Zoo: quadruped, worm, hexapod, tripod, damaged quadruped, and humanoids.
  • A browser build editor for presets, body sliders, part edits, motor tuning, validation, simulation, live metrics/diagnosis, a robustness sweep, and URDF import/export — all in one screen, with optional live file-sync to a project directory (--project).
  • Portable JSON specs for creatures and tasks, and physics runs saved with exact creature/task/controller snapshots, hashes, scores, contacts, and warnings.
  • Experiment Autopsy: controller counterfactuals, task-aware perturbation trials, optional backend comparison, cause attribution, and a recommended next experiment.
  • A Failure Zoo of intentionally broken experiments for teaching and diagnostic regression.
  • Local improvement loops: evolve for search and ask --offline for validated design edits.
  • Replay, diagnosis, GIF/MP4 export, and advanced backend/export bridges.

Core Workflow

CreatureSpec + TaskSpec
  -> run a physics episode
  -> save an EpisodeTrace
  -> inspect or diagnose the result
  -> evolve or edit the creature
  -> replay/export the best run

Every creature, task, and controller is JSON. Every episode is a trace. Every simulator is an adapter.

PyBullet is the default simulator. Specs, tasks, traces, and replays are portable; exact physics behavior is backend-dependent.

Docs

Advanced

A sample of what's available beyond the first run — full detail in CLI Reference:

Need Command
Diagnose why a run failed uv run creature-lab diagnose runs/<run-id>
Optimize a creature's gait (2-3x typical) uv run creature-lab optimize creature.json --task task.json --out gait.json
Combine success/robustness/portability into one pass-fail uv run creature-lab qualify creature.json --task task.json --profile basic-locomotion
Check robustness / cross-backend gap uv run creature-lab robustness runs/<id> --trials 10 / sim2sim runs/<id>
Export a shareable, verified run uv run creature-lab export-pack latest --out outputs/my_pack
Train a policy with reinforcement learning (PPO) uv sync --extra rl, then uv run creature-lab train creature.json --task task.json --out outputs/trained
MuJoCo backend uv sync --extra mujoco, then uv run creature-lab run ... --backend mujoco
URDF/MJCF bridge export-urdf, export-mjcf, import-urdf
Gymnasium-style control creature_lab.rl.gym_env.CreatureGymEnv (a real gymnasium.Env)

Install everything with uv sync --all-extras.

Testing

uv sync --all-extras
uv run ruff check .
uv run ruff format --check .
uv run pytest
uv run creature-lab zoo check-showcases

CI runs Ruff, Pytest, packaging, showcase acceptance, a real browser journey, and platform jobs on Linux, Windows, and macOS. See CONTRIBUTING.md for the full pre-PR checklist and docs/project/RELEASING.md for the release process.

Development Principle

Do not build a PyBullet project. Build a backend-agnostic creature lab where PyBullet is only the first backend.

About

Design, simulate, evolve, and replay modular robot-creatures with Python, physics backends, and agent-driven tools.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages