Trimesh UV Unwrap
Fixing Hunyuan3D's machine-made UVs — Trimesh UV Unwrap
- trimesh
- trimesh
Image-to-3D models are great at surfaces and terrible at topology. The community verdict on the whole category - Hunyuan3D included - has been consistent for years: the silhouette is impressive, and underneath, the UV unwrap is a mess. When you pull a generated mesh into a texturing tool and the seams and stretching make no sense, that machine-made UV layout is usually the reason. HouCuiTrimeshUnwrapProperly (display name "Trimesh UV Unwrap") is the author's attempt to fix exactly that: it just calls trimesh.unwrap() on your mesh and hands you back one with freshly computed UV coordinates.
The class docstring says it all: "just call trimesh.unwrap(). temporary helper for Hy3D Wrapper node pack." It's a stopgap written to bolt onto the Hunyuan3D wrapper pack (the "Hy3D" shorthand - Kijai's ComfyUI-Hunyuan3DWrapper is the standard way to run Hunyuan3D in ComfyUI, and it emits meshes on the TRIMESH socket). The name's "Properly" is doing a lot of work: it's a jab at the unwraps the model produces, and the claim that this node does it better.
How it works
One input, trimesh (type TRIMESH, tooltip: "Yeah, the trimesh goes here."), one output trimesh back out. In between:
- it tries to import the
trimeshPython library - if that import fails, it printsno trimesh module! acting as a noopand passes the mesh through unchanged, - if your input is a
trimesh.Scene(a collection of meshes), it flattens to the primary geometry first, - then it runs
.unwrap()and returns the result.
Two practical facts follow directly. First, if you don't have trimesh installed, this node is a wire - it does nothing and tells you so in the console. Second, unwrapping isn't free: trimesh's unwrap solver is a real computation, and it typically uses the xatlas library for the fast path when xatlas is present, falling back to a slower built-in solver otherwise. If you care about speed or quality, install xatlas alongside trimesh.
The honest limits
This is a UV recompute, not a topology fix. The underlying mesh is still triangle soup with no clean edge loops - the 3D KB puts it bluntly: generated meshes are fine for static props and 3D prints, useless for anything that has to deform or be rigged. Re-unwrapping gives you a cleaner UV layout to texture against, but it won't make the mesh production-ready. And since it's a TRIMESH-to-TRIMESH node, it only connects to other nodes speaking the TRIMESH socket type - which means a 3D pack like the Hunyuan3D wrapper, not generic ComfyUI nodes.
Install
This ships in houdini-comfyui-bridge (CapybaraCrowporation/houdini-comfyui-bridge), the community Houdini↔ComfyUI bridge by Rafael Drelich Valentim and Anatolii Iudanov - not a SideFX project, GPL-3.0, open-sourced late 2025 and demoed at SIGGRAPH Asia 2025. For the ComfyUI side:
cd ComfyUI/custom_nodes
git clone https://github.com/CapybaraCrowporation/houdini-comfyui-bridge
Restart ComfyUI (or grab it via ComfyUI Manager, search "houdini-comfyui-bridge"). The pack itself has no hard Python dependencies - trimesh is a lazy import, which is why the node degrades to a noop - but to get actual unwrapping out of it, make sure trimesh is in your ComfyUI Python environment:
cd ComfyUI
pip install trimesh xatlas
The bridge's heavy side is the Houdini plugin (OTLs in your Houdini userdir or HOUDINI_PATH); the usual connectivity gotcha applies - ComfyUI Desktop's default port 8000 vs. the Houdini nodes' 8188.
Verdict
If you're post-processing Hunyuan3D output before texturing, this is a genuinely useful cleanup step that costs one node. Just keep expectations calibrated: better UVs, still a generated mesh. And if the node silently passes your mesh through, the fix is pip install trimesh, not a workflow change.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | Yeah, the trimesh goes here. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| trimesh | TRIMESH | — |