Nodes/houdini-comfyui-bridge/Trimesh UV Unwrap
ComfyUI Node

Trimesh UV Unwrap

Fixing Hunyuan3D's machine-made UVs — Trimesh UV Unwrap

By CapybaraCrowporation·Created 10 months ago·Updated 3 months ago· 110
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:

  1. it tries to import the trimesh Python library - if that import fails, it prints no trimesh module! acting as a noop and passes the mesh through unchanged,
  2. if your input is a trimesh.Scene (a collection of meshes), it flattens to the primary geometry first,
  3. 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.

Categorysd

Inputs (1)

NameTypeDefaultDescription
trimeshTRIMESHYeah, the trimesh goes here.

Outputs (1)

NameTypeDescription
trimeshTRIMESH