Nodes/ComfyUI-TurntableGSViewer/Preview Gaussian Dual
ComfyUI Node

Preview Gaussian Dual

See the before and after of a splat side by side

By PozzettiAndrea·Created 4 months ago·Updated 7 days ago· 6
Preview Gaussian Dual
      ply_path_1
      ply_path_2
      layoutside_by_side
      camera_modeorbit
      fov_degrees70
      rendererplaycanvas
      transport_formatply

      You just decimated a million splats down to 200k, or rotated a scene, or stripped the SH out of a PLY. Did you break it? The whole point of PreviewGaussianDual is that you don't have to guess. It loads two gaussian splats and shows them at once - either as two synchronized viewports or overlaid with a draggable divider - so you can slide between original and processed and see exactly what changed.

      It's a specialist member of the GaussianPack family (GitHub repo ComfyUI-TurntableGSViewer, self-labeled "GaussianPack", same author as ComfyUI's HyWorld2 and TRELLIS.2 wrappers). The flagship PreviewGaussians handles one scene; this is the A/B testing variant.

      The two comparison layouts

      • side_by_side - two viewports with synchronized cameras. Move one and the other follows, which is exactly what you want when comparing the same region across two versions. Orbit or spectate both.
      • slider - the two scenes overlaid with a draggable divider you pull back and forth. The "flicker test" - slide to the boundary where differences become visible.

      camera_mode (orbit / spectate), fov_degrees (default 70°), and renderer (playcanvas / spark) all work as in the single viewer, and transport_format (ply / spz) applies to both sides. The same freshness logic as the flagship means both panes re-fetch when a file is rewritten, so you can re-merge and re-compare without touching the workflow.

      Inputs

      • ply_path_1 and ply_path_2 - the two splat PLYs to compare. Wire the original from a load node and the processed one directly from the node that made it (a merge, transform, or export output path).
      • layout - side-by-side or slider.
      • camera_mode, fov_degrees, renderer, transport_format - shared viewing controls.

      It's an output node with no outputs: everything it produces is the comparison in front of you.

      Installing it

      cd ComfyUI/custom_nodes
      git clone https://github.com/PozzettiAndrea/ComfyUI-TurntableGSViewer.git
      cd ComfyUI-TurntableGSViewer
      pip install -r requirements.txt --upgrade
      python install.py
      

      Restart ComfyUI. Manager users: search "GaussianPack". Expect the pack's experimental comfy-env installer to pull the pixi package manager on first install, and remember spz transport needs Node.js on the server. No model weights to download.

      Where it earns its keep

      This is the node that makes GaussianMerge and TransformGaussian workflows trustworthy. Compare original vs. decimated to check the merge didn't eat fine structure; compare before/after rotation to confirm orientation is right and nothing got sheared. If you're iterating on k values or opacity thresholds in a merge, hook both outputs into Dual and pick the setting by eye instead of by faith. It's a niche tool, but when you need an honest side-by-side, nothing else in the pack does it.

      Categoryviewer

      Inputs (7)

      NameTypeDefaultDescription
      ply_path_1STRINGPath to the first Gaussian Splatting PLY file
      ply_path_2STRINGPath to the second Gaussian Splatting PLY file
      layoutCOMBOside_by_sideside_by_side - two synchronized viewports. slider - overlaid with a draggable divider.
      camera_modeCOMBOorbitorbit - trackball turntable camera. spectate - WASD fly-cam.
      fov_degreesFLOAT705–170
      rendererCOMBOplaycanvasplaycanvas - PlayCanvas Engine v2.19 GSplat. spark - Three.js + WebGL2, all formats.
      transport_formatCOMBOplyply - lossless, larger. spz - server transcodes to SPZ v2, ~9x smaller.

      Outputs (0)

      No outputs