Protoface Hunyuan3D V3 · Text to 3D
A mesh in one call, and a face budget you should actually set
- model.3d
- files
- run id
Hunyuan3D is the model the local 3D crowd talks about more than everything else combined, and the honest verdict from inside 3D is that all of it - including Hunyuan's - makes pretty surfaces on bad geometry. So what's the argument for paying Tencent 25 credits to do it remotely? Convenience, in one word: no CUDA wheels, no compiled extensions, no 8GB-VRAM tuning session. And with V3 specifically, a genuine text-to-3D operation instead of the two-stage text-to-image-then-reconstruct pipeline that "text to 3D" usually means in open weights.
What it is
A prompt goes in, a textured mesh comes out. No local inference, no checkpoint - this is the Protoface pack's generated node over Tencent's hosted Hunyuan3D V3 API, priced flat per job (25 credits in the pack's catalog) rather than per second, which makes it one of the easier nodes in this pack to reason about financially. Output is a native FILE_3D, so ComfyUI's 3D nodes can take it directly.
Set expectations with the KB's 3D doc before you spend: image-to-3D and text-to-3D produce meshes with impressive silhouettes and machine-generated UVs, and topology that no one has cracked in open weights. Static props, background filler, and 3D prints: usable today. Anything that has to rig or deform: you're doing a retopology pass afterwards. What V3 adds over the open releases is that it's hosted, current, and reachable from a workflow without installing anything.
The controls, and which ones earn their keep
prompt is the only required field, capped at 1024 characters. The corpus observation that holds across every one of these models is that hard-surface objects - props, weapons, vehicles, buildings - reconstruct far better than organics. Write for a solid object with a clear silhouette and this node sings; write "a wizard casting a spell" and you'll get a blob with a hat.
face_count is the setting I'd change first, and it defaults to 500,000. That's a print-grade mesh. For anything destined for a game engine, a realtime viewer, or a turnaround render, 100k–200k is plenty and saves you a decimation step. The range runs 40,000 to 1,500,000.
generate_type picks the flavour: Normal gives a textured model, LowPoly does polygon reduction, Geometry returns a white untextured model. Honestly, Geometry is underrated as a first pass - you pay once to see whether the shape is right before deciding you care about the texture.
polygon_type is triangle or quadrilateral and, per the field's own description, only takes effect when generate_type is LowPoly. If you're heading into Blender for cleanup, quads are the kinder starting point.
enable_pbr is a boolean, default off. Turn it on when the asset is going somewhere it will be relit - you get metalness/roughness style material channels instead of a single baked diffuse map. PBR is the one place Hunyuan's pipeline is furthest along, and it's also the thing most hosted wrappers quietly don't expose. This one does.
Outputs
model.3d (FILE_3D, a list), files, and run id.
The README's warning matters here: a 3D file's actual format is authoritative, and a GLB-only downstream consumer may need a conversion if the provider returned something else. The pack saves the real bytes with the extension derived from the response's content type - GLB, GLTF, OBJ, STL, PLY or FBX are all plausible. Check what you got before wiring it into a GLB-expecting node, and use Protoface Save File to get the original onto disk in output/ with a predictable prefix.
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 through Manager: search Protoface, install protoface-nodes, restart, reload the browser. ComfyUI 0.41.0+, Python 3.10+, requirements installed with ComfyUI's own interpreter. Then the Protoface button in the lower right takes your API key; headless installs set PROTOFACE_API_KEY or PROTOFACE_API_KEY_FILE.
Note what isn't in that list: no model weights, no CUDA, no 3D-Pack. That's the whole reason this node exists next to the local options.
Traps
Face count inflation. The default is a 500k mesh, which is heavy in your viewport and heavier in whatever you export it to. Set it deliberately.
Texturing hides bad shape. Enable Geometry type occasionally and look at the bare mesh; you'll notice the melted edge loops that the texture was camouflaging before you build on it.
generation_id is not a seed. Keep it fixed and queueing again hands back the same paid job. Increment it when you want a different model. And after a ComfyUI restart, re-enter the API key - it lives in server memory, not the workflow.
Cancelled isn't refunded. Interruption requests cancellation and that's best effort.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the 3D content to generate. Supports up to 1024 UTF-8 characters. | |
| enable_pbr | BOOLEAN | false | Whether to enable PBR material generation |
| face_count | INT | 50000040000–1500000 | Target face count. Range: 40000-1500000 |
| generate_type | COMBO | Normal | Generation type. Normal: textured model. LowPoly: polygon reduction. Geometry: white model without texture. |
| polygon_type | COMBO | triangle | Polygon type. Only takes effect when GenerateType is LowPoly. |
| 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 | — |