texture_create
Bake normals, curvature, height and highlight maps from one image
- image
- Normals
- Curvature
- Height
- Highlight
If you've ever generated a texture with SD and then sat in Blender watching a flat, boring material, this is the node you were missing. texture_create takes one flat image and bakes four PBR-style maps from it: Normals, Curvature, Height, and Highlight. It's a DeepBump-style normal baker living inside ComfyUI - feed it a diffuse texture, get maps you can drop straight into a material stack or the pack's own texture_render preview.
The lineage is real: DeepBump (HugoTini's Blender addon) is the well-known tool for generating normal and height maps from color textures, and this node wraps its deepbump256.onnx model. On Reddit, DeepBump discussions go back to the "SD textures + Blender" era - people have been doing this workflow for years, just with more steps between.
How it works
The pipeline is four stages, one per output:
- Normals - the flat image is run through the DeepBump ONNX model in 256px tiles.
normals_overlap(SMALL/MEDIUM/LARGE) sets how much tiles overlap; more overlap means fewer seams, slower run. - Curvature - derived from the normals by a directional edge convolution plus a gaussian blur.
curvature_blur(7 steps from SMALLEST to LARGEST) controls how soft the result is - higher = smoother, catches bigger surface bends. - Height - normals integrated into a grayscale heightfield via the classic Frankot-Chellappa method.
height_seamless(on by default) mirrors the edges so the height map tiles without a seam - leave it on unless you want a bordered bake. - Highlight - the one that's not a standard PBR map: it takes pixels brighter than
highlight_threshold(default 200), boosts them byhighlight_contrast, and optionally sharpens with a Laplacian. It's a quick way to fake glossy highlights on a material.
Each map is computed per image in the batch and stacked back into an IMAGE tensor, so a batch of textures bakes in one pass.
Inputs and outputs
- image - the flat texture. Anything works, but clean, even lighting bakes best.
- The four maps: Normals, Curvature, Height, Highlight.
The outputs wire into texture_render for a quick lit preview, or save them and use them in any engine. Normals and Height are the ones you'll actually use in Blender/Unity; Curvature is handy for edge-wear masks; Highlight is the pack's own extra.
Installing it
It's part of ComfyUI-Apt_Preset, but this node has a model dependency the plain install doesn't cover. The DeepBump ONNX file must live at ComfyUI/models/Apt_File/deepbump256.onnx - the README's resource pack (Apt_File) includes it, downloadable from the author's links (or the individual model links on HuggingFace). Install steps:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset
then run install.bat (or pip install -r requirements.txt) - onnxruntime is required and isn't a ComfyUI core dependency.
Common issues
The two classic failures are both self-diagnosing from the console: a missing model raises a clear error naming the Apt_File path it looked for (go download it), and missing onnxruntime raises pip install onnxruntime. If the CPU provider is the only one available, expect slow bakes on big images - that's the tiled inference, not a bug. Beyond that, treat the maps as starting points; DeepBump-style bakes love clean inputs and get mushy on noisy AI textures.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| normals_overlap | COMBO | 3 options: SMALL, MEDIUM, LARGE | |
| curvature_blur | COMBO | 7 options: SMALLEST, SMALLER, SMALL, MEDIUM, LARGE, LARGER, +1 | |
| height_seamless | BOOLEAN | true | — |
| highlight_threshold | INT | 2000–255 | — |
| highlight_contrast | FLOAT | 1.50.1–5 | — |
| highlight_sharpen | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| Normals | IMAGE | — |
| Curvature | IMAGE | — |
| Height | IMAGE | — |
| Highlight | IMAGE | — |