Nodes/civitai-comfy-nodes/comfy / hunyuan3D / texGen
ComfyUI Node

comfy / hunyuan3D / texGen

Hunyuan3D's texture pass, hosted

By civitai·Created 3 months ago·Updated 2 days ago· 44
comfy / hunyuan3D / texGen
  • image_url
  • mesh
  • model_air
  • api_config
  • model
  • fbx_model
  • thumbnail
  • rigged_model
  • rigged_fbx_model
  • animated_model
  • animated_fbx_model
  • basic_animations
  • workflow_id
  • raw_json
model_versionv2
steps1
cfg_scale0.00
samplereuler
schedulernormal
resolution1
vae_num_chunks8000
octree_resolution256
mesh_threshold0.60
seed0
shift1.00
should_remeshfalse
enable_pbrtrue

Here's the workflow that makes image-to-3D actually usable: generate a shape cheap, then spend your real effort on the texture. The Hunyuan3D texGen node is the second half of that - it takes a mesh you already have and repaints it from a reference image, on Civitai's cloud, without a single local model file.

What it is

The comfy / hunyuan3D / texGen recipe in the civitai/civitai-comfy-nodes pack. Mechanically it's identical to its siblings: submit a job to the Civitai orchestration API, poll, get native Comfy outputs back. The difference is which fields it requires. Where imageTo3D just needs a picture, texGen wants two things:

  • image_url - the reference image (IMAGE socket). This is what drives the paint stage; the texture is hallucinated from this picture's look.
  • mesh - a CIVITAI_AIR input, not a file. You fill it by wiring a Civitai Model Selector node and picking the mesh (or by wiring the model output of a prior shapeGen/imageTo3D run if the pack lets you - the selector path is the reliable one).

So the natural loop is: shapeGen (or imageTo3D) makes the geometry → texGen reskins it. The mesh travels as an AIR reference, which means the whole thing stays cloud-side - you never download the GLB just to re-upload it.

The inputs

Beyond the two required ones, the schema is the Hunyuan3D diffusion panel again:

  • model_version - v2, v2.1, v2-mini.
  • enable_pbr - default true, and here it actually matters. PBR means the texture ships as metalness/roughness/albedo channels rather than a single baked diffuse map, so it relights properly in a game engine. Keep it on unless you have a reason not to.
  • should_remesh - default off. Turn it on to let the pipeline rebuild geometry as part of the job; useful if your source mesh is rough.
  • steps, cfg_scale, sampler, scheduler - the texture model's sampling knobs. Defaults are fine.
  • prompt - a text hint for the paint stage, e.g. material descriptors ("rusty metal", "painted wood").

The outputs

model (URL to the textured GLB), fbx_model, thumbnail (IMAGE → wire into Preview Image), then the usual rigged/animated slots that mostly stay empty on Hunyuan3D, plus workflow_id and raw_json.

Installing it

Standard pack install - ComfyUI Manager, search Civitai Comfy Nodes, install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/civitai/civitai-comfy-nodes.git
pip install -r civitai-comfy-nodes/requirements.txt

No model downloads; requests + python-socketio are the only deps.

The gotchas

  • Credentials or nothing. Wire a Civitai Auth node, set CIVITAI_API_TOKEN, or sign in via the sidebar. No token, no texture.
  • The mesh input is the thing people fumble. It's not a file path - it's an AIR socket. If you don't see a place to type a path, that's because there isn't one. Use the Model Selector's Browse button.
  • Metered, per run. Texture passes bill in Buzz; watch raw_json if you're running a lot of iterations.
  • Texture quality ceiling. Hunyuan3D's PBR texturing is "furthest along" of the open pipes, but it's not production-grade. Expect to do cleanup for anything that ships.
  • Organic shapes are the weak spot. Faces, animals, cloth reconstruct worse than hard-surface props across the whole model family. Budget accordingly.
CategoryCivitai/Misc/comfy

Inputs (17)

NameTypeDefaultDescription
image_urlIMAGE
meshCIVITAI_AIR
model_versionoptCOMBOv23 options: v2, v2.1, v2-mini
model_airoptCIVITAI_AIR
stepsoptINT11–150
cfg_scaleoptFLOAT0.000–30
sampleroptCOMBOeuler18 options: euler, euler_ancestral, heun, heunpp2, dpm_2, dpm_2_ancestral, +12
scheduleroptCOMBOnormal7 options: normal, karras, exponential, sgm_uniform, simple, ddim_uniform, +1
resolutionoptINT11–8192
vae_num_chunksoptINT80001000–500000
octree_resolutionoptINT25616–512
mesh_thresholdoptFLOAT0.600–1
seedoptINT00–4294967295
shiftoptFLOAT1.000–2147483647
should_remeshoptBOOLEANfalse
enable_pbroptBOOLEANtrue
api_configoptCIVITAI_CONFIGOptional Civitai Auth connection; defaults to CIVITAI_API_TOKEN or stored OAuth login.

Outputs (10)

NameTypeDescription
modelSTRING
fbx_modelSTRING
thumbnailIMAGE
rigged_modelSTRING
rigged_fbx_modelSTRING
animated_modelSTRING
animated_fbx_modelSTRING
basic_animationsSTRING
workflow_idSTRING
raw_jsonSTRING