ComfyUI Node

ply_normalize

The node that turns industrial point clouds into splattable data

By 807502278·Created 2 years ago·Updated 2 years ago· 23
ply_normalize
  • gs_ply
  • gs_ply
xyz_normalizetrue
RGB_normalizetrue
opacity_transferfalse
auto_PointSizefalse
PointSize_scale3.0
Rf_dc_0
Gf_dc_1
Bf_dc_2

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 the x/y/z coordinates into a unit-ish range so the cloud fits the standard view space.
  • RGB_normalize (default on) - maps the source red/green/blue (usually 0–255 from the scanner) through a linear mapping into the f_dc_0/1/2 SH color fields, which live in the ~−1.77..1.77 range the splatting code expects.
  • opacity_transfer (default off) - if your cloud carries scalar_Intensity, it's copied into the standard opacity field.
  • 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_PointSize computes 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.

Category3D_MeshTool/Edit

Inputs (9)

NameTypeDefaultDescription
gs_plyGS_PLY
xyz_normalizeBOOLEANtrue
RGB_normalizeBOOLEANtrue
opacity_transferBOOLEANfalse
auto_PointSizeBOOLEANfalse
PointSize_scaleFLOAT3.00–4
RCOMBOf_dc_03 options: f_dc_0, f_dc_1, f_dc_2
GCOMBOf_dc_13 options: f_dc_0, f_dc_1, f_dc_2
BCOMBOf_dc_23 options: f_dc_0, f_dc_1, f_dc_2

Outputs (1)

NameTypeDescription
gs_plyGS_PLY