Subsample Point Cloud
Put your point cloud on a diet before it eats your RAM
- point_cloud
- point_cloud
Big point clouds are the enemy of fast workflows. A lidar scan or dense photogrammetry cloud can run into the tens of millions of points, which turns every downstream operation - registration, normal estimation, surface reconstruction - into a waiting game. Subsample Point Cloud thins the cloud down to a target count before it becomes a bottleneck. It's one of those boring utility nodes you'll quietly be grateful for on your tenth scan.
One quirk up front: the input type is TRIMESH. This pack stores point clouds as meshes with no faces, so a point cloud is a TRIMESH to these nodes - don't go hunting for a dedicated point-cloud input that doesn't exist.
How it works
Three strategies, each with a personality:
- random (default) - just picks points at random until it hits the target count. Instant, zero thinking, but it can leave density gaps where the original was sparse and cluster where it was dense. Fine for quick experiments.
- uniform_grid - voxelizes the space and keeps points that land in each voxel. This is the one that actually respects geometry: you get a roughly uniform spacing across the cloud regardless of how it was captured. Great when you want even coverage.
- farthest_point - greedily picks points that are farthest from the ones already chosen, maximizing coverage. Best quality, worst scaling - the tooltip warns it's slow for large clouds, and it means it. Use it for small-to-medium clouds where coverage quality matters.
The inputs:
point_cloud- the input (TRIMESH representation of your cloud).method- one of the three above.target_count(default 100000, 100–10,000,000) - how many points to keep. For surface reconstruction, 50k–200k is usually plenty for a small object; dial by trial.seed(default 42, optional) - reproducibility for the random method. Set it and you get the same subsample every run, which matters if you're comparing pipelines.
Outputs
A single point_cloud output (TRIMESH) - note this node is not an output node, so it's built to feed forward into more processing: normal estimation, registration, or the pack's reconstruction nodes. Wire the result into whatever comes next.
When to use it
Put this early in any pipeline that starts with a raw, oversized scan. There's a real cost/benefit: subsample too aggressively and reconstruction loses fine detail; barely at all and you've saved nothing. uniform_grid with a target count a fraction of the original is the boring, correct default for most people. If your downstream is registration or matching, farthest_point on a smaller count often gives you more stable features per point kept.
Install: ComfyUI Manager search "GeometryPack", or clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack into custom_nodes/ and run pip install -r requirements.txt --upgrade + python install.py, then restart. The experimental comfy-env/pixi installer makes first run slow - expected, not broken.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| point_cloud | TRIMESH | — | |
| method | COMBO | random | random: fast random selection. uniform_grid: voxel-based uniform spacing. farthest_point: maximize coverage (slow for large clouds). |
| target_count | INT | 100000100–10000000 | Target number of points to keep |
| seedopt | INT | 420–2147483647 | Random seed for reproducible results (random method only) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| point_cloud | TRIMESH | — |