Preview Gaussian Dual
See the before and after of a splat side by side
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_1andply_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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_path_1 | STRING | Path to the first Gaussian Splatting PLY file | |
| ply_path_2 | STRING | Path to the second Gaussian Splatting PLY file | |
| layout | COMBO | side_by_side | side_by_side - two synchronized viewports. slider - overlaid with a draggable divider. |
| camera_mode | COMBO | orbit | orbit - trackball turntable camera. spectate - WASD fly-cam. |
| fov_degrees | FLOAT | 705–170 | — |
| renderer | COMBO | playcanvas | playcanvas - PlayCanvas Engine v2.19 GSplat. spark - Three.js + WebGL2, all formats. |
| transport_format | COMBO | ply | ply - lossless, larger. spz - server transcodes to SPZ v2, ~9x smaller. |
Outputs (0)
No outputs