Skip to content
View PrimitiveAnything's full-sized avatar

Block or report PrimitiveAnything

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
PrimitiveAnything/README.md

PrimitiveAnything: Human-Crafted 3D Primitive Assembly Generation with Auto-Regressive Transformer

Jingwen Ye1*, Yuze He1,2*, Yanning Zhou1†, Yiqin Zhu1, Kaiwen Xiao1, Yong-Jin Liu2†, Wei Yang1, Xiao Han1†

1Tencent AIPD   2Tsinghua University

*Equal Contributions   Corresponding Authors

🔥 Updates

[2025/05/07] test dataset, code, pretrained checkpoints and Gradio demo are released!

🔍 Table of Contents

⚙️ Deployment

Set up a Python environment and install the required packages:

conda create -n primitiveanything python=3.9 -y
conda activate primitiveanything

# Install torch, torchvision based on your machine configuration
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118

# Install other dependencies
pip install -r requirements.txt

Then download data and pretrained weights:

  1. Our Model Weights: Download from our 🤗 Hugging Face repository (download here) and place them in ./ckpt/.

  2. Michelangelo’s Point Cloud Encoder: Download weights from Michelangelo’s Hugging Face repo and save them to ./ckpt/.

  3. Demo and test data:

    Download from this Google Drive link, then decompress the files into ./data/; or you can download from our 🤗 Hugging Face datasets library:

from huggingface_hub import hf_hub_download, list_repo_files

# Get list of all files in repo
files = list_repo_files(repo_id="hyz317/PrimitiveAnything", repo_type="dataset")

# Download each file
for file in files:
    file_path = hf_hub_download(
        repo_id="hyz317/PrimitiveAnything",
        filename=file,
        repo_type="dataset",
        local_dir='./data'
    )

After downloading and organizing the files, your project directory should look like this:

- data/
    ├── basic_shapes_norm/
    ├── basic_shapes_norm_pc10000/
    ├── demo_glb/                   # Demo files in GLB format
    └── test_pc/                    # Test point cloud data
- ckpt/
    ├── mesh-transformer.ckpt.60.pt # Our model checkpoint
    └── shapevae-256.ckpt           # Michelangelo ShapeVAE checkpoint

🖥️ Run PrimitiveAnything

Demo

python demo.py --input ./data/demo_glb --log_path ./results/demo

Notes:

  • --input accepts either:
    • Any standard 3D file (GLB, OBJ, etc.)
    • A directory containing multiple 3D files
  • For optimal results with fine structures, we automatically apply marching cubes and dilation operations (which differs from testing and evaluation). This prevents quality degradation in thin areas.

Testing and Evaluation

# Autoregressive generation
python infer.py

# Sample point clouds from predictions  
python sample.py

# Calculate evaluation metrics
python eval.py

📝 Citation

If you find our work useful, please kindly cite:

@article{ye2025primitiveanything,
  title={PrimitiveAnything: Human-Crafted 3D Primitive Assembly Generation with Auto-Regressive Transformer},
  author={Ye, Jingwen and He, Yuze and Zhou, Yanning and Zhu, Yiqin and Xiao, Kaiwen and Liu, Yong-Jin and Yang, Wei and Han, Xiao},
  journal={arXiv preprint arXiv:2505.04622},
  year={2025}
}

Popular repositories Loading

  1. PrimitiveAnything PrimitiveAnything Public

    [SIGGRAPH 2025] PrimitiveAnything: Human-Crafted 3D Primitive Assembly Generation with Auto-Regressive Transformer

    Python 379 16

  2. primitiveanything.github.io primitiveanything.github.io Public

    JavaScript