SpatialBench is a family of spatial-reasoning benchmarks for vision-language models. Every item is generated from a renderer with exact ground truth, scored by string equality (no LLM judges), and the test set is a seed, not a file.
Scenes come from a physically-based renderer, so the label is the scene graph itself. No annotation noise, no web contamination.
Every answer is checked by string equality against renderer state. Accuracy and format-failure rate are published side by side.
Packs are regenerable from a seed at any size or difficulty. Contaminated? Bump the seed and re-render.
Frontier models sit within ~2 points of each other on general multimodal benchmarks. On CubeBench the same field spreads 14–85%, and the ordering upends the price list. Each benchmark below probes a different spatial skill through the same pack format.
Can your model read a Rubik's cube? Face reading, view anchoring, hidden-face inference, and move simulation on rendered cubes with exact state ground truth.
Opposite-face constraints and hidden-value inference across multiple dice: the minimal probe of "what can't I see, and what must it be?"
Two cameras, one scene. Fuse views to recover state neither camera sees alone, and flag when the views are inconsistent.
Track object state through a sequence of manipulations with occlusion: spatial memory, not just spatial perception.
Mental rotation and re-identification: is this the same object seen from a different pose, or a mirrored impostor?
Every SpatialBench suite emits the same pack format (items, images, conventions, ground truth) and runs on the same open harness, benchkit, in Bun/npm or Python. The harness is part of the measurement:
bunx benchkit --pack packs/cube-pilot \ --models your-org/your-model \ --leaderboard # or python python run_eval_or.py --pack packs/cube-pilot