Q Preset GLB Material Modifier
Q Preset GLB Material Modifier
- texture_image
- normal_texture
- modified_glb_path
- emissive_mask_preview
- normal_map_preview
If you've generated a single Hunyuan 3D 2.0 model you know the problem: it comes out looking like a matte plastic toy, and every material tuning session turns into a 20-minute slide of sliders. This node is the shortcut. Pick "Chrome Hull" or "Combat Metal" and it hands you back a .glb that looks the part, plus emissive glows on the bright bits and a generated normal map for surface detail. It's the preset sibling of the manual node in the same angree/ComfyUI-Q_GLB_Material_Modifier pack, and it exists for people who want a decent metal finish without learning the PBR math.
No API, no keys, no downloads - it's a thin wrapper that injects a handful of tuned material values and calls the same engine the manual node uses. Which is honestly the whole story: it's a quality-of-life node, not a different tool.
How the presets work
Under the hood QPresetGLBMaterialModifier is a shim. Each preset is a hardcoded dict of material parameters - metallic, smoothness, a tint color, emissive_strength, brightness thresholds, and a normal_noise level - and the node just feeds them into the manual modifier's machinery. It sets the same PBR values (roughness = 1 - smoothness), generates the same normal maps via Sobel or simple gradient, and embeds everything as base64 PNG textures inside the GLB.
The seven presets cover the obvious material chart:
- Spaceship Metal - balanced metallic, subtle emissive. The default, and a good first try.
- Brushed Steel - lower smoothness, more surface noise.
- Chrome Hull - full metallic, very smooth, high reflectivity. Strongest "mirror" look.
- Chrome Hull Lite - same chrome, softer smoothness, more surface detail so it doesn't look like wet paint.
- Titanium - matte-ish aerospace metal with a cool tint.
- Combat Metal - rough and battle-worn, the lowest smoothness and the most noise.
- Alien Tech - green-tinted, high emissive. The one where the glow is the point.
The inputs you set
The preset node is a trimmed-down version of the manual one - the material knobs are gone because the preset owns them. What's left is the workflow control:
glb_path- a string with the path to your GLB, andtexture_image- the Hunyuan 3D 2.0 diffuse texture. Those two are the entire data in.emissive_mode-No Emissive,With Emissive, orBoth Versions(writes a glowing copy and a plain copy).absolute_min_brightness- the floor for what counts as "bright enough to glow." Lower it if small glows aren't triggering.normal_mode_1/normal_mode_2- pick the auto-generated normal presets (Subtle→Dramatic), orUse Input Texturewith the optionalnormal_textureinput. Two enabled normal modes means you get two variants per emissive mode - up to 4 GLBs in one run.render- flip this off to dry-run the settings and get placeholder previews without writing any files.
Outputs match the manual node: modified_glb_path (a string), emissive_mask_preview and normal_map_preview (images).
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/angree/ComfyUI-Q_GLB_Material_Modifier
cd ComfyUI-Q_GLB_Material_Modifier
pip install -r requirements.txt
Restart ComfyUI afterward, or grab it through ComfyUI Manager (search "Q GLB Material Modifier"). It's a light pack: pygltflib, opencv-python, pillow, numpy, plus whatever torch you already have for Hunyuan 3D. No model files. Note the README's clone command has a YOUR_USERNAME placeholder - the real repo is angree/ComfyUI-Q_GLB_Material_Modifier.
Gotchas
The same ones as the manual node: modified_glb_path returns only the filename, and the file is saved next to the source GLB (which is never modified). And because it rewrites every material in the file with the same values, a GLB with multiple distinct materials gets flattened to one finish - fine for Hunyuan 3D 2.0's typical single-texture outputs, a dealbreaker for anything more complex. If you ever see the literal strings RENDER_DISABLED, FILE_NOT_FOUND, NO_PATH_PROVIDED, or PYGLTFLIB_NOT_INSTALLED on the path output, that's the node's error reporting, not a real path - check pygltflib, then check where you pointed it.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| glb_path | STRING | — | |
| texture_image | IMAGE | — | |
| preset | COMBO | Spaceship Metal | 7 options: Spaceship Metal, Brushed Steel, Chrome Hull, Chrome Hull Lite, Titanium, Combat Metal, +1 |
| output_suffix | STRING | _modified | — |
| emissive_mode | COMBO | With Emissive | 3 options: No Emissive, With Emissive, Both Versions |
| absolute_min_brightness | INT | 12850–200 | — |
| render | BOOLEAN | true | — |
| normal_mode_1 | COMBO | No Normal Map | 7 options: No Normal Map, Use Input Texture, AutoGen Subtle, AutoGen Normal, AutoGen Enhanced, AutoGen Dramatic, +1 |
| normal_mode_2 | COMBO | Disable | 8 options: Disable, No Normal Map, Use Input Texture, AutoGen Subtle, AutoGen Normal, AutoGen Enhanced, +2 |
| normal_algorithm | COMBO | Sobel Filter | 2 options: Sobel Filter, Simple Gradient |
| normal_scale | COMBO | 1x (Original) | 3 options: 1x (Original), 2x (Half Size), 4x (Quarter Size) |
| normal_compression | BOOLEAN | true | — |
| normal_textureopt | IMAGE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| modified_glb_path | STRING | — |
| emissive_mask_preview | IMAGE | — |
| normal_map_preview | IMAGE | — |