ply_normalize
The node that turns industrial point clouds into splattable data
- gs_ply
- gs_ply
If you've tried to push a raw point cloud from CloudCompare or an industrial scanner into a Gaussian-splatting pipeline, you know the pain: the coordinates are in real-world meters, the colors are 0–255 integers, and the splatting pipeline expects normalized coordinates and its own SH color fields. ply_normalize (from ComfyUI-3D-MeshTool) is the translator that bridges that gap. The author's own docstring calls it "a quick test to process industrial ply" - the node you chain right after ply_load so the cloud becomes something ComfyUI can actually render and splat.
How it works
It reads the vertex data of your GS_PLY and rebuilds it into the ComfyUI-3D-Pack standard layout (x y z nx ny nz f_dc_0..2 opacity scale_0..2 rot_0..3), channel by channel, each behind a toggle:
xyz_normalize(default on) - normalizes thex/y/zcoordinates into a unit-ish range so the cloud fits the standard view space.RGB_normalize(default on) - maps the sourcered/green/blue(usually 0–255 from the scanner) through a linear mapping into thef_dc_0/1/2SH color fields, which live in the ~−1.77..1.77 range the splatting code expects.opacity_transfer(default off) - if your cloud carriesscalar_Intensity, it's copied into the standardopacityfield.- Point size: the standard PLY stores per-point scale as log-space values (roughly −9 to −5).
PointSize_scale(0–4, default 3) sets that;auto_PointSizecomputes a per-point size from the overall cloud dimensions instead of using the fixed value.
The R, G, B dropdowns are a nice touch: each lets you choose which source channel maps to which output color field (defaults f_dc_0/1/2 for R/G/B), so you can fix swapped channels without leaving the graph.
Output
gs_ply(GS_PLY) - the rebuilt, ComfyUI-standard point cloud.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/807502278/ComfyUI-3D-MeshTool
cd ComfyUI-3D-MeshTool
pip install -r requirements.txt
Restart ComfyUI (or via ComfyUI Manager, search "ComfyUI-3D-MeshTool").
Common issues
The three toggles each print a warning when their expected source fields aren't in the PLY, so a cloud that comes back looking gray or mis-sized is almost always missing red/green/blue or x/y/z - check the console for those warnings. If colors come out wrong but the fields exist, use the R/G/B remap dropdowns to fix channel order. And because this node returns a new standard PLY built from scratch, anything in your source cloud the node doesn't know about (custom attributes, extra channels) is dropped - that's expected, not data loss on the channels that matter.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| gs_ply | GS_PLY | — | |
| xyz_normalize | BOOLEAN | true | — |
| RGB_normalize | BOOLEAN | true | — |
| opacity_transfer | BOOLEAN | false | — |
| auto_PointSize | BOOLEAN | false | — |
| PointSize_scale | FLOAT | 3.00–4 | — |
| R | COMBO | f_dc_0 | 3 options: f_dc_0, f_dc_1, f_dc_2 |
| G | COMBO | f_dc_1 | 3 options: f_dc_0, f_dc_1, f_dc_2 |
| B | COMBO | f_dc_2 | 3 options: f_dc_0, f_dc_1, f_dc_2 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| gs_ply | GS_PLY | — |