Generate an articulated, simulation-ready 3D object from a single-view input.
SIGGRAPH Asia 2026 · Conditionally Accepted
Authors: Qingming Liu1,2, Xinyue Yao1, Shuyuan Zhang1, Yueci Deng1,2, Guiliang Liu1, Zhen Liu1,†, Kui Jia1,2
1The Chinese University of Hong Kong, Shenzhen 2DexForce Technology
†Corresponding author
Given a single image, PAct generates an articulated 3D object by predicting a part-decomposed structure, synthesizing high-fidelity part geometry and appearance, and estimating articulation parameters for physics-based simulation.
This repository currently focuses on inference with the PActPipeline, while the full training stack is being cleaned up for release. This README walks through environment setup, running inference, tuning parameters, and our roadmap for opening the remaining pieces.
| Stage | Deliverable | Target Date | Notes |
|---|---|---|---|
| Inference Release | Cleaned infer_imgs.py, pretrained checkpoints, sample configs. |
2026-02-07 | ✅ available now. |
| Dataset Preprocessing | Detailed docs + scripts for preparing datasets + mask labeling (VLM+SAM). | 2026-08-20 | In progress. |
| Training Stage 1 | Sparse-structure (SS-Flow) training scripts + configs. | 2026-08-20 | In progress. |
| Training Stage 2 | SLAT articulation training pipeline + evaluation metrics. | 2026-08-20 | In progress. |
Dates reflect our best-effort plan; we will update this table and tag releases in the repo as milestones land.
- Clone
git clone https://github.com/PAct-project/PAct.git cd PAct - Conda environment (recommended, we follow the TRELLIS and OmniPart repo)
conda env create -f PAct_env.yml conda activate PAct pip install git+https://github.com/facebookresearch/detectron2.git
python app.pyFor convenience, we provide a Hugging Face demo that also allows downloading exported URDFs. The exported URDF files can be interactively viewed in VS-Code with URDF Visualizer.
Call the batch inference script with your config and overrides:
python infer_imgs.py \
--data_dir assets/real_world_examples \
--outdir outputs/real_world \
--batch_size 2 \
--save_glb --export_arti_objects Results (videos, GLBs, Gaussian splats, logs) are written under the --outdir folder in subdirectories named with your sampling configuration and random seed. Generation process of an object typically takes ~15s, comparable to TRELLIS; exporting a mesh is optional, but the subsequent textured-mesh step can be significantly more time-consuming.
infer_imgs.py exposes every previously hard-coded hyperparameter as a CLI flag. Important options are summarized below (see infer_imgs.py for the full list):
| Flag | Purpose | Default |
|---|---|---|
--ss_steps, --slat_steps |
Sampler iterations for sparse structure / SLAT stages. | 25, 25 |
--ss_cfg_strength, --slat_cfg_strength |
Guidance strength for each sampler. | 7.0, 7.0 |
--explode_coords_ratio, --gaussian_explosion_scale |
Explosion used when visualizing voxels or Gaussians. | 0.5, 0.3 |
--render_num_frames, --render_radius, --render_fov, --render_bg_color |
Camera sweep + appearance of rendered videos. | 60, 2.3, 60, (1,1,1) |
--video_fps, --grid_size, --save_video_grid, --save_cond_vis_grid |
Control mosaic layout and playback speed when saving videos/images. | 20, 4, enabled |
--save_glb, --save_gs, --export_arti_objects |
Toggle mesh/splat export to SINGAPO/URDF formats. | disabled |
--mesh_simplify_ratio, --texture_size, --textured_mesh |
Mesh post-processing knobs when --save_glb is set. |
0.95, 1024, enabled |
Every argument can also be specified inside the JSON config; CLI values take precedence.
Each inference batch produces:
grid_vids_samples_videos_*: Articulation and exploded-part video mosaics.grids_cond_vis_*: Conditioning image grids.*_arti_animation*.mp4,*exploded_part*.mp4/png: Per-object renders when mosaics are disabled.run_command.txt: Command provenance for reproducibility.exported_arti_objects: Optional GLB/Gaussian assets and articulation info if the corresponding flags are enabled.
Use the helper script to convert every object.json in an exported inference run into URDF files ( must set --export_arti_objects in Sec. 4.1):
python scripts/batch_json_to_urdf.py \
--exported_art_objs_dir outputs/<run_name>/exported_arti_objectsEach generated URDF is placed next to its source metadata as <object_name>_fromJson2urdf.urdf.
TBD
TBD
If you build upon this work, please cite the PAct paper:
@article{liu2026pact,
title = {PAct: Part-Decomposed Single-View Articulated Object Generation},
author = {Liu, Qingming and Yao, Xinyue and Zhang, Shuyuan and Deng, Yueci and Liu, Guiliang and Liu, Zhen and Jia, Kui},
journal = {arXiv preprint arXiv:2602.14965},
year = {2026}
}And we sincerely thank the authors of TRELLIS and OmniPart, whose codes were used in our work.
@article{xiang2024structured,
title = {Structured 3D Latents for Scalable and Versatile 3D Generation},
author = {Xiang, Jianfeng and Lv, Zelong and Xu, Sicheng and Deng, Yu and Wang, Ruicheng and Zhang, Bowen and Chen, Dong and Tong, Xin and Yang, Jiaolong},
journal = {arXiv preprint arXiv:2412.01506},
year = {2024}
}.
@article{yang2025omnipart,
title={Omnipart: Part-aware 3d generation with semantic decoupling and structural cohesion},
author={Yang, Yunhan and Zhou, Yufan and Guo, Yuan-Chen and Zou, Zi-Xin and Huang, Yukun and Liu, Ying-Tian and Xu, Hao and Liang, Ding and Cao, Yan-Pei and Liu, Xihui},
journal={arXiv preprint arXiv:2507.06165},
year={2025}
}