zhenzhen-trellis-2-fal
Drop an image in, get a .glb back — no GPU meltdown required
- image1
- image2
- image3
- model_url
- response
- asset_urls
- model_3d
Most image-to-3D in ComfyUI goes one of two ways: you fight ComfyUI-3D-Pack's compiled CUDA dependencies for an afternoon, or you rent somebody's A100. This node sidesteps both. It's a wrapper around Microsoft's TRELLIS 2 running on fal, from the Comfyui-zhenzhen pack - you feed it an image, it phones a cloud queue, and it hands you back a real 3D model as a FILE_3D output that plugs straight into the 3D viewer.
If the name rings a bell, good. TRELLIS is the MIT-licensed, image-to-3D model that the community spent 2026 shrinking into 8GB cards. Its trick is a single structured latent that decodes into a mesh, gaussians, or a radiance field - one generation, pick your format. The fal endpoint here serves TRELLIS 2, the 4B update that adds PBR materials. Running it in the cloud means you never touch the weights, the VRAM floor, or the nvdiffrast dependency hell. That's the whole point.
How it works
The node posts your image (as base64 or a URL) to the fal-ai/trellis-2 endpoint through Zhenzhen's own proxy, then polls every few seconds until the job's done. When it is, it downloads the GLB, wraps it as a FILE_3D, and returns it along with model_url, the raw response JSON, and asset_urls if the endpoint gave back more than one format. Under the hood it's a submit-and-poll HTTP client - there's no local inference happening, which is why this pack needs no model files at all.
The inputs that matter
You connect image1 (or image2/image3 for multi-view) and the node handles upload. Everything else has sane defaults, but three are worth touching:
resolution- 512 / 1024 / 1536. Higher is slower and costs more per credit; 1024 is the sweet spot for most props.decimation_target- how aggressive the mesh cleanup is, default 500,000 triangles. Lower it for a lighter asset.texture_size- 1024 / 2048 / 4096 for the baked texture. 2048 is fine unless you actually need to zoom in.
The seed here is a real FAL seed, capped at 65535 - 0 means random. The three sampling-step fields (ss_sampling_steps, shape_slat_sampling_steps, tex_slat_sampling_steps) are the TRELLIS internals; leave them at 12 unless you're chasing quality and are willing to wait.
Installing and setting up
Install via ComfyUI Manager (search Comfyui-zhenzhen) or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
Then restart ComfyUI. No models download - this pack is pure API. You need an API key from the overseas "AI工坊" storefront (the FAL nodes all take the same key; paste it into api_key). FAL routes are pre-charged - the README says roughly 3.4 credits are held up front and the difference is refunded after the run, so don't panic at the number on the dashboard.
Troubleshooting
The two things that actually bite: 443/connection errors mean your machine can't reach Zhenzhen's overseas server - the README is blunt that you need a proxy with TUN mode enabled. And if the poll times out, check the node's max_poll_attempts (default 600 × 6s ≈ an hour) - TRELLIS 2 at 1536 can genuinely take a while. If a transient error hits, flip skip_error on and the node returns empty results instead of killing the whole workflow.
One honest caveat, straight from the KB: TRELLIS output is a starting point, not a game-ready asset. Expect to retopologize and re-UV by hand. But for a placeholder prop or a render block, you just saved yourself the worst install in the ecosystem.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | STRING | — | |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| api_keyopt | STRING | — | |
| seedopt | INT | 00–65535 | 0 = random seed. FAL seed max is 65535. |
| resolutionopt | COMBO | 1024 | 3 options: 512, 1024, 1536 |
| ss_sampling_stepsopt | INT | 121–50 | — |
| shape_slat_sampling_stepsopt | INT | 121–50 | — |
| tex_slat_sampling_stepsopt | INT | 121–50 | — |
| decimation_targetopt | INT | 50000020000–1000000 | — |
| texture_sizeopt | COMBO | 2048 | 3 options: 1024, 2048, 4096 |
| remeshopt | BOOLEAN | true | — |
| image_wayopt | COMBO | base64 | 2 options: base64, image_url |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model_url | STRING | — |
| response | STRING | — |
| asset_urls | STRING | — |
| model_3d | FILE_3D | — |