Tripo: Generate model
Text and images become 3D meshes in the cloud
- image
- image_left
- image_back
- image_right
- model_file
- model_info
This is the node that starts every Tripo workflow, and it's also the one that misleads people the most. The name says "Generate model," which sounds like it's doing heavy lifting on your GPU. It isn't. There's no local model, no inference, no VRAM usage - you type a prompt, press go, and Tripo's servers do all the work. Your machine just sends text or images over the wire, polls for a task result, and downloads the finished mesh. That's the whole job, and it explains both why the node is so light and why it needs an API key.
Tripo is the hosted 3D generation service from VAST AI, and this repo is their own ComfyUI integration - so it tracks new API models as they ship (the draft node currently defaults to v3.1-20260211, with v1.4 through v3.0 still selectable). It's real, people use it, and it's gotten dramatically better since v2.0. Just don't expect offline generation.
What it actually does
The node has one mode - text_to_model, image_to_model, or multiview_to_model - and the other inputs light up depending on which you pick:
- text_to_model just needs
prompt(and optionallynegative_prompt). - image_to_model needs an
image; Tripo reconstructs a single photo into a 3D mesh. - multiview_to_model takes a front
imageplusimage_left,image_back,image_right- the way to fix the "back of the head is garbage" problem with a single reference. Only supply the views you have; it'll take whatever's connected.
Beyond that, the few inputs a beginner actually touches: model_version (pick the newest unless you have a reason not to), texture and pbr (both default on - you get a colored mesh plus PBR maps, not a gray lump), and the three *_seed fields if you want reproducible runs. face_limit caps the polygon budget (-1 means no limit), and smart_low_poly hands the draft straight to the low-poly pass. One subtle gotcha: geometry_quality, texture_alignment, and orientation only apply to the image modes - text_to_model ignores them.
The node returns two things. model_file is a plain string path to the downloaded file in ComfyUI/output/ (prefix it via file_prefix if you want). model_info is the interesting one: a small dict carrying the cloud task_id, your key, and file naming - you wire it into every other Tripo node downstream. Don't overthink it; treat model_info as "this mesh, handled by the cloud."
Installing it
The pack has three real install paths. ComfyUI Manager is easiest - search "Tripo for ComfyUI" in the Custom Nodes Manager. Or clone it yourself:
cd ComfyUI/custom_nodes
git clone https://github.com/VAST-AI-Research/ComfyUI-Tripo
cd ComfyUI-Tripo && pip install -r requirements.txt
The only dependency is the official tripo3d Python SDK, so nothing heavy. comfy node registry-install comfyui-tripo also works if you use comfy-cli.
You also need a key from platform.tripo3d.ai. Set it as the TRIPO_API_KEY environment variable, drop it in a config.json in the pack folder, or paste it straight into the node's apikey field (leave that blank and it falls back to env/config).
Where people get burned
- It's a network call. If you see connection timeouts to
api.tripo3d.ai, that's the classic failure - the pack even probes both the global and CN endpoints to find which your key works against, but a flaky connection or a regional block will still stop you. - The free tier is slow. The README promises 10–15 seconds for a draft; on the free tier you can wait a lot longer. Not a bug, just economics.
- It's not local. One reddit thread nailed the sentiment: "it's a joke" once people realized the compute isn't on their box. If you need offline text-to-3D, that's the TripoSR / local diffusion route - a different game entirely.
- Nothing previews in the canvas. The file lands in
output/; you'll want a 3D viewer node from another pack, or just open it in Blender.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 3 options: text_to_model, image_to_model, multiview_to_model | |
| apikey | STRING | — | |
| promptopt | STRING | — | |
| negative_promptopt | STRING | — | |
| imageopt | IMAGE | — | |
| image_leftopt | IMAGE | — | |
| image_backopt | IMAGE | — | |
| image_rightopt | IMAGE | — | |
| model_versionopt | COMBO | v3.1-20260211 | 5 options: v1.4-20240625, v2.0-20240919, v2.5-20250123, v3.0-20250812, v3.1-20260211 |
| textureopt | BOOLEAN | true | — |
| pbropt | BOOLEAN | true | — |
| image_seedopt | INT | 42 | — |
| model_seedopt | INT | 42 | — |
| texture_seedopt | INT | 42 | — |
| texture_qualityopt | COMBO | standard | 2 options: standard, detailed |
| geometry_qualityopt | COMBO | standard | 2 options: standard, detailed |
| texture_alignmentopt | COMBO | original_image | 2 options: original_image, geometry |
| face_limitopt | INT | -1-1–500000 | — |
| quadopt | BOOLEAN | false | — |
| compressopt | BOOLEAN | false | — |
| generate_partsopt | BOOLEAN | false | — |
| smart_low_polyopt | BOOLEAN | false | — |
| auto_sizeopt | BOOLEAN | false | — |
| orientationopt | COMBO | default | 2 options: default, align_image |
| file_prefixopt | STRING | — | |
| output_directoryopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model_file | STRING | — |
| model_info | MODEL_INFO | — |