Nodes/ComfyUI/Extract Mesh from Splat
ComfyUI Node Runs on cloud

Extract Mesh from Splat

The node that makes your gaussian splat usable outside ComfyUI

By Comfy-Org·Created 4 years ago·Updated about 16 hours ago· 130,663
Extract Mesh from Splat
  • splat
  • mesh
resolution384
kernel5
smooth0
level0.40
min_component500
min_opacity0.02
color_sharpen2.0

Gaussian splats are lovely to look at and a nightmare to do anything else with. Blender, Unity, game engines, 3D printers - none of them want a cloud of a hundred thousand ellipses. They want triangles. Extract Mesh from Splat is the built-in node that gets you from one to the other: SPLAT in, colored MESH out, ready for Save GLB or a Save 3D node.

You'll reach for this the moment "look at it" stops being the goal. It's the difference between a splat you can orbit and an actual asset you can light, rig, or drop into a scene.

How it works

It's a voxel-based surface extraction - the same family as marching cubes / surface nets. The splat's density is baked onto a 3D grid, an iso-surface is pulled out at a threshold, and the result is cleaned up and colored from the gaussians. The vertex colors are baked in and the mesh is emitted unlit, so when you open the GLB it matches the splat's look instead of getting washed out by viewer lighting.

Because everything scales with the grid, the biggest lever is resolution - and it bites in three dimensions.

The inputs that matter

  • resolution - density-grid resolution along the longest axis, 64 to 768, default 384. Higher = finer surface. Cost grows with resolution cubed, so don't blindly max it out; 384 is a sane default, 768 is for the patient.
  • level - the iso-surface level. Auto-picked by Otsu's method under the hood; 1.0 means "trust Otsu", and the default 0.4 biases toward a fatter, more connected surface. Lower = fatter, higher = thinner/tighter.
  • kernel - max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here. If sparse splats leave holes, raise it.
  • min_component - drops connected components smaller than this many vertices (default 500). This is your floater-bomber and it also eats the inner shell of the double wall you often get with splats. Set 0 to keep everything.
  • smooth - Taubin mesh-smoothing iterations, 0 to 60, default 0. Volume-preserving, so it smooths without shrinking the object - unlike blurring the density. Good final touch before export.
  • min_opacity - ignores gaussians fainter than this before meshing. Cheap floater control.
  • color_sharpen - crisps up the vertex texture by biasing each voxel toward its dominant gaussian (1.0 = physical blend, default 2.0). Color only; geometry untouched.

It ships with ComfyUI core, landed with the splat family in late May 2026.

The workflow people actually use

Splat-to-mesh quality is gated mostly by splat density, not the node. The trick the Comfy team built this family around: decode the same latent with a few different seeds, Merge Splats them together, then mesh the union. Unioning several decodes densifies the surface, and a denser splat surfaces much more cleanly. Also worth doing a quick Render Splat in clay style first - if it looks ragged as a render, the mesh will too.

Common issues

Holes or gaps in the surface. Raise kernel, or go back and densify with Merge Splats. A sparse splat cannot be patched at meshing time.

Floating blobs around the object. Bump min_component and/or min_opacity.

Jagged surface. That's smooth's job - a few Taubin iterations knock it down without shrinking the model.

VRAM or time blowing up. You've been cranking resolution. Back it off; the output is a voxel cube, so every step up multiplies the work.

Category3d/splat

Inputs (8)

NameTypeDefaultDescription
splatSPLAT
resolutionINT38464–768Density-grid resolution along the longest axis. Higher = finer surface, more VRAM/time (grows with resolution^3).
kernelINT51–8Max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here - small surfels stay cheap, large ones aren't truncated. Raise if sparse splats leave gaps.
smoothINT00–60Taubin mesh-smoothing iterations. Smooths the surface without shrinking it (volume-preserving), unlike blurring the density. 0 = raw surface.
levelFLOAT0.400–2Iso-surface level. Auto-picked by Otsu; this biases it (1.0 = auto, lower = fatter/more-connected surface, higher = thinner/tighter).
min_componentINT5000–100000Drop connected components smaller than this many vertices (0 = keep all). Removes detached floater blobs and the inner shell of the double wall.
min_opacityFLOAT0.020–1Ignore gaussians fainter than this before meshing.
color_sharpenFLOAT2.01–8Crisp up the vertex texture: 1.0 = physically-correct blend; higher biases each voxel's colour toward its dominant gaussian instead of averaging neighbours (de-smears the texture). Colour only - geometry is unchanged.

Outputs (1)

NameTypeDescription
meshMESH