Project Page | Arxiv | Models | Demo
This is the official implementation of PartPacker: Efficient Part-level 3D Object Generation via Dual Volume Packing.
Our model performs part-level 3D object generation from single-view images.
We rely on torch with CUDA installed correctly (tested with torch 2.5.1 + CUDA 12.1).
pip install -r requirements.txt
# if you prefer fixed version of dependencies:
pip install -r requirements.lock.txt
# by default we use torch's built-in attention, if you want to explicitly use flash-attn:
pip install flash-attn --no-build-isolation
# if you want to run data processing and vae inference, please install meshiki:
pip install meshikiDownload the pretrained models from huggingface, and put them in the pretrained folder.
mkdir pretrained
cd pretrained
wget https://huggingface.co/nvidia/PartPacker/resolve/main/vae.pt
wget https://huggingface.co/nvidia/PartPacker/resolve/main/flow.ptFor inference, it takes ~10GB GPU memory (assuming float16).
# vae reconstruction of meshes
PYTHONPATH=. python vae/scripts/infer.py --ckpt_path pretrained/vae.pt --input assets/meshes/ --output_dir output/
# flow 3D generation from images
PYTHONPATH=. python flow/scripts/infer.py --ckpt_path pretrained/flow.pt --input assets/images/ --output_dir output/
# open local gradio app (single GPU)
python app.py
# open local gradio app with multi-GPU support
python app.py --multiThe application supports multi-GPU inference for those who are lack of GPU memory.
- Single GPU mode (default):
python app.py - Multi-GPU mode:
python app.py --multi
In multi-GPU mode:
- The flow model is placed on GPU 0
- The VAE model is placed on GPU 1 (if available)
- Automatic memory management and data transfer between GPUs
- Reduced memory pressure per GPU
- Better performance with 2 or more GPUs
If only one GPU is available, the system automatically falls back to single-GPU behavior even in multi-GPU mode.
We provide a Dual Volume Packing implementation to process raw glb meshes into two separate meshes as proposed in the paper.
cd data
python bipartite_contraction.py ./example_mesh.glb
# the two separate meshes will be saved in ./outputThis work is built on many amazing research works and open-source projects, thanks a lot to all the authors for sharing!
@article{tang2024partpacker,
title={Efficient Part-level 3D Object Generation via Dual Volume Packing},
author={Tang, Jiaxiang and Lu, Ruijie and Li, Zhaoshuo and Hao, Zekun and Li, Xuan and Wei, Fangyin and Song, Shuran and Zeng, Gang and Liu, Ming-Yu and Lin, Tsung-Yi},
journal={arXiv preprint arXiv:2506.09980},
year={2025}
}
