ballot sim prepare turns your project into something Ballot can run for other people. It either finishes with a ready version you can preview, or it stops and tells you exactly what to change. Nothing reaches a pilot until preparation passes.
What preparation does
Preparation only reruns the stages whose inputs changed, so the second run is usually much faster than the first.
Get your project ready
Expose one function that builds the environment
Expose one function that builds the environment
Ballot imports your module and calls one function that returns your environment. It doesn’t run your scripts, your training loop or your Keep using your own scripts locally. Ballot only needs the function.
if __name__ == "__main__" block.my_project/env.py
Run headless
Run headless
Turn off on-screen viewers such as
has_renderer. Pilots see the world through their headset, which Ballot draws from your scene.If your task uses camera observations, keep them. Ballot never switches your cameras off, but rendering cameras needs a GPU machine, so check that your runtime profile supports it.Pin your dependencies
Pin your dependencies
Include
pyproject.toml and a lock file such as uv.lock. Ballot builds one clean environment from your lock file plus its own integration for your framework.If a pinned version clashes with the runtime profile, preparation names both requirements. It never upgrades your packages without telling you.Keep assets inside the project
Keep assets inside the project
Load meshes, textures and model files with paths relative to your code, for example
Path(__file__).parent / "assets". Absolute paths like /Users/you/... and downloads at startup fail, because sessions run without internet access.Give people enough time
Give people enough time
Benchmark time limits are tuned for scripts, not people. A 30-second limit that suits a policy can end a person’s attempt just as it’s going well.If your task has a short limit, publish a version with a longer one, or none, for piloting. Ballot won’t change your limit silently, and Practice keeps whatever limit you set.
Use your environment's own success rule
Use your environment's own success rule
Task mode reads success and endings from your environment, such as robosuite’s success check. Ballot doesn’t compute its own. See Tasks and steps.
Check what the headset can draw
Check what the headset can draw
Rigid and jointed objects with ordinary meshes and textures work well. Cloth, fluids, particles and custom shaders aren’t supported yet. If one of those matters to the task, preparation stops rather than hiding it from the pilot.Large scenes take longer to load on the headset, so leave out geometry nobody needs to see.
Leave out what pilots don't need
Leave out what pilots don't need
.ballotignore works like .gitignore. Use it to skip datasets, checkpoints, virtual environments, logs and anything private. Smaller uploads prepare faster.Never put keys in your project
Never put keys in your project
Preparation flags files that look like credentials. Builds never see your Ballot key, and your simulation runs without access to any of your accounts.
Size limits
These are the early-access defaults. We’ll raise them as needed.
If your assets are bigger, tell us. Large, publicly hosted assets can be fetched during the build instead of uploaded.