Nodes/ComfyUI-TurntableGSViewer/Preview Gaussian Camera
ComfyUI Node

Preview Gaussian Camera

Render your splat from real camera poses, straight to an image

By PozzettiAndrea·Created 4 months ago·Updated 7 days ago· 6
Preview Gaussian Camera
  • extrinsics
  • intrinsics
  • image
ply_path
image_width1024
image_height1024
near_plane0.01
backgroundblack
force_backendauto

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 the gsplat CUDA rasterizer first (roughly 10–50 ms per frame), and falls back to a pure-PyTorch renderer if gsplat isn'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.

CategoryGaussianPack

Inputs (8)

NameTypeDefaultDescription
ply_pathSTRINGPath to a 3DGS PLY (HYWM2GaussianTrain.ply_path, SharpPredictGaussiansFromMetricDepth, MergeGaussians, or any external 3DGS tool).
extrinsicsEXTRINSICS[N, 4, 4] world-to-camera. Renders N frames.
intrinsicsINTRINSICS[N, 3, 3] or [3, 3] pixel-K (or normalized-K, auto-rescaled). Single [3,3] is broadcast to all N views.
image_widthINT102432–8192
image_heightINT102432–8192
near_planeoptFLOAT0.010.001–100Near-plane culling distance in world units. Gaussians with depth < near_plane are dropped.
backgroundoptCOMBOblackBackground color where transmittance survives all the gaussians.
force_backendoptCOMBOautoauto = 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)

NameTypeDescription
imageIMAGE