Tripo: Smart UV
Smart UV Is the One-Node Fix
- model_info
- model_file
- model_info
- uv_render
The oldest complaint about image-to-3D is that the silhouette is impressive and the geometry underneath is not. Triangle soup, no rig, and - the one that bites the moment you try to texture anything - UVs the generator produced as a side effect and nobody ever checked. Tripo: Smart UV re-unwraps a model you already generated and hands back the mesh plus a picture of the UV atlas.
First, the thing that catches people out - and it caught a whole thread out back in 2024: this node is not local. It sends your model's task ID to Tripo's cloud and gets a mesh back. No VRAM, no model download, no slow first run; an API key instead, because somebody else's GPU does the unwrap.
Why unwrapping is the bottleneck
UVs are the map that says which flat square of texture belongs to which bit of surface. A 3D printer doesn't care; a game engine, a painter, and anything that projects a texture onto your mesh care enormously. Feed-forward models used to be terrible at this - TripoSR shipped vertex colours and no texture at all, and its successor Stable Fast 3D exists mostly because it added a proper unwrap and delit albedo. Tripo's own generators are well past that now, but an unwrap pass is still what makes texture projection land where you expect instead of smearing.
Inputs and outputs
Two fields, and you'll only touch one of them.
model_info(required) - theMODEL_INFOsocket from an earlier Tripo node. This is the whole design of the pack:MODEL_INFOis a little dictionary carrying the server-sidetask_idof your mesh, your API key, and any filename prefix or output directory you set upstream. You cannot feed this node a.glboff your disk. If that's what you have, runTripo: Import modelfirst (local file or a URL) to turn it intoMODEL_INFO.export_orientation-default,+x,-x,+y,-y. Which axis the exported model is built on. Leave it ondefaultunless something downstream is flipped; the node literally doesn't send the option when it's ondefault.
Three outputs:
model_file- the path to the unwrapped mesh, written underComfyUI/output/. The node applies thefile_prefix/output_directoryfromMODEL_INFOwhen it renames the download, so a prefix set back at the Generate node still lands here.model_info- chain it onward to Texture, Convert, or Preview 3D.uv_render- the UV atlas as a ComfyUIIMAGE, ready for a Preview Image node. One quirk: if the API returns no atlas the node silently hands you a black 64×64 image rather than erroring, so a black square means "no atlas came back", not "your UVs are broken".
Install
ComfyUI Manager → search "Tripo for ComfyUI". Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/VAST-AI-Research/ComfyUI-Tripo
pip install -r requirements.txt # just tripo3d>=1.0.0,<2.0.0
That's the whole dependency list: one pure-Python SDK. Against ComfyUI-3D-Pack's pile of compiled CUDA extensions, this is a joy to install - because nothing runs locally.
Get a key from platform.tripo3d.ai, then set it as TRIPO_API_KEY (in the env before launching ComfyUI), drop it in the apikey field on the Generate/Import node, or put it in the pack's config.json. It travels inside MODEL_INFO, so you set it once at the head of the graph and every node downstream inherits it.
The 80k triangle wall
Smart UV accepts at most 80,000 equivalent triangles, and a quad counts as two. A freshly generated model is usually far over that. So the sane chain is:
Tripo: Generate model → Tripo: Smart low poly → Tripo: Smart UV → Preview 3D
Smart low poly is doing you two favours there: it decimates to a face count the unwrap will accept, and it carries its own Smart UV switch so it can do both jobs in one API call (that needs its later model version). If you're texturing in Blender anyway, unwrapping the low-poly version and baking is the normal route.
Troubleshooting
ComfyUI-Tripo needs tripo3d>=1.0.0,<2.0.0 - the extension moved to Tripo API v3, and the v2 API is switched off after 2026-10-31. Update the pack, then run pip install "tripo3d>=1.0.0,<2.0.0" in the Python environment ComfyUI actually uses. Do it before then: 1.x of the extension stops working that day.
"Failed to get Tripo API balance" - the node checks your balance before it submits anything and prints it to the console (Tripo API balance: …). That error means the key is wrong, in the wrong region, or the account is out of credits - nothing was submitted, nothing was charged.
"Smart UV task … returned no model" - the API took the job and returned nothing useful. Almost always the triangle limit: run Smart low poly first.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model_info | MODEL_INFO | — | |
| export_orientationopt | COMBO | default | 5 options: default, +x, -x, +y, -y |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model_file | STRING | — |
| model_info | MODEL_INFO | — |
| uv_render | IMAGE | — |