PointCloudUnion
Concatenate two point clouds without ceremony
- pointcloud1
- pointcloud2
- merged pointcloud
Point clouds in camera-comfyUI are plain TENSORs of shape N×7 - x y z plus RGB (and alpha). PointCloudUnion is the node that takes two of them and sticks them together into one bigger cloud. It's a straight torch.cat down the point axis, nothing smarter, and that's exactly right for the job it's usually doing.
The job, in practice, is "I've enriched a base cloud with new geometry and now I need the base back." The pack's point-cloud outpainting pipeline (pointcloud_inpaint.json) projects a view, Flux-inpaints the holes, lifts the filled region to 3D, transforms it into world space - and then has a perfectly good starting cloud it wants to combine with the new points. That's the moment PointCloudUnion exists for. It's the point-cloud sibling of MergeSplats; both are dumb concatenation, and both are the right tool whenever the two inputs cover different territory and you don't want overlap-processing side effects.
How it works
Takes pointcloud1 and pointcloud2, concatenates them along the first dimension, returns the combined cloud. Both inputs need to be the same width (N×7 matching is expected; it won't validate your columns for you), and it doesn't deduplicate anything - if a region appears in both clouds you'll get double points there. Deal with that downstream with PointCloudCleaner or ProjectAndClean, or by making sure your enrichment step only outputs fresh points. Its single output is named, with characteristic understatement, "merged pointcloud" - it's a TENSOR like the inputs, so it feeds straight into ProjectPointCloud, SavePointCloud, or a trajectory enricher.
The inputs
- pointcloud1 / pointcloud2 - the two
N×7tensors. Concatenation order is the only thing that varies; it has no visible effect on rendering.
That's it. There's no device knob, no format option - the node runs on whatever device the tensors already live on. If you're worried about memory, be aware that this is a physical concatenation: both clouds are held in memory at once, so fusing a giant enriched cloud onto a giant base can spike RAM. ProjectAndClean and PointCloudCleaner both reallocate too, so on a tight box it's worth thinking about when you merge versus render.
Installing it
It's part of the camera-comfyUI pack, so install the pack once and every node in it comes along. Easiest: ComfyUI Manager → Custom Nodes Manager → search camera-comfyUI → Install → restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Alexankharin/camera-comfyUI.git
cd camera-comfyUI && python install.py
PointCloudUnion needs none of the pack's optional heavy dependencies (no gsplat, no SHARP, no Flux inpainting), so it's usable immediately after the pack loads.
Common issues
- Shape mismatch errors - the two clouds must be the same tensor width. A cloud that lost its alpha column somewhere upstream will fail; check your sources are all
N×7. - Doubled-up points where clouds overlap - expected behavior, not a bug. If the seam is ugly after rendering, run
PointCloudCleanerover the union, orProjectAndCleanfrom a camera where the overlap is visible.
Simple node, simple job, no surprises. Occasionally that's exactly what a workflow needs.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| pointcloud1 | TENSOR | — | |
| pointcloud2 | TENSOR | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| merged pointcloud | TENSOR | — |