Nodes/ComfyUI/Transform Splat
ComfyUI Node Runs on cloud

Transform Splat

Move, rotate, and scale a gaussian splat like it's a real object

By Comfy-Org·Created 4 years ago·Updated about 21 hours ago· 130,663
Transform Splat
  • splat
  • splat
translate_x0.00
translate_y0.00
translate_z0.00
rotate_x0
rotate_y0
rotate_z0
scale_x1.00
scale_y1.00
scale_z1.00

Decoders don't respect your scene layout. A TripoSplat decode comes out centered at the origin at whatever scale the model decided, and if you're building a scene out of several splats, they're all stacked on top of each other. Transform Splat is the node that fixes that - it translates, rotates, and scales a SPLAT in world space, so you can park object A next to object B, spin a decode upright, or scale one down to match another.

It's the node you reach for in any multi-object workflow: transform each splat into place, Merge Splats them together, then render the whole scene. Without it, every "put the coffee cup on the table" workflow is dead on arrival.

How it works

Each gaussian in the splat carries a position, a scale, and a rotation, and the node transforms all three consistently - positions rotate and translate, the per-splat scale and rotation are composed with your transform so the individual ellipsoids reorient correctly instead of just their centers. The math is: rotate, then scale per-axis, then translate.

There are two code paths, and the difference matters:

  • Uniform scale (all three scale values equal) - a fast path. The node factors rotation and scale out cleanly and just re-orients the quaternions.
  • Non-uniform scale (different X/Y/Z scales) - the slow path. Each splat's covariance matrix has to be transformed and re-factorized into scale + rotation, which reshapes every single ellipsoid. Correct, but visibly slower on a big splat.

The inputs

  • translate_x / translate_y / translate_z - world-space offset, -100 to 100. Splats from the decoders are typically normalized to roughly unit size, so single-digit values are usually the right ballpark.
  • rotate_x / rotate_y / rotate_z - rotation in degrees, -360 to 360.
  • scale_x / scale_y / scale_z - multiplier, 0.01 to 100, default 1.

Output is a single splat, transformed, ready to feed Render Splat, Merge Splats, or Extract Mesh from Splat.

It ships with ComfyUI core, added with the rest of the splat family in late May 2026.

Common issues

Slow on big splats. If you're only resizing, keep the scale uniform (same value on all three axes) to stay on the fast path. Non-uniform scale on a 200k-gaussian splat is where you'll feel it.

"My splat moved but looks wrong." Remember the order: rotate, then scale, then translate. If you're combining rotations and non-uniform scales, they don't commute - change the scale first, then rotate, rather than fighting the combined result.

Orientation confusion. Splat world space is not three.js scene space; the camera and Load 3D nodes do their own conversion. If a transform looks mirrored or flipped on screen, don't trust your intuition - change one axis at a time and render to check.

Category3d/splat

Inputs (10)

NameTypeDefaultDescription
splatSPLAT
translate_xFLOAT0.00-100–100
translate_yFLOAT0.00-100–100
translate_zFLOAT0.00-100–100
rotate_xFLOAT0-360–360
rotate_yFLOAT0-360–360
rotate_zFLOAT0-360–360
scale_xFLOAT1.000.01–100
scale_yFLOAT1.000.01–100
scale_zFLOAT1.000.01–100

Outputs (1)

NameTypeDescription
splatSPLAT