Nodes/ComfyUI-Inference-Core-Nodes/[Inference.Core] BAE Normal Map
ComfyUI Node

[Inference.Core] BAE Normal Map

Surface direction, not distance — the ControlNet condition people forget exists

By LykosAI·Created 2 years ago·Updated about a year ago· 33
[Inference.Core] BAE Normal Map
  • image
  • IMAGE
resolution512

Depth tells a model what's near and what's far. Normal maps tell it something different and often more useful: which direction every surface faces. A depth map of a sphere is a gradient; a normal map of the same sphere shows every point on its curve pointing a slightly different way. That distinction matters for anything relighting-adjacent - if you're pairing this with an IC-Light-style workflow, or you want the model to respect fine surface curvature rather than just front-to-back placement, normal maps are the condition to reach for. BAE is the standard normal-map estimator this whole ecosystem converged on for ControlNet work.

How it works

BAE predicts per-pixel surface orientation directly from a single 2D image - no depth map computed first and then converted, it's trained to estimate normals natively. The output is the classic tri-color normal map look: each color channel encodes one axis of the surface direction, so you get the recognizable blue-purple-green gradient shading rather than a grayscale depth image. Feed it to a normal-map ControlNet and the model steers generation to respect that surface geometry.

The inputs and outputs that matter

The simplest possible node - one setting beyond the image:

  • image - required, your source image.
  • resolution (default 512) - working resolution.

One output: IMAGE, the normal map, wired into a normal-map ControlNet (not a depth ControlNet - the two aren't interchangeable, even though both nodes live in the same category here).

How to install it

ComfyUI Manager: search ComfyUI-Inference-Core-Nodes, install, restart. By hand:

cd ComfyUI/custom_nodes
git clone https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes

then run install.py, or pip install -e .[cuda12] (or .[cuda] / .[rocm] / .[directml] / .[cpu]). Restart ComfyUI. The BAE model weights download from Hugging Face the first time you run the node.

Common issues & troubleshooting

The mistake that actually happens with this node isn't a setting, it's a mismatch: loading a depth ControlNet and feeding it a normal map (or vice versa). They're both grayscale-ish spatial conditioning images and it's an easy swap to make by accident, but the ControlNet model was trained on one specific condition type and won't correctly interpret the other - results come out subtly wrong rather than obviously broken, which makes it a sneaky bug to spot. Double-check your ControlNet checkpoint is actually the normal-map variant before troubleshooting anything else.

Otherwise there's genuinely little to go wrong here - no model size picker, no mode toggle, just an image in and a normal map out. If the output looks flat or low-contrast, that usually means the source image itself has low surface detail (flat lighting, low-relief subject) rather than anything to fix on the node.

CategoryControlNet Preprocessors/Normal and Depth Estimators

Inputs (2)

NameTypeDefaultDescription
imageIMAGE
resolutionoptINT51264–2048

Outputs (1)

NameTypeDescription
IMAGEIMAGE