Nodes/ComfyUI-Unique3D/Unique3DRun - Geo Reconstruct
ComfyUI Node

Unique3DRun - Geo Reconstruct

Where the 2D Image Becomes a Textured Mesh (and Where the VRAM Goes)

By jtydhr88·Created 2 years ago·Updated 2 years ago· 226
Unique3DRun - Geo Reconstruct
  • images
  • rgb_pils
  • front_pil
  • pipe
  • images
  • mesh_path
do_refine
render_video
predict_normal
init_type

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:

  1. Optional refine. If do_refine is on, the four views are reassembled into a grid and pushed back through SD1.5 img2img - the pipe from Unique3DLoadPipeline - with the tile ControlNet and IP-Adapter holding it to the source, strength 0.2, at 1024px. Slower, noticeably better texture coherence.
  2. Upscale. The views get the bundled Real-ESRGAN treatment.
  3. 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.
  4. 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).
  5. 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. True gives you the refine pass above and needs the pipe input wired (plus the Unique3DLoadPipeline first-run downloads). False is 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 this True. The node doesn't give you a normal-map input at all (it passes None for the normals to the reconstruction code), so flipping it to False makes the node try to iterate over that None and 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), or ball (start from a sphere and deform). ball is 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 returns None for 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 to PreviewImage for visual confirmation.
  • mesh_path (STRING) - the path to the saved .glb. The example workflow feeds this into ComfyUI-3D-Pack's [Comfy3D] Preview node for a live viewer; you can also just grab the file from ComfyUI/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

  • pytorch3d DLL error on Windows: pip uninstall pytorch3d, then reinstall from git+https://github.com/facebookresearch/pytorch3d.git@stable.
  • torch_scatter entry-point error: pip uninstall torch_scatter then 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_refine and ball before 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.

CategoryUnique3D

Inputs (8)

NameTypeDefaultDescription
imagesIMAGE
rgb_pilsPILS
front_pilPIL
pipeUnique3DPipeline
do_refineCOMBO2 options: true, false
render_videoCOMBO2 options: true, false
predict_normalCOMBO2 options: true, false
init_typeCOMBO3 options: std, thin, ball

Outputs (2)

NameTypeDescription
imagesIMAGE
mesh_pathSTRING