Create 3D File (from Splat)
Get your splat off the graph and into a real .ply, .ksplat, or .spz
- splat
- model_3d
"Splat" is a perfectly good format to hold in memory, but at some point you want it out - in Blender, in a web viewer, on a server, in an email. Create 3D File (from Splat) is the exit door: it serializes a SPLAT into a File3D object you can hand to Save Splat or Preview Splat.
The class name hides that the interesting part is the format dropdown, because it's three different trade-offs in one node.
The formats, and why you'd pick each
ply(default) - the standard 3D Gaussian Splat format with full spherical harmonics. This is the one for interop: Blender plugins, SuperSplat, most splat tooling read it, and it keeps the view-dependent color that makes a splat look alive. When in doubt, pick this.ksplat- the mkkellogg SplatBuffer format (level 0, uncompressed), base color only. It's the format several web viewers and game-facing pipelines expect, at the cost of flat lighting.spz- Niantic's gzip-compressed format, roughly 10x smaller, base color only. That's your file for sharing, storage, and anything bandwidth-bound.
So the mental model is: ply for fidelity and interop, spz for size, ksplat for a specific target app. Everything you lose going to spz/ksplat is the spherical-harmonics color - geometry and base color survive.
How it works
Under the hood it writes binary in the standard 3DGS storage convention - log-scaled scale, logit opacity, quaternion rotation - which is exactly why the .ply it emits opens cleanly in other tools rather than only in ComfyUI. The node produces a File3D object, which is just bytes in memory; you then need a terminal node to actually write it to disk.
Where it goes from here
The output model_3d plugs into:
- Save Splat - writes the file to
output/3d/by default (prefix3d/ComfyUI). - Preview Splat - renders it in the 3D viewport so you can inspect before committing.
It ships with ComfyUI core, added with the rest of the splat family in late May 2026.
Common issues
"Only the first item of a batch was saved." Correct, and by design: this node supports one item per batch only, and logs a warning when you feed it more. If you merged several splats into one, that's a single item and saves fine. If you're feeding a true batch and expecting multiple files, you need to split it first.
Wanting a raw .splat file and finding no option. As of now there's no .splat writer - only ply, ksplat, and spz. Annoying asymmetry (the import side can read .splat), but the ply round-trip is lossless enough for nearly everything. If you genuinely need .splat, export ply and convert externally.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| splat | SPLAT | — | |
| format | COMBO | ply: standard 3D Gaussian Splat with full spherical harmonics. ksplat: mkkellogg SplatBuffer (level 0, uncompressed), base color only spz: Niantic gzip-compressed (~10x smaller), base color only |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model_3d | FILE_3D_SPLAT_ANY | — |