Nodes/Runware.ai ComfyUI Inference API Integration/ControlNet Preprocess NormalBae
ComfyUI Node

ControlNet Preprocess NormalBae

ControlNet for People Who Care About Light

By Runware·Created 2 years ago·Updated about a month ago· 140
ControlNet Preprocess NormalBae
  • image
  • image
ttlfalse
ttl_value60
outputFormatJPG

Most ControlNet preprocessors answer "where are the edges?" or "where are the people?" NormalBae answers "which way does every surface face?" - and that's the question you ask when lighting, form, and 3D believability matter more than outlines. Runware_controlnet_preprocess_normalbae runs that surface-normal extraction on Runware's cloud: image in, a color-coded normal map out as an IMAGE. Normal maps are the preprocessor of choice for relighting, product shots, and any generation where the way light wraps around an object has to survive.

How it works

BAE (Bridging Appearance and Edge) is the estimator family behind this one - it reads an image and produces per-pixel surface orientation, usually rendered as an RGB map where each channel encodes a direction. Wire that into a ControlNet and the model inherits the source's form and shading logic: spheres stay round, corners stay sharp, and light lands the way the source says it should. Like every preprocessor in this pack, the extraction happens server-side; you don't host the weights, you pay a fraction of a cent per map.

The inputs

  • image (required) - the source whose surface geometry you want to preserve.
  • outputFormat (JPG/PNG/WEBP) and ttl (toggle + value) - delivery details.

Output is image - the normal map. JPG will technically hold it, but for a normal map, PNG avoids compression artifacts in the color channels that define direction - worth reaching for if your map feeds a finicky model.

Wiring it up

The canonical chain: this node → RunwareBuild_controlNet (guideImage) → an image model's controlNet socket. On the builder, weight controls how hard the surface form grips the output - normal maps want a decent weight for the structure to survive, and lowering it too far just gives you a vaguely 3D-flavored image instead of one that matches the source's form.

Install and setup

Standard for the pack: ComfyUI Manager → "Runware" → install → restart, or clone and pip install -r ComfyUI-Runware/requirements.txt (runware-sdk, pillow, soundfile). API key via Settings → Runware API key, RUNWARE_API_KEY, or runware auth login, and funded credits - the ~$20 minimum top-up with a card on file being the standard entry friction.

Troubleshooting

  • Map looks like an RGB mess - that's actually what normal maps look like; don't judge them by eye the way you'd judge a depth map. If it looks colorful and smooth, it's probably working.
  • Generation's lighting ignores it - raise weight in the builder and make sure the map is feeding guideImage. Normal control is subtler than edge control; it needs enough weight to be felt.
  • Source is too flat - a diffuse, poorly lit photo gives weak normals. Good lighting in, good form out.

NormalBae is the preprocessor you reach for when "describe it nicely" isn't enough - when the object's form and how light falls on it are the whole point. For product work and anything lighting-driven, it's the quiet workhorse of the ControlNet family.

CategoryRunware/Image/runware

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
ttloptBOOLEANfalseEnable to set ttl. Off uses the model's default.
ttl_valueoptINT60Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`.
outputFormatoptCOMBOJPGFile format for the generated image.

Outputs (1)

NameTypeDescription
imageIMAGE