☁️BizyAir BAE Normal Map
BizyAir BAE Normal Map — ComfyUI Node Guide
- image
- IMAGE
Normal maps and depth maps get lumped together constantly because they come from the same part of the ControlNet toolkit, but they're encoding genuinely different information, and it's worth being clear on the difference before you reach for this node instead of a depth preprocessor.
A depth map tells you how far away something is. A normal map tells you which direction a surface is facing. BAE is the standard normal-map estimator used across the ComfyUI ecosystem for exactly this - it's the go-to when the question your conditioning needs to answer is about surface orientation, not distance.
Why you'd reach for normals specifically
Surface direction is the information a renderer (or, here, a diffusion model) needs to reason about how light should fall across a surface - which faces point toward a light source and should look bright, which face away and fall into shadow. That makes normal maps a natural pairing with relighting workflows: feed the model a normal map of your subject and you can more reliably push a new lighting direction onto it while a plain depth or edge map wouldn't give the model enough information to reason about light convincingly.
It's a narrower use case than depth or canny - most day-to-day ControlNet work (locking composition, matching a pose, preserving edges through a style change) is depth or edge territory. Reach for normals specifically when lighting direction and surface shading are the thing you're trying to control.
Inputs and outputs
Same minimal shape as the other preprocessors in this pack:
- image - required.
- resolution - optional, default 512, range 64–1024 in steps of 64. Processing resolution for the normal-map extraction, not your output image size.
Output: a single IMAGE - the normal map, typically rendered in the familiar blue/purple-tinted color scheme that encodes surface direction as RGB channels (each axis of the normal vector mapped to a color channel).
How to install it
Ships with the full BizyAir pack.
ComfyUI Manager: search "BizyAir," Install, restart.
git clone:
cd ComfyUI/custom_nodes
git clone https://github.com/siliconflow/BizyAir.git
API key required, same as every node in the pack.
Common issues
No ControlNet model to pair it with. This is worth checking before anything else: segmentation and normal-map ControlNet conditioning are both examples of conditioning types that were common on SDXL's era of union ControlNet models but generally didn't get carried forward into the ControlNet unions shipped for newer architectures like Flux. If you're building a normal-map-conditioned workflow, confirm you actually have a normal-trained ControlNet checkpoint available for your base model - this preprocessor producing a clean map doesn't guarantee there's something downstream that can consume it.
Expecting depth-like behavior. If you plug a normal map into a workflow expecting depth-style spatial locking and the result doesn't hold the composition the way you expected, that's the wrong tool for the job - normals constrain shading direction, not distance or layout. Switch to a depth preprocessor if spatial composition is actually what you're after.
Flat or low-detail source images produce flat normal maps. Since the estimator is inferring 3D surface orientation from a single 2D image, very flat, low-contrast, or heavily stylized source images (flat-shaded illustration, for example) will give it less to work with, and the resulting normal map will carry correspondingly less useful detail. This is a limitation of monocular estimation generally, not something the resolution setting will fix.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| resolutionopt | INT | 51264–1024 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |