Nodes/ComfyUI libigl/Reconstruct Poisson (backend)
ComfyUI Node

Reconstruct Poisson (backend)

The watertight one — Poisson reconstruction that turns noisy points into a printable surface

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Reconstruct Poisson (backend)
  • points
  • reconstructed_mesh
  • info
poisson_depth8
poisson_scale1.1
estimate_normalstrue
normal_radius0.10

Poisson reconstruction is the heavy lifter of the surface-reconstruction family, and this is the GeometryPack backend that runs it. Feed it a point cloud and you get back a smooth, watertight mesh - no holes, no gaps, one closed surface. That's exactly what you want when the mesh is heading to a 3D printer or into a boolean or remesh step that assumes a clean volume. It's the reconstruction method the pack's release post and user threads keep coming back to, because "watertight" is the word that saves the most people.

You normally reach it through Reconstruct Surface (the frontend node) by picking poisson in the backend dropdown - this (backend) node is the hidden worker it spawns, and it's marked dev-only in the schema. If you found it in a workflow or the node list, it still runs standalone; you're just skipping the dropdown.

How it works

Screened Poisson reconstruction treats the points as samples of an implicit surface - it solves for a field that's positive inside the object and negative outside, then extracts the zero-crossing as a mesh. In practice the pack tries Open3D first (fits a Poisson octree, removes the lowest-density 1% of vertices to kill noise), and falls back to PyMeshLab's screened Poisson if Open3D isn't installed. Because Poisson needs oriented normals - a direction on every point - the node estimates and consistently orients them when you don't supply any, using Open3D or point-cloud-utils under the hood.

Inputs and outputs that matter

  • points (TRIMESH) - the cloud. Same caveat as the frontend: vertices are what count.
  • poisson_depth (default 8) - octree depth. This is the knob you'll actually touch. 6 is coarse, 8 is the balanced default, 10+ grabs fine detail at exponentially more memory and time. Don't casually go above 9 on a big cloud.
  • poisson_scale (default 1.1) - padding around the bounding box to avoid boundary artifacts. The default is fine; leave it.
  • estimate_normals (default true) - re-estimate normals from the points. Keep it on unless your input already carries good oriented normals.
  • normal_radius (default 0.1) - search radius for that normal estimation; aim for 2–3× the average point spacing. Only used when estimate_normals is true.

Outputs are reconstructed_mesh (TRIMESH) and info (STRING). The info string is worth a glance - it reports the engine that actually ran, output counts, and a Watertight: True/False line.

Installing

Same pack install for all GeometryPack nodes: ComfyUI Manager → search 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

then restart. The install.py step is the comfy-env/pixi one-click installer that builds the isolated environments the backends run in - Poisson's Open3D/PyMeshLab lives there, not in your main Python.

Troubleshooting

  • "Poisson reconstruction requires Open3D or PyMeshLab" - the isolated env didn't build. Re-run python install.py and check the Discussion tab on the repo; this is the pack's most common install failure point.
  • Surface looks inflated or blobby - depth too high for the point density, or the cloud is too noisy. Lower depth, clean the cloud first.
  • Holes where they shouldn't be - that's usually a normals problem, not a Poisson problem. Make sure estimate_normals is true on noisy imports; misoriented normals push the solver to carve the surface.
  • If a saved workflow with this node throws validation errors, it's the stale-DynamicCombo issue: delete and re-add the frontend node, re-pick poisson.
Categorygeompack/reconstruction

Inputs (5)

NameTypeDefaultDescription
pointsTRIMESH
poisson_depthINT81–12Octree depth for the Poisson solver. Higher values capture finer detail but use exponentially more memory and time. 6=coarse, 8=balanced, 10+=high detail.
poisson_scaleFLOAT1.11–2Scale factor for the reconstruction grid relative to the bounding box. Values >1.0 add padding to avoid boundary artifacts. 1.1 is usually sufficient.
estimate_normalsCOMBOtrueRe-estimate point normals using k-nearest neighbors. Poisson reconstruction requires oriented normals — enable this if the input has no normals or unreliable normals.
normal_radiusFLOAT0.100.001–10Search radius for normal estimation via k-nearest neighbors. Should be 2-3x the average point spacing. Only used when estimate_normals is true.

Outputs (2)

NameTypeDescription
reconstructed_meshTRIMESH
infoSTRING