Nodes/ComfyUI-TrellisNativeTurntable/Trellis Native Turntable
ComfyUI Node

Trellis Native Turntable

Turntables straight from your Trellis mesh, no Blender round-trip

By Tamerygo·Created 2 months ago·Updated 5 days ago· 4
Trellis Native Turntable
  • trellis_mesh
  • texture
  • image_batch
  • single_image
  • camera_json
  • normal_batch
render_mode
resolution512
turntable_frames30
camera_distance2.50
camera_elevation15.00
camera_fov40.00
ambient_light0.30
directional_light1.5
light_dir_x1.00
light_dir_y1.00
light_dir_z1.00
bg_color
ssaa2
seam_fixtrue

If you've generated a 3D mesh with TRELLIS in ComfyUI, you know the last mile is the annoying part. The model spits out a mesh, and suddenly you're exporting a GLB and opening Blender just to make it spin. This node fixes exactly that: it renders a clean, seam-free turntable (or a single Front / Side / Back view) straight from the mesh, all inside ComfyUI.

It's a tiny, one-trick pack from a solo dev who built it because nobody else had. He "couldn't find a single ComfyUI custom node that produces a usable turntable straight from a Trellis mesh" - so the honest framing is: this is the last node in a chain, not a place to start. You need a working Trellis workflow first, because all it does is render the mesh you already have.

How it works - the "stealth" renderer

TRELLIS is Microsoft's MIT-licensed image-to-3D model, which in the ComfyUI stack usually means installing a heavy Trellis node pack. This node doesn't reimplement any of that. It imports MeshRenderer from whatever Trellis pack you've got sitting in custom_nodes (it checks for trellis2 first, then trellis), then pulls a clever trick: it wraps your mesh in a bare adapter object that the renderer doesn't recognize as a MeshWithPbrMaterial or MeshWithVoxel, so Trellis leaves it alone and returns the raw UV/attribute pass instead of running its PBR path - which, the author notes, tends to hang.

From there it does everything in native PyTorch: texture sampling via grid_sample, simple ambient + directional diffuse lighting, and background compositing. The seam-freeness is the whole point. The classic artifact - visible seams along UV island edges - happens because the renderer antialiases raw UV coordinates, smearing them across the atlas. This node renders the UV pass with antialiasing off and applies supersampling (SSAA) to the finished, textured image instead. Then seam_fix catches screen-space UV jumps and switches from bilinear to nearest sampling at those pixels, so a neighboring UV island or the background doesn't bleed in.

The inputs that matter

Most of the sliders are camera and lighting; you'll touch them rarely. The ones worth knowing:

  • trellis_mesh - the mesh from your Trellis workflow. It accepts the mesh object, a list, or a {"mesh": ...} dict, so it plays nice with whatever your workflow actually hands it.
  • render_mode - Turntable spins the full 360°, Front/Side/Back grab one frame. turntable_frames (default 30, up to 120) sets how many frames the spin gets; more frames means a smoother gif, not a better render.
  • resolution (256–1024, default 512) and ssaa (1/2/4, default 2) - this pair decides quality vs. VRAM. ssaa=2 renders at 2× resolution then downsamples, which roughly quadruples per-frame cost. If 1024 blows up, drop ssaa to 1 and keep seam_fix on.
  • ambient_light (0.3) and directional_light (1.5) with light_dir_x/y/z - a two-light setup, enough for a showcase. bg_color picks White/Black/Gray/Transparent.
  • texture (optional) - feed an IMAGE here to override the mesh's own material; leave it out to use the mesh's baked texture or vertex colors.

What comes out

Four outputs: image_batch (all frames as an IMAGE batch), single_image (the first frame), camera_json (per-frame extrinsics/intrinsics as JSON - handy for matching shots later), and normal_batch. The natural next step is wiring image_batch into a video encoder like VHS Video Combine to save the spinning mp4 or gif - exactly what the author does in the demo.

Installing it

There's no requirements.txt and no model download - it's pure torch/numpy, and it deliberately rides on the Trellis pack you already have. So:

cd ComfyUI/custom_nodes
git clone https://github.com/Tamerygo/ComfyUI-TrellisNativeTurntable.git

Then restart ComfyUI; the node appears under 3D/Trellis. It's new and small, so if ComfyUI Manager doesn't surface it yet, the clone above is the way.

Troubleshooting

  • "Hiba az importálásnál" - Hungarian for "error during import", and it means the node couldn't find a Trellis MeshRenderer. Install a Trellis node pack and get the workflow running on its own first. That upstream install is the real fight - most people who struggle with this node are actually struggling to get TRELLIS onto their GPU.
  • Faint seams persist - even with seam_fix on, a hairline can survive if the texture atlas lacks padding around UV islands. The README's honest answer: texture dilation before sampling fixes it.
  • Out of VRAM at 1024 - drop ssaa to 1. The author runs an RTX 4070 16GB, so on an 8GB card, 512 + ssaa=1 is the sane default.

The takeaway: this is a well-scoped, single-purpose node that fills a real gap at the end of a Trellis pipeline. If you don't already run Trellis in ComfyUI, it won't get you there - but if you do, it saves you from ever touching Blender just to show off what you made.

Category3D/Trellis

Inputs (16)

NameTypeDefaultDescription
trellis_mesh*
render_modeCOMBO4 options: Front, Side, Back, Turntable
resolutionINT512256–1024
turntable_framesINT301–120
camera_distanceFLOAT2.500.5–10
camera_elevationFLOAT15.00-90–90
camera_fovFLOAT40.001–120
ambient_lightFLOAT0.300–1
directional_lightFLOAT1.50–5
light_dir_xFLOAT1.00-5–5
light_dir_yFLOAT1.00-5–5
light_dir_zFLOAT1.00-5–5
bg_colorCOMBO4 options: White, Black, Gray, Transparent
textureopt*
ssaaoptCOMBO23 options: 1, 2, 4
seam_fixoptBOOLEANtrue

Outputs (4)

NameTypeDescription
image_batchIMAGE
single_imageIMAGE
camera_jsonSTRING
normal_batchIMAGE