Hy3D Sample MultiView
The texture brain — six-view diffusion that paints your mesh into a textured asset
- pipeline
- ref_image
- normal_maps
- position_maps
- camera_config
- scheduler
- samples
- image
Hy3DSampleMultiView is where Hunyuan3D goes from "a gray blob with good bones" to "a textured asset." It runs the actual texture-paint diffusion - Hunyuan3D-Paint-v2-1, a 2B diffusers model - which takes your reference image plus the normal and position maps from Hy3DRenderMultiView, and hallucinates six consistent colored views of the object. Those painted views then get baked into the UV texture map. This node is the texturing stage of the whole pipeline.
It's also the easy place to get confused, because the pipeline input here is not the one from Hy3DModelLoader. That node outputs a HY3DMODEL for the shape stage; this node wants a HY3DDIFFUSERSPIPE, which comes from DownloadAndLoadHy3DPaintModel (the diffusers texture pipeline, autodownloaded on first use). Wrong pipeline type, and it won't even plug in.
The inputs, in order of "you'll actually touch this"
ref_image(IMAGE) - your original source image. This is what the paint model uses to know what the object is supposed to look like.normal_mapsandposition_maps(IMAGE) - straight fromHy3DRenderMultiView. These are the control images that keep the six painted views geometrically consistent with each other.view_size(default 512) - the resolution each view is diffused at. 512 is the sensible default; bumping it costs real time and VRAM.steps(default 30) andseed- standard diffusion knobs. Lower steps = faster but rougher paint.denoise_strength(default 1.0) - set it below 1 to re-paint over existing views (samplesinput) instead of fresh. This is your "redo the texture without redoing geometry" lever.scheduler(optional) - fromHy3DDiffusersSchedulerConfig; skip it and use the pipeline's built-in scheduler.camera_config(optional) - must match the render's if you usedHy3DCameraConfig.
The single output, image, is the batch of painted multiview images. It feeds Hy3DBakeFromMultiview, which projects them onto the UV map using the renderer you threaded through from the render stage.
How the views stay consistent
The six cameras get encoded into the conditioning (the source maps them to a camera_info per angle), the normal and position maps are resized to view_size, and the ref image plus both map stacks go into the multiview diffusers call in one batch. Consistent cameras + consistent control maps = a texture that doesn't have seams where you turn the corner.
Install
Pack-level: Manager search "Hunyuan3DWrapper" or git clone https://github.com/kijai/ComfyUI-Hunyuan3DWrapper, then pip install -r requirements.txt. This is the node that needs the whole texture-gen stack running, so Windows users: the prebuilt custom_rasterizer wheel from wheels/ must match your torch/CUDA (+torch260.cuda126 for the current portable), or you're compiling. The paint model itself autodownloads from HuggingFace on first run.
Common issues
- "Wrong socket" when wiring - you grabbed the pipeline from
Hy3DModelLoader. It needs the paint pipeline'sHY3DDIFFUSERSPIPE. - First run downloads forever - the 2B paint model is big and auto-downloads once. Let it finish; it's not hung.
- Views disagree / seams - you changed cameras between render and sample, or
denoise_strengthis too high for the re-paint case. Keep camera configs identical across the chain. - OOM - drop
view_sizeto 384 or steps to 20; the batch of six views eats VRAM.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeline | HY3DDIFFUSERSPIPE | — | |
| ref_image | IMAGE | — | |
| normal_maps | IMAGE | — | |
| position_maps | IMAGE | — | |
| view_size | INT | 51264–4096 | — |
| steps | INT | 30 | — |
| seed | INT | 00–18446744073709550000 | — |
| camera_configopt | HY3DCAMERA | — | |
| scheduleropt | NOISESCHEDULER | — | |
| denoise_strengthopt | FLOAT | 1.000–1 | — |
| samplesopt | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |