Nodes/ComfyUI libigl/Reconstruct Alpha Shape (backend)
ComfyUI Node

Reconstruct Alpha Shape (backend)

Alpha-shape reconstruction — the dial that trades tight fit against holes

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Reconstruct Alpha Shape (backend)
  • points
  • reconstructed_mesh
  • info
alpha0.00

Alpha-shape reconstruction is the one with the single meaningful knob. Where Poisson smooths everything and ball pivoting rolls a ball, alpha shapes take a different route: build the full Delaunay tetrahedralization of your points, then keep only the tetrahedra small enough to fit inside a ball of radius alpha. The surface is whatever's left on the outside. One parameter controls how much shape you keep - crank it up and you get a chunky, filled approximation; turn it down and it hugs the points tight, possibly full of holes.

It's the alpha_shape backend spawned by Reconstruct Surface. The node is dev-only, so you'll normally pick it from the frontend's dropdown - same parameters, same result.

How it works

The pack uses scipy's Delaunay on your vertices, then keeps each tetrahedron whose longest edge is under 2 * alpha. Faces that belong to only one surviving tetrahedron become the boundary surface. There's a satisfyingly concrete way to think about it: at large alpha the whole Delaunay soup survives and you get something close to the convex hull; at small alpha only tight tetrahedra survive and the surface hugs every concavity. There's no normals step at all, which is a real practical plus - if your point cloud is a mess with garbage normals, alpha shape just doesn't care.

Inputs and outputs

  • points (TRIMESH) - the cloud.
  • alpha (default 0) - the only real parameter, in the same units as your coordinates. Default 0 = auto, computed as 10% of the bounding-box diagonal, which is a reasonable first pass for most clouds. Too small and you'll get the "Alpha value too small, no faces generated" error; too large and you lose concavities.

Outputs: reconstructed_mesh (TRIMESH) and info (STRING) reporting the alpha actually used and the counts. The info string is genuinely useful here because auto-alpha tells you the number it picked, which gives you a reference point for hand-tuning.

Installing

Standard GeometryPack install - ComfyUI Manager → GeometryPack, or:

cd ComfyUI/custom_nodes
git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git
cd ComfyUI-GeometryPack
pip install -r requirements.txt --upgrade
python install.py

Restart after. scipy is the dependency here; it ships inside the pack's isolated comfy-env environment, which install.py builds.

When to reach for it

Alpha shape sits between convex hull and the detail methods. It's the pick when you have a non-convex object - a chair, a figurine with undercuts - where ball pivoting leaves holes or Poisson smooths the character away, and you're OK with a surface that's exact-ish rather than watertight. The tuning is coarser than ball pivoting's, which is a feature when you don't want to fight a ball radius.

Troubleshooting

  • "Alpha value too small, no faces generated" - raise alpha. Auto uses 10% of the bounding-box diagonal, and that guess is optimistic on sparse clouds.
  • Looks like a potato - alpha too large; you're keeping oversized tetrahedra and filling concavities. Drop it.
  • Surface full of holes - alpha too small, or the cloud genuinely doesn't sample the shape. Tighten the cloud or raise alpha and accept the smoothing.
  • Stale-workflow validation errors are the pack-wide gotcha - if a saved graph with the frontend node throws, delete and re-add the node, then re-pick alpha_shape.
Categorygeompack/reconstruction

Inputs (2)

NameTypeDefaultDescription
pointsTRIMESH
alphaFLOAT0.000–100Radius threshold controlling which Delaunay tetrahedra are kept. Only tetrahedra with longest edge < 2*alpha are included. Larger = coarser shape with more fill, smaller = tighter fit with more holes. 0 = auto (10% of bounding box diagonal).

Outputs (2)

NameTypeDescription
reconstructed_meshTRIMESH
infoSTRING