Trellis Image to 3D 🖼️➡️🎲
The Node That Turns Flat Images Into 3D Models
- model
- images
- masks
- model_file
- video_path
- texture_image
You hand this node a photo of a thing, and it hands you a 3D model you can spin, export as a .glb, and drop straight into Blender, Unity, or your game. No multi-view renders, no photogrammetry rig - one image in, mesh out. It's the payoff node of the IF_Trellis pack. The checkpoint loader is the toll booth; this is the ride.
Under the hood it's Microsoft Research's TRELLIS (arXiv 2412.01506), wrapped into ComfyUI by ImpactFrames-YT. TRELLIS's trick is its SLAT representation - a "structured latent" that can be decoded into whatever 3D format you want: a radiance field, 3D gaussians, or a mesh. The node runs the whole pipeline in two rectified-flow passes. First a sparse-structure sampler lays down a coarse voxel skeleton; then the SLAT sampler fills in geometry and appearance. What comes out is decoded to both a gaussian and a mesh, which are baked into the .glb you save.
That's why the sampling inputs come in pairs. The ss_guidance_strength / ss_sampling_steps pair (defaults 7.5 and 12) controls the structure pass; slat_guidance_strength / slat_sampling_steps (defaults 3 and 12) control the latent pass. The defaults are genuinely sane - before you touch them, try just changing seed to get variants. Only reach for more steps when geometry looks blobby or detail is mushy.
The inputs a beginner actually sets:
mode-singlefor one image,multiif you feed several reference angles of the same object. Multi is where TRELLIS shines: back and side views fix the "mushroom on legs" failure where the model never knows what's behind the object.multimode(stochastic vs multidiffusion) only matters in multi mode.images(and optionalmasks) - the source picture. The pipeline preprocesses it, and that's where therembgdependency earns its keep: it cuts the subject out. A clean subject on a simple background gives you a much better mesh than a cluttered scene.texture_mode-blank,fast, oropt.optbakes a higher-quality texture with fewer visible seams, at the cost of time. Start onfast; switch tooptwhen the seam work bothers you.mesh_simplify- a simplification ratio, so the tooltip is backwards-ish: lower means more polygons,1.0means aggressive simplification. Keep 0.95 as a starting point; only drop it when you need dense geometry for a hero asset.save_glbis on by default and is the point.render_videogives you a rotating preview.mp4(thefpsinput controls smoothness),save_gaussiandrops the.ply, andsave_texture/save_wireframeexport extra maps. The wireframe map is oddly useful as a retopo reference.
The node is an output node, so it returns three things: model_file (a path to the .glb), video_path (path to the preview), and texture_image (the baked texture as a ComfyUI IMAGE). Files land in ComfyUI/output/<project_name>/.
Install is the real wall, and it's shared across the whole pack: you need the --recurse-submodules clone, a micromamba env, Visual Studio Build Tools on Windows, CUDA 12.4, and a bunch of compiled extensions (nvdiffrast, diffoctreerast, kaolin, spconv, SageAttention). The README says it plainly: not tested with the portable ComfyUI embedded Python. You'll also want an NVIDIA card with 8GB+ VRAM. If that all sounds like a weekend project - it is. The first run also quietly downloads the TRELLIS-image-large model (several GB) and a DINOv2 encoder, so don't panic when nothing happens for a while.
Where people get burned: a bad cutout. If rembg fumbles the background, the mesh inherits the mistake - fix the source image first. And if the whole install feels like too much, know that a lighter TRELLIS2 wrapper with prebuilt wheels and PBR support exists by now; this pack is the original, and the original has opinions about your environment.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| model | TRELLIS_MODEL | — | |
| mode | COMBO | single | Mode. single is a single image. with multi you can provide multiple reference angles for the 3D model |
| images | IMAGE | — | |
| seed | INT | 00–2147483647 | — |
| ss_guidance_strength | FLOAT | 7.50–12 | — |
| ss_sampling_steps | INT | 121–100 | — |
| slat_guidance_strength | FLOAT | 3.00–12 | — |
| slat_sampling_steps | INT | 121–100 | — |
| mesh_simplify | FLOAT | 0.950.9–1 | Simplify the mesh. the lower the value more polygons the mesh will have |
| texture_size | INT | 1024512–2048 | Texture size. the higher the value the more detailed the texture will be |
| texture_mode | COMBO | fast | Texture mode. blank is no texture. fast is a fast texture. opt is a high quality texture |
| fps | INT | 151–60 | FPS. the higher the value the smoother the video will be |
| multimode | COMBO | stochastic | 2 options: stochastic, multidiffusion |
| project_name | STRING | trellis_output | — |
| save_glb | BOOLEAN | true | Save the GLB file this is the 3D model |
| render_video | BOOLEAN | false | Render a video |
| save_gaussian | BOOLEAN | false | Save the Gaussian file this is a ply file of the 3D model |
| save_texture | BOOLEAN | false | Save the texture file |
| save_wireframe | BOOLEAN | false | Save the wireframe file |
| masksopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model_file | STRING | — |
| video_path | STRING | — |
| texture_image | IMAGE | — |