ComfyUI-UltraShape1
A ComfyUI extension with 10 custom nodes.
Nodes (10)
Preview your refined mesh without writing a file
Point this at your coarse mesh — and mind the path rules
Feed UltraShape a mesh that's already in memory
The plain loader that turns a mesh file into a TRIMESH socket
Where the UltraShape weights live
The upload button ComfyUI forgot for .glb files
The bridge that keeps your refined mesh in the graph
50 diffusion steps of image-guided geometry
Where your refined mesh lands on disk
Save any TRIMESH — including your refined one
ComfyUI-UltraShape1
A ComfyUI plugin based on UltraShape 1.0 for image-guided 3D mesh refinement.
Features
- Mesh Refinement: Refine coarse 3D meshes using image guidance
- High-Quality Output: Generate detailed meshes with sharp edges
- Multiple Export Formats: Export to GLB, OBJ, PLY, STL formats
- Flexible Input: Load meshes via file upload, path string, or output from other nodes
- Configurable Resolution: Adjust output resolution based on available VRAM
- Low VRAM Mode: Offload model components to CPU when not in use
- Chunk Processing: Reduce memory usage during refinement with configurable chunk size
Installation
1. Install Dependencies
cd ComfyUI/custom_nodes/ComfyUI-UltraShape1
pip install -r requirements.txt
2. Download Model Weights
Place model weights in ComfyUI's models directory:
ComfyUI/
└── models/
└── UltraShape/
└── ultrashape_v1.pt
Download from the HuggingFace https://huggingface.co/infinith/UltraShape/tree/main.
3. Prepare Input Files
Place coarse meshes in ComfyUI's input directory:
ComfyUI/
└── input/
└── your_coarse_mesh.glb # or .obj, .ply, .stl
Node Documentation
UltraShape Load Model
Load UltraShape refinement model (VAE + DiT + Conditioner).
| Parameter | Description |
|-----------|-------------|
| checkpoint | Select checkpoint file from models/UltraShape/ |
| config | Config file (default: infer_dit_refine.yaml) |
| dtype | Model precision: float16 / bfloat16 / float32 |
| low_vram | Enable low VRAM mode - offload model components to CPU when not in use |
UltraShape Mesh Selector
File upload widget for selecting mesh files.
| Parameter | Description | |-----------|-------------| | mesh | File upload widget - click to upload mesh file |
Supported formats: GLB, GLTF, OBJ, PLY, STL
UltraShape Load Coarse Mesh
Load and preprocess coarse mesh for refinement.
| Parameter | Description | |-----------|-------------| | model | Model from Load Model node | | mesh_path | Path to mesh file (supports multiple formats - see below) | | normalize_scale | Mesh normalization scale (default: 0.99) | | num_sharp_points | Number of sharp edge sample points | | num_uniform_points | Number of uniform sample points | | num_latents | Number of latent tokens (default: 768, higher = more detail) |
Mesh Path Formats:
- Absolute path:
C:\path\to\mesh.glbor/path/to/mesh.glb - Relative to input:
input/mesh.glbor justmesh.glb(auto-searches in input folder) - Relative to output:
output/mesh.glb - From UltraShape Mesh Selector: Connect the output directly
UltraShape Refine
Core refinement node - refine coarse mesh using image guidance.
| Parameter | Description | |-----------|-------------| | model | Model from Load Model node | | coarse_mesh | Mesh from Load Coarse Mesh node | | image | Reference image (IMAGE type) | | steps | Diffusion steps (default: 50) | | guidance_scale | Image guidance scale (default: 5.0) | | octree_resolution | Output mesh resolution (default: 384) | | mc_level | Marching cubes level (default: 0.0) | | box_v | Bounding box scale (default: 1.0) | | seed | Random seed | | remove_bg | Remove image background before processing | | num_chunks | Number of chunks for processing (default: 1, higher = less VRAM) |
VRAM Optimization Tips:
- Increase
num_chunksto reduce VRAM usage during refinement - Enable
low_vramin Load Model node - Reduce
octree_resolution
VRAM Estimates for octree_resolution:
| Resolution | Approx. VRAM |
|------------|--------------|
| 384 | ~8GB |
| 512 | ~16GB |
| 768 | ~32GB |
| 1024 | ~48GB+ |
UltraShape Save GLB/OBJ
Save refined mesh to file.
| Parameter | Description |
|-----------|-------------|
| refined_mesh | Mesh from Refine node |
| output_dir | Output subdirectory (default: ultrashape_output) |
| filename_prefix | Output filename prefix |
| file_format | Export format: glb / obj / ply / stl |
Example Workflows
Basic Workflow
[Load Image] ──────────────────────────────────────────────────────────┐
│
[UltraShape Load Model] ──┬──> [UltraShape Load Coarse Mesh] ──────────┴──> [UltraShape Refine] ──> [UltraShape Save GLB/OBJ]
│ ↑
│ [UltraShape Mesh Selector] (file upload)
With File Upload
[UltraShape Mesh Selector] ──> mesh_path ──> [UltraShape Load Coarse Mesh]
Low VRAM Workflow
- Enable
low_vramin UltraShape Load Model - Set
num_chunksto 2-4 in UltraShape Refine - Reduce
octree_resolutionto 384 or lower
Notes
-
VRAM Requirements:
- Model loading: ~8-12GB VRAM (less with low_vram mode)
- Refinement (octree_resolution=384): ~8GB additional
- Refinement (octree_resolution=512): ~16GB additional
- Total recommended: 16GB+ for default settings, 32GB+ for high resolution
-
Input Requirements:
- UltraShape is a refinement model, not a generation model
- You need to provide a coarse mesh (from other 3D generation tools like Hunyuan3D, InstantMesh, etc.)
- Reference image should match the desired output appearance
-
Optional Dependencies:
cubvh: CUDA-accelerated marching cubes (falls back to skimage if not installed)flash_attn: Flash Attention (falls back to PyTorch SDPA if not installed)pymeshlab: Mesh post-processing (optional features disabled if not installed)
-
Supported Mesh Formats:
- Input: GLB, GLTF, OBJ, PLY, STL
- Output: GLB, OBJ, PLY, STL
Troubleshooting
Out of Memory (OOM)
- Enable
low_vramin Load Model node - Increase
num_chunksin Refine node (try 2-4) - Reduce
octree_resolution(try 384 or 256) - Use
bfloat16orfloat16dtype - Close other GPU applications
Tensor Size Mismatch
- This can happen with very simple meshes
- The plugin automatically pads voxels to match expected size
Missing Dependencies
cubvh: Optional, will use slower CPU marching cubesflash_attn: Optional, will use PyTorch SDPApymeshlab: Optional, mesh post-processing will be skipped
Mesh File Not Found
- Check the path format (absolute or relative to input/output folder)
- Ensure the file exists and has a supported extension
- Try using UltraShape Mesh Selector for file upload
License
Please refer to the UltraShape 1.0 original project license.