UV Unwrap Mesh
Why Hunyuan3D Meshes Need a Real UV Unwrap (and This Is the Node)
- trimesh
- TRIMESH
Here's the honest truth about image-to-3D in 2026, straight from the people who do it for a living: the surfaces are impressive, the geometry underneath is not. Hunyuan3D gives you a genuinely good-looking silhouette, and then machine-generated triangle soup with UVs that are either nonsense or simply absent. If your goal is a static prop, a render, or a 3D print, that's fine. But if you want to paint or bake a texture onto that mesh - which is the whole point of taking the model's output into a real texturing pass - you need an actual UV unwrap first. That's precisely what Hy3DUVUnwrapMesh exists for. It's the reason this pack exists, honestly.
The node takes the TRIMESH object produced by Hy3DMeshToTrimesh and UV-unwraps it into a single chart atlas using xatlas, so the mesh comes out ready to accept a texture in whatever tool or workflow you feed it next.
How it works
Under the hood it calls xatlas.parametrize(vertices, faces), the same C++ parametrization library used by a lot of production tooling - it's fast and it's the standard for this job. xatlas returns a vertex mapping, remapped face indices, and the UV coordinates, and the node rebuilds a fresh trimesh from those, then attaches the UVs via TextureVisuals(uv=uvs). So the output is a TRIMESH where every vertex carries a UV coordinate, stored the way trimesh expects, ready to be exported alongside a texture map by the pack's save node.
Two things worth knowing about what "single chart" means here. First, it's one connected atlas rather than per-object pieces, which is what texture painting and baking actually want. Second, the unwrap runs on the geometry exactly as Hunyuan3D emitted it - this node does not clean up triangle soup, decimate, or heal non-manifold edges. On hard-surface objects (props, weapons, vehicles) the result is usually workable. On organic models - faces, animals, cloth - expect overlapping or stretched islands, because the input topology is bad and no unwrapper can fix that for you. This is the "good enough to texture" step, not the "professional retopo" step.
Inputs and outputs
trimesh(required): aTRIMESH, straight out ofHy3DMeshToTrimesh.TRIMESH(output): the same mesh with per-vertex UV coordinates attached, ready forHy3DSaveTrimesh.
No parameters. You feed it a mesh, you get a UV'd mesh. The whole node is one input and one output.
Installing it
ComfyUI Manager: search "ComfyUI-Hunyuan3D". Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/UnlimitedEditing/ComfyUI-Hunyuan3D
restart, and make sure the requirements installed - trimesh and xatlas are the two that matter here, and xatlas ships prebuilt wheels for common platforms, so it's normally painless. Remember the pack's registration rule: this node only appears in your menu if trimesh imported successfully, so if it's missing while "Load Image From URL (Hunyuan3D)" shows up, it's a dependency install problem, not a hidden setting.
Where it sits
The pipeline is VoxelToMesh → Hy3DMeshToTrimesh → Hy3DUVUnwrapMesh → Hy3DSaveTrimesh. If you only want a raw shape for printing, you can skip the unwrap entirely - a printer wants watertight, not UV'd. Reach for this node the moment the mesh's next destination is a texture map rather than a slicing program.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TRIMESH | TRIMESH | Trimesh with per-vertex UV coordinates from an xatlas chart unwrap. |