Preview 3D (Advanced)
The preview that passes the mesh through
- model_3d
- viewport_state
- model_3d_info
- camera_info
- model_3d
- model_3d_info
- camera_info
- width
- height
Preview 3D (Advanced) is the preview node that doesn't end the graph. You feed it a model_3d file, it opens that file in the interactive 3D viewer so you can inspect it, and then it hands the same file - plus its metadata, camera, and dimensions - right back out to you. Plain Preview 3D is a terminal node; this one is a checkpoint. You get to look at your mesh mid-pipeline and keep building.
It's ComfyUI core, "3d" category, nothing to install. And it's part of the new wave: the advanced 3D family (this, Preview Splat, Preview Point Cloud, Load 3D Advanced) landed around June 2026 and is still being stabilized - a crash in API mode (no UI) got patched in July 2026, so keep ComfyUI updated if you're running it headless.
How it works
The mechanism is embarrassingly simple, which is why it's pleasant to use. It takes the model_3d file you give it, writes a temporary copy to ComfyUI's temp folder (deliberately not your output folder - it's scratch, not an export), and opens that copy in the 3D viewer. Meanwhile every input becomes an output. Nothing is transformed; the file just passes through while you get to look at it.
That passthrough is the whole point. In a mesh-generation workflow you might want to preview the result of a Voxel to Mesh node before committing to a Save 3D Model export. With the plain Preview 3D you'd have to branch the graph and run both. With this node you splice it in line: mesh goes in, you glance at it, mesh comes out, continues to the save node. No branch, no re-runs.
The inputs that matter
- model_3d - the file to preview. Accepts the mesh formats: GLB, GLTF, FBX, OBJ, STL, USDZ, plus generic 3D files. Feed it a
FILE_3Doutput from Load 3D (Advanced) or anything else that emits one. - viewport_state - the same
LOAD_3Dviewer widget from the loaders. It's the source of the camera angle you see, and it forwards the camera onward. - width / height - default 1024×1024; passed through untouched.
- model_3d_info and camera_info - optional, advanced. Wire in metadata or a specific camera (say, one from Create Camera Info) and the preview opens at that framing.
Outputs: model_3d, model_3d_info, camera_info, width, height - a straight mirror of the inputs, so downstream nodes see exactly what you put in.
The gotcha
The gotcha is format discipline, and it's shared across the preview family. This node takes meshes. A gaussian splat belongs in Preview Splat, a raw point cloud in Preview Point Cloud - and the socket types enforce it, so ComfyUI won't even let you wire a splat in here. The one real edge case is PLY files, which can be either a splat or a point cloud; the node can't tell, so you have to know which you're dealing with.
Other than that, treat this as the "checkpoint" preview: it's the one to use when you want to see your mesh and keep your pipeline linear. If you just want to eyeball a file at the end of everything and you don't care about passthrough, the plain Preview 3D is simpler and takes a bare path string. Different tools, same viewer.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model_3d | FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D | 3D model file from an upstream 3D node. | |
| viewport_state | LOAD_3D | — | |
| width | INT | 10241–4096 | — |
| height | INT | 10241–4096 | — |
| model_3d_infoopt | LOAD3D_MODEL_INFO | — | |
| camera_infoopt | LOAD3D_CAMERA | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model_3d | FILE_3D | — |
| model_3d_info | LOAD3D_MODEL_INFO | — |
| camera_info | LOAD3D_CAMERA | — |
| width | INT | — |
| height | INT | — |