Unique3DRun - Geo Reconstruct
Where the 2D Image Becomes a Textured Mesh (and Where the VRAM Goes)
- images
- rgb_pils
- front_pil
- pipe
- images
- mesh_path
Unique3DRun - Geo Reconstruct is the payoff node of this pack - the one that takes the four multiview images from Unique3DRun - MVPrediction, turns them into an actual textured 3D mesh, and writes a .glb you can drag into Blender or a viewer. It's also where the pipeline earns its reputation for being heavy. Everything before this was cheap; this one hammers your GPU for minutes and your VRAM for gigabytes.
How it works
A lot happens between the views and the mesh file, and it's worth knowing roughly what so you understand the toggle that's confusing you:
- Optional refine. If
do_refineis on, the four views are reassembled into a grid and pushed back through SD1.5 img2img - the pipe fromUnique3DLoadPipeline- with the tile ControlNet and IP-Adapter holding it to the source, strength 0.2, at 1024px. Slower, noticeably better texture coherence. - Upscale. The views get the bundled Real-ESRGAN treatment.
- Normals. Unless you say otherwise, a dedicated image2normal model estimates normal maps from each view (guidance 1.5). Normals are what drive the geometry - depth estimation's cousin, encoding surface direction instead of distance.
- Geometry. The initial shape comes from projecting the front/back normal maps into a mesh (
std,thin) or from a sphere (ball), then a 200-step reconstruction pass optimizes it into a watertight-ish mesh, followed by 100 steps of refinement and a Meshlab cleanup (smoothing, repair, subdivision). - Texturing. The cleaned views get projected onto the mesh at 1024px, saved as
ComfyUI/output/Unique3D/generated_<timestamp>.glb.
The inputs that matter
do_refine- the big quality lever.Truegives you the refine pass above and needs thepipeinput wired (plus theUnique3DLoadPipelinefirst-run downloads).Falseis faster and works with a bare pipe. For a first mesh, leave it off; turn it on when you want the texture quality.predict_normal- leave thisTrue. The node doesn't give you a normal-map input at all (it passesNonefor the normals to the reconstruction code), so flipping it toFalsemakes the node try to iterate over thatNoneand blow up. It's effectively a forced-on option.init_type- the initial geometry shape:std(the default front/back projection),thin(same but flatter), orball(start from a sphere and deform).ballis more robust for shapes that need full 360° coverage - characters, sculptures - at the cost of a longer, more expensive reconstruction.render_video- here's a trap: in this archived build, the saver returnsNonefor the video no matter what and only ever writes the.glb. The toggle does nothing today; don't build a workflow around an output mp4.
Also on the input side: images and the two from the MVPrediction node (rgb_pils, front_pil) plus the pipe. Yes, images is also an output - the node passes it through untouched.
Outputs
images(IMAGE) - a passthrough of your input image; wire it toPreviewImagefor visual confirmation.mesh_path(STRING) - the path to the saved.glb. The example workflow feeds this into ComfyUI-3D-Pack's[Comfy3D] Previewnode for a live viewer; you can also just grab the file fromComfyUI/output/Unique3D/.
Installing the pack
Same install as the rest of the pack, and this node is why it's heavy: pytorch3d, pymeshlab, rembg, onnxruntime-gpu, triton, and a pinned diffusers==0.27.2. On the ComfyUI Windows portable build:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyUI-Unique3D.git
Then drop the Python-3.11 triton wheel (from madbuda/triton-windows-builds) into the pack folder and run install_windows_portable_win_py311_cu121.bat, answering Y to the removal prompts. Weights go into ckpt/ per the README layout - this node needs image2normal/ and img2mvimg/, plus the ControlNet-tile folder if you use do_refine. The README also wants ComfyUI-3D-Pack installed first for the mesh preview.
Troubleshooting
pytorch3dDLL error on Windows:pip uninstall pytorch3d, then reinstall fromgit+https://github.com/facebookresearch/pytorch3d.git@stable.torch_scatterentry-point error:pip uninstall torch_scatterthen reinstall.- Long, heavy runs: 200 + 100 optimization steps, no slider to reduce them. Budget a few minutes per mesh on a decent card, more on 8GB - if you hit OOM, drop
do_refineandballbefore upgrading hardware. - Details look eaten: the community's main complaint about Unique3D - the point-cloud-to-geometry step smooths away small details the views clearly contain. That's the algorithm, not a setting you missed.
The repo is archived and the author points everyone at ComfyUI-3D-Pack's own Unique3D implementation - the sensible route if you're starting fresh. But if this is installed and you have a good GPU, this node is still the fastest way to a decent textured mesh from a single image in ComfyUI.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| rgb_pils | PILS | — | |
| front_pil | PIL | — | |
| pipe | Unique3DPipeline | — | |
| do_refine | COMBO | 2 options: true, false | |
| render_video | COMBO | 2 options: true, false | |
| predict_normal | COMBO | 2 options: true, false | |
| init_type | COMBO | 3 options: std, thin, ball |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| mesh_path | STRING | — |