Preview Gaussian Camera
Render your splat from real camera poses, straight to an image
- extrinsics
- intrinsics
- image
The interactive viewers in this pack are great for looking, but "looking" doesn't produce anything. When you need a gaussian splat turned into actual pixels - a turntable sequence, a camera path through a scene, a fixed frame to save or feed a video node - you want PreviewGaussianCamera. It renders a 3DGS PLY from explicit camera poses and hands you a real IMAGE tensor on the other end.
It's the "pro" node of the GaussianPack family (GitHub repo ComfyUI-TurntableGSViewer, self-labeled "GaussianPack", same author as ComfyUI's HyWorld2 and TRELLIS.2 wrappers), and it sits in the "GaussianPack" menu category alongside GaussiansFromPointCloud. Everything before it in a workflow is about making the splat; this is about filming it.
How it works
You feed it a splat path plus two camera objects: extrinsics - an [N, 4, 4] world-to-camera matrix per view - and intrinsics - an [N, 3, 3] or single [3, 3] camera matrix (pixel-space K, or normalized K which it auto-rescales; a single matrix broadcasts to all N views). It renders N frames, one per extrinsic.
The rendering is tiered, which matters on non-NVIDIA hardware:
auto(default) - tries thegsplatCUDA rasterizer first (roughly 10–50 ms per frame), and falls back to a pure-PyTorch renderer ifgsplatisn't importable or you're not on CUDA.gsplat- forces the fast path and errors out if it's unavailable. Use it to verify you're actually getting GPU rendering.torch- always uses the pure-PyTorch fallback. Slower, but it runs anywhere torch runs: AMD, Mac (MPS), even CPU. The mode for debugging.
You also get near_plane (default 0.01) for near-plane culling in world units, background (black or white) for where transmittance survives every gaussian, and image_width / image_height (default 1024 each, 32–8192) for resolution.
The single output, image, is an IMAGE of shape [N, H, W, 3] in [0, 1]. Batch it into a video-save node for a rendered turntable, or a single-view extrinsics for a still.
Where the camera matrices come from
The ply_path input's own tooltip lists the intended splat sources: HYWM2GaussianTrain.ply_path, SharpPredictGaussiansFromMetricDepth, or a GaussianMerge output - i.e. anything that produces a trained PLY. The extrinsics/intrinsics come from whichever camera or pose system your workflow already uses (CameraPack-style nodes, or this pack's own PreviewGaussianSharp, which outputs its view matrices). If you don't have camera nodes yet, that's the missing piece - this node is a consumer of EXTRINSICS/INTRINSICS, not a generator.
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". The experimental comfy-env installer pulls in the pixi package manager on first install; gsplat (the fast path) is an optional CUDA dependency that ComfyUI may or may not already have - that's exactly why the torch fallback exists. No model weights to download.
Gotchas
If you're on an AMD card or a Mac and everything renders but slowly, check force_backend - you're on the torch path and that's expected, not a bug. If rendering errors with gsplat forced and you expected it to work, the package isn't installed; switch to auto. And remember it renders N frames, so a long camera path at 8192² will take a while - render at 1024, review, then go big.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| ply_path | STRING | Path to a 3DGS PLY (HYWM2GaussianTrain.ply_path, SharpPredictGaussiansFromMetricDepth, MergeGaussians, or any external 3DGS tool). | |
| extrinsics | EXTRINSICS | [N, 4, 4] world-to-camera. Renders N frames. | |
| intrinsics | INTRINSICS | [N, 3, 3] or [3, 3] pixel-K (or normalized-K, auto-rescaled). Single [3,3] is broadcast to all N views. | |
| image_width | INT | 102432–8192 | — |
| image_height | INT | 102432–8192 | — |
| near_planeopt | FLOAT | 0.010.001–100 | Near-plane culling distance in world units. Gaussians with depth < near_plane are dropped. |
| backgroundopt | COMBO | black | Background color where transmittance survives all the gaussians. |
| force_backendopt | COMBO | auto | auto = try gsplat (fast CUDA); fall back to pure-torch on ImportError or non-CUDA device. gsplat = error if not available (use to verify fast path). torch = always use the pure-PyTorch fallback (slower; useful for AMD/Mac/CPU debug). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |