Hy3D Apply Texture
Where your finished texture finally becomes part of the mesh
- texture
- renderer
- trimesh
Up to this point in a Hunyuan3D workflow, your texture is a flat 2D image sitting in a socket. Hy3DApplyTexture is the node that makes it real: it takes that image, attaches it to the renderer's mesh, and returns a proper textured trimesh you can export, inspect, or hand to the next step. It's the bridge between "we painted a picture" and "we have a textured 3D model."
It's a two-input, one-output node and it's about as simple as this pack gets:
texture(IMAGE) - the finished texture from your bake/inpaint chain (Hy3DBakeFromMultiview,CV2InpaintTexture,Hy3DMeshVerticeInpaintTexture, or any combo).renderer(MESHRENDER) - the renderer fromHy3DRenderMultiView. It's not optional, and it's not a formality: the renderer holds the mesh geometry and the UV layout that tells the texture where to wrap. Without it, "apply" has nothing to apply to.
The output is a single trimesh (TRIMESH). Wire it into Hy3DExportMesh (glb/obj/stl/ply) or a Preview3D node to eyeball the result before you commit to a file.
Why the renderer matters
This is where beginners get confused, so it's worth saying plainly: the renderer isn't a "preview" thing, it's a persistent object that carries the mesh's UV mapping from the Hy3DMeshUVWrap step all the way through the texture pipeline. That's why Hy3DBakeFromMultiview and Hy3DMeshVerticeInpaintTexture both pass it through untouched - the whole chain is one long relay of that renderer, and Hy3DApplyTexture is where it finally pays off. If you bake a texture, then skip the renderer pass-through and feed Hy3DApplyTexture a fresh renderer from a different mesh, the texture will land in the wrong places.
Using it
Run it once your texture chain is done. The canonical order from kijai's example workflow:
Hy3DBakeFromMultiview → (optional vertex inpaint) → CV2InpaintTexture → Hy3DApplyTexture → Hy3DExportMesh
No install beyond the pack itself - it ships inside ComfyUI-Hunyuan3DWrapper (ComfyUI Manager, search "Hunyuan3DWrapper", or git clone https://github.com/kijai/ComfyUI-Hunyuan3DWrapper into custom_nodes). The one real-world gotcha is upstream: everything before this node depends on the compiled custom_rasterizer wheel on Windows (Python 3.12 / CUDA 12.6). If your render step never ran, you won't have a valid renderer to apply to - fix that first and this node will behave exactly like it looks.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| texture | IMAGE | — | |
| renderer | MESHRENDER | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| trimesh | TRIMESH | — |