Ruihan Yu1,2*, Yu-Ju Tsai3,4*, Muyao Niu1,2, Runyi Li1,2, Lian Fu1,2, Hanqing Liu2, Zheng-Hui Huang1, Yonghao Yu1, Sho Kuno1,2, Ming-Hsuan Yang4†, Kaipeng Zhang1†, Zhixiang Wang1†
1Alaya Lab 2The University of Tokyo 3Institute of Science Tokyo 4University of California, Merced
*Equal contribution †Corresponding authors
- [2026-10-08] Data engine and the full dataset released (Hugging Face).
- [2026-10-01] Paper released on arXiv.
- [2026-09-29] Project page and trailer released.
- Project page
- Paper
- Data engine, rebuild and render script
- Edit chains on Hugging Face (states, recipes, parts, four-view renders, part masks)
457 edit chains, 2,755 edits and 3,212 states on 252 host objects, at huggingface.co/datasets/AlayaLab/EditHero:
huggingface-cli download AlayaLab/EditHero --repo-type dataset --local-dir EditHeroEvery chain comes with its instructions, the exact state after every turn (GLB), the recipe that rebuilds it, every part it uses, renders of every state from a fixed four-view rig (view 0 is the conditioning view, views 1-3 are held out) and 2D masks of the parts edited in each turn. See the dataset card for the layout and the licenses.
| Path | Contents |
|---|---|
part_assembly/ |
Data engine. chain_run.py builds chains (slot selection, retrieval, placement and contact checks); embed_*.py part retrieval; restyle_serve.py + tex_serve.py retexturing (Qwen-Image-Edit-2509 restyle, TRELLIS.2 texturing into a non-overlapping UV, kept regions carried over); blender_serve.py resident render worker |
part_assembly/tools/assemble.py |
Rebuilds every state of a chain from its recipe and the parts, and verifies it against checks.json |
part_assembly/uv_rebake/ |
Re-bake of retexture turns into non-overlapping UVs |
scripts/render_state.py |
Renders a state (or your own GLB) with a chain's fixed four-view rig, exactly like the renders in the dataset |
jobs/rebuild_all.sh |
Rebuilds and verifies every chain of the dataset |
Paths come from environment variables with defaults relative to this repository (part_assembly/local_paths.py):
PXFORM_BLENDER (Blender 4.2), PXFORM_RENDER_SCRIPT (blender_kit's scripts/render.py), PXFORM_LIBRARY_ROOT (part library
for building new chains), PXFORM_ENCODER_PYTHON (TRELLIS.2 environment).
bash jobs/rebuild_all.sh EditHero/data out/
# PASS A/1a3267df_s0 (verified vs checks.json) ...git clone https://github.com/AuroraRyan0301/Blender-Visualization-Skill third_party/blender_kit
python scripts/render_state.py --data EditHero/data --chain A/1a3267df_s0 --turn 1 --out out/A_1a3267df_s0_turn01
# out/.../f0000.png (cond view), f0001-f0003.png (held-out views); pass --glb your_result.glb to render your own editAll renders in EditHero are made with blender_kit, a small Blender/Cycles toolkit for checking generation and reconstruction results by eye. If it saves you an afternoon of arguing with Blender, a ⭐ on it would make its author's day.
Code: MIT (LICENSE); third-party components: THIRD_PARTY_LICENSES.md. Data: see the dataset card (our annotations CC BY 4.0;
meshes, textures and renders keep the license of their source objects).
@misc{yu2026editherobenchmarklonghorizonpartlevel,
title={EditHero: A Benchmark for Long-Horizon Part-Level 3D Editing and Vibe Modeling},
author={Ruihan Yu and Yu-Ju Tsai and Muyao Niu and Runyi Li and Lian Fu and Hanqing Liu and Zheng-Hui Huang and Yonghao Yu and Sho Kuno and Ming-Hsuan Yang and Kaipeng Zhang and Zhixiang Wang},
year={2026},
eprint={2610.02298},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2610.02298},
}