Protoface Tripo H3.1 · Image to 3D
Quads, orientation, and where the texture lands
- model.3d
- files
- run id
Single-image-to-3D is the job that actually works in this field. You have a picture - generated, photographed, whatever - and a hosted model invents the geometry behind it. Tripo H3.1's image-to-3D operation costs 20 credits a job in the Protoface catalog, double its text-to-3D sibling, and the extra controls it exposes over that sibling are precisely about the two things that make or break an image-driven reconstruction: which way the model faces, and where the texture ends up.
What it is
The Protoface pack's node over Tripo AI's hosted image-to-3D API. Native ComfyUI image in, FILE_3D out, no local weights. Tripo is the same lab (VAST) that shipped the MIT TripoSR - the sub-second feed-forward model that's stayed useful long after its quality was surpassed, because it's tiny and permissive. H3.1 is their current hosted generation, and the reason to reach for it over Hunyuan or a local install is the mesh controls: quad topology, explicit face limits, split seeds for geometry and texture.
Worth keeping the KB's 3D verdict in frame: topology is what no one has solved, and quads are the closest thing to a real lever on it. If you're handing the mesh to a modeller afterwards, quad output can save an hour of retopo; if you're printing it, none of that matters and you're overpaying for topology you'll never use.
The inputs, in the order they matter
image (required) is the reconstruction source. It takes a native ComfyUI image in Image mode, or a Protoface Reuse Result Asset handle in References mode - the latter if the picture came from another node in this graph, so you skip the second upload. The picture's quality decides most of the result: one clean subject, plain background, even light. A busy scene gets you a busy lump.
orientation - default or align_image. The field's own description is the useful bit: align_image auto-rotates the model to match the input image. If your reference is three-quarter view and you want the result to sit in that same orientation in a scene, this is the switch that does it, instead of you rotating by eye in Blender.
texture_alignment - original_image (default) aligns textures to the input image, geometry aligns them to the generated geometry. The default is generally what you want for a straight reconstruction; the geometry option matters when the texture you care about is bound to the surface the model invented rather than the photo you gave it.
quad - four-sided topology instead of triangles. The single most consequential boolean on the node for downstream editing.
face_limit - optional (1,000–2,000,000); leave it unset and the model adaptively chooses. Set it when a realtime target needs a number you can defend.
texture / pbr / texture_quality - textures on by default, PBR materials on by default, quality standard or detailed. (geometry, no texture) is the cheap shape-check configuration.
auto_size - real-world scaling, which matters the moment the asset joins a scene next to anything with a known size.
geometry_quality - standard or detailed.
image_seed, model_seed, texture_seed - Set-mode and optional. Geometry and texture are separately seeded, so you can hold a shape you like and reroll only its paint.
Plus generation_id - the paid job's identity; keep it fixed to reuse or resume, increment to buy a fresh generation, and don't confuse it with any seed - and request_scope, the non-secret per-node scope the frontend assigns and headless clients must provide.
Outputs
model.3d, files, run id. The extension follows the provider's actual content type (GLB, GLTF, OBJ, STL, PLY, FBX are all possible), so confirm before feeding a strict downstream node. Send files to Protoface Save File for the original in output/, and keep run id for Protoface Resume Run if a job times out - it retrieves the run without submitting anything new.
Install
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
Or Manager → search Protoface → protoface-nodes → restart → reload the browser. Needs ComfyUI 0.41.0+ and Python 3.10+; install the requirements with ComfyUI's interpreter (httpx, jsonschema, Pillow, av), then enter an API key from the Protoface panel in the lower right - or set PROTOFACE_API_KEY / PROTOFACE_API_KEY_FILE on a headless server.
Traps
Quad is not free quality. It gives you cleaner topology on an asset whose silhouette is still an invention; a bad reference produces well-formed garbage.
Orientation surprises. align_image matches the photo's camera, not the world's up-axis. If the mesh arrives lying on its side, that's usually the input photo's angle being faithfully reproduced.
Key in memory only. Restart ComfyUI and you're logged out. And a fixed generation_id with a changed image is a trap in both directions - the pack treats changed inputs as a new request, but the journal can still hand back the recorded run, so increment deliberately when you want a different model.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | A public URL, a data URI, or an asset id. | |
| auto_size | BOOLEAN | false | Auto-scale the model to real-world dimensions. |
| face_limit | COMBO | Target number of faces for the generated mesh. If not set, the model adaptively determines the count. | |
| geometry_quality | COMBO | standard | Quality level for geometry. |
| image_seed | COMBO | Seed for the text-to-image step. | |
| model_seed | COMBO | Seed for geometry generation reproducibility. | |
| orientation | COMBO | default | Model orientation. 'align_image' auto-rotates to match the input image. |
| pbr | BOOLEAN | true | Whether to generate PBR (Physically Based Rendering) materials. If true, texture is also enabled. |
| quad | BOOLEAN | false | Generate quad (4-sided) mesh topology instead of triangles. |
| texture | BOOLEAN | true | Whether to generate textures for the model. |
| texture_alignment | COMBO | original_image | How textures are aligned. 'original_image' aligns to input image, 'geometry' aligns to generated geometry. |
| texture_quality | COMBO | standard | Quality level for textures. 'detailed' produces higher-resolution textures. |
| texture_seed | COMBO | Seed for texture generation reproducibility. | |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model.3d | FILE_3D | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |