Trellis Native Turntable
Turntables straight from your Trellis mesh, no Blender round-trip
- trellis_mesh
- texture
- image_batch
- single_image
- camera_json
- normal_batch
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-Turntablespins the full 360°,Front/Side/Backgrab 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) andssaa(1/2/4, default 2) - this pair decides quality vs. VRAM.ssaa=2renders at 2× resolution then downsamples, which roughly quadruples per-frame cost. If 1024 blows up, dropssaato 1 and keepseam_fixon.ambient_light(0.3) anddirectional_light(1.5) withlight_dir_x/y/z- a two-light setup, enough for a showcase.bg_colorpicks 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_fixon, 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
ssaato 1. The author runs an RTX 4070 16GB, so on an 8GB card, 512 +ssaa=1is 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.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| trellis_mesh | * | — | |
| render_mode | COMBO | 4 options: Front, Side, Back, Turntable | |
| resolution | INT | 512256–1024 | — |
| turntable_frames | INT | 301–120 | — |
| camera_distance | FLOAT | 2.500.5–10 | — |
| camera_elevation | FLOAT | 15.00-90–90 | — |
| camera_fov | FLOAT | 40.001–120 | — |
| ambient_light | FLOAT | 0.300–1 | — |
| directional_light | FLOAT | 1.50–5 | — |
| light_dir_x | FLOAT | 1.00-5–5 | — |
| light_dir_y | FLOAT | 1.00-5–5 | — |
| light_dir_z | FLOAT | 1.00-5–5 | — |
| bg_color | COMBO | 4 options: White, Black, Gray, Transparent | |
| textureopt | * | — | |
| ssaaopt | COMBO | 2 | 3 options: 1, 2, 4 |
| seam_fixopt | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image_batch | IMAGE | — |
| single_image | IMAGE | — |
| camera_json | STRING | — |
| normal_batch | IMAGE | — |