TripoSplat Decode
From latent to a cloud of 3D gaussians
- samples
- vae
- splat
TripoSplat is the model line that turns a latent directly into a 3D gaussian splat - no mesh extraction, no voxel-to-surface step. VAEDecodeTripoSplat is the node that makes that happen: it runs the sampled latent through Tripo's VAE decoder and hands you an actual SPLAT: thousands of 3D gaussians, each with position, scale, rotation, opacity, and spherical-harmonic color coefficients. Think of it as the "decode to a viewable 3D thing" step in a pipeline where the 3D thing happens to be a point-cloud-like splat.
How it works
You feed samples (the sampled latent, straight off the sampler) and vae (the TripoSplat VAE decoder - note it's specifically the decoder; the tooltip says so). Two knobs control the output:
- num_gaussians (default 262144, range 32768–1,048,576) - how many gaussians to produce. The tooltip is refreshingly honest: 262144 matches the octree's point density, and going higher oversamples the same points - denser, but no new detail, at proportionally more VRAM and time. This is the density knob, not a quality knob, and cranking it is the newbie trap.
- seed (default 0) - seeds the octree point sampler so decodes are deterministic. Same latent + same seed = same splat. Useful when you're iterating on downstream rendering and don't want the point placement shuffling under you.
The memory math you can't ignore
This node does real compute: it loads the decoder, calculates a memory budget from the channel count, gaussians, and model width, and each gaussian carries position, rotation, scale, opacity, and SH coefficients. At the default quarter-million gaussians that's already a heavy object; the decode cost scales with num_gaussians, and the maximum is four times the default. Leave it at 262144 unless you have a concrete reason, and when you do increase it, increase it knowingly.
Where it sits
The workflow is 3D generation: latent → sampler → this node → SPLAT → render (via a splat render node) or save. It's the newest corner of the 3D family in ComfyUI core - TripoSplat support landed around mid-2026 - so expect the surrounding ecosystem to be thinner and the docs to be younger than for Hunyuan3D.
Gotchas
The output is a SPLAT, a distinct type - you can't hand it to a mesh node, and you need a splat renderer to see it. Determinism note: the seed makes decodes reproducible, but it samples the octree points; if you change num_gaussians the point set changes regardless of seed, so pin both when you're comparing runs. And again: more gaussians ≠ better. At 262144 the decoder already places one gaussian per octree point; beyond that you're thickening the same surface, which reads as density, not detail.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | — | |
| vae | VAE | TripoSplat VAE decoder | |
| num_gaussians | INT | 26214432768–1048576 | Number of gaussians to produce (rounded to a multiple of 32). 262144 matches the octree's point density; higher oversamples the same points (denser, but no new detail) and costs proportionally more VRAM/time. |
| seed | INT | 00–18446744073709550000 | Seeds the octree point sampler (global RNG) for deterministic decodes. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| splat | SPLAT | — |