This repo is for SpatialAct: Probing Spatial Reasoning-to-Action Capabilities of VLM Agents in 3D Scenes
Humans can effortlessly perceive spatial layouts, form cognitive representations, reason about spatial relations, and translate such reasoning into actions in everyday 3D environments. Although recent vision-language models (VLMs) have shown promising performance on observation-conditioned spatial perception and reasoning tasks, it remains unclear whether they can build coherent spatial understanding, act upon it, and refine their actions through multi-turn feedback. To study this problem, we introduce
SpatialAct/
├── data/
│ ├── architectural/
│ ├── geometry/
│ └── indoor/
├── data_construct/
│ ├── single_step/
│ ├── spatial_relation/
│ ├── spatial_orientation/
│ ├── spatial_visualization/
│ ├── mental_rotation/
│ ├── multi-turn/
│ └── object_meaning/
├── evaluate/
│ ├── single_turn/
│ └── multi-turn/
└── README.md
Main task files include:
spatial_relation.jsonspatial_orientation.jsonspatial_visualization.jsonmental_rotation.jsonsingle_step.json(Single-step Error Detection and Fix)multi_turn.json(Multi-turn Interactive Refinement)object_meaning.json(only indata/indoor/)
👉 All data files, including the scene source files and corresponding images, are hosted on the https://huggingface.co/datasets/Tianhui-Liu/SpatialAct.
data_construct/ contains scripts for building data by task type:
- single-step tasks:
data_construct/single_step/ - spatial relation:
data_construct/spatial_relation/ - spatial orientation:
data_construct/spatial_orientation/ - spatial visualization:
data_construct/spatial_visualization/ - mental rotation:
data_construct/mental_rotation/ - multi-turn tasks:
data_construct/multi-turn/ - object meaning (indoor):
data_construct/object_meaning/
Naming conventions commonly used in scripts:
indoor_*: indoor-domain pipelineregion_*: architectural-domain pipeline- generic names: geometry pipeline
Main script: evaluate/single_turn/eval.py
Metrics script: evaluate/single_turn/metrics.py
Example:
python evaluate/single_turn/eval.py \
--mode indoor \
--task spatial_relation \
--model-name gpt-5.4Main scripts:
evaluate/multi-turn/mllm_iteration_standalone.pyevaluate/multi-turn/final_only_metrics_runner.pyevaluate/multi-turn/metrics.pyevaluate/multi-turn/indoor_metrics.pyevaluate/multi-turn/blender_iter_renderer.py
Multi-turn evaluation involves iterative scene rendering and final metric computation, and typically requires Blender and corresponding scene assets.
Example (indoor):
LLM_MODEL=gpt-5.4 \
SCENE_TYPE=indoor \
bash evaluate/multi-turn/run_iteration_common.shFrequently used environment variables:
LLM_MODEL: model nameSCENE_TYPE:indoorMAX_ITERATIONS: max multi-turn correction roundsREGION_WORKERS,BLENDER_WORKERS,METRICS_WORKERS: parallelism controlsSAMPLED_METADATA_JSON: optional explicit sampled metadata file override
If you find this work helpful, please cite our paper.
@article{liu2026spatialact,
title={SpatialAct: Probing Spatial Reasoning-to-Action Capabilities of VLM Agents in 3D Scenes},
author={Liu, Tianhui and Feng, Jie and Zheng, Zhiheng and Wang, Shengyuan and Guo, Yiming and Xi, Yanxin and Fan, Hangyu and Li, Yong and Hui, Pan},
journal={arXiv preprint arXiv:2605.31148},
year={2026}
}If you have any questions or want to use the code, feel free to contact Tianhui Liu (tianhuiliu06@gmail.com).