ComfyUI Node Runs on cloud

DSINE Normal Map

The sharp, modern normal estimator for relighting workflows

By Fannovel16·Created 3 years ago·Updated 4 months ago· 4,136
DSINE Normal Map
  • image
  • IMAGE
fov60.00
iterations5
resolution512

DSINE is the newer, sharper normal-map estimator in the pack, and if you want clean surface normals it's a strong pick. A normal map encodes which direction each surface faces - it's what tells a renderer (or a normal ControlNet) about the fine geometry of a scene, the bumps and slopes and facets. DSINE produces noticeably crisper, more geometrically consistent normals than the old MiDaS normal estimator, which makes it a favorite for relighting and material-aware generation.

How it works and where it fits

DSINE estimates surface orientation directly from a single image, and it's built around a couple of nice ideas - using the camera's field of view as a cue and iteratively refining its prediction - which is why its normals hold together better across a scene than gradient-from-depth approaches. Normal maps pair naturally with IC-Light-style relighting: give the model an accurate map of how surfaces face and you can relight or re-material a subject convincingly. As a ControlNet condition, the normal map guides generation toward matching surface geometry.

Within this pack you've got three normal options: MiDaS (oldest, roughest), BAE (the reliable standard), and DSINE (the sharp modern one). DSINE is the one to try when BAE's normals aren't detailed enough. The community reference point for good normal-map ControlNet work has leaned toward DSINE-flavored models for exactly this reason.

The inputs and output

  • image - your source.
  • fov (default 60) - the assumed camera field of view in degrees. DSINE uses this to get the geometry right, so if you know your source was shot wide or telephoto, nudging this to match can improve the normals. The default 60 is a sensible everyday value.
  • iterations (default 5) - how many refinement passes it runs. More iterations can sharpen the result at some time cost; the default is a good balance.
  • resolution (default 512) - processing size; match it to your render.

The single output is an IMAGE - the normal map (that characteristic purple-blue-green look) - which wires into a ControlNet Apply node with a normal ControlNet (control_v11p_sd15_normalbae / control_normal). Inert until that model is loaded.

Installing it

ComfyUI Manager: search ComfyUI's ControlNet Auxiliary Preprocessors, install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/Fannovel16/comfyui_controlnet_aux
pip install -r requirements.txt

Restart ComfyUI. The DSINE weights download from HuggingFace on first run.

Where people get burned

First, the fov value is a real knob, not decoration. A wildly wrong field-of-view assumption skews the normals because the geometry math depends on it. You don't need to be exact, but if your source is an obvious wide-angle or a tight portrait lens and the normals look off, adjust fov toward reality before blaming the model.

Second, normal maps and depth maps are not interchangeable, and neither are their ControlNets. A normal map feeds a normal ControlNet; feed it to a depth model and you'll get garbage. If you want geometry-for-composition, that's depth; if you want surface-orientation-for-lighting, that's normals. Know which job you're doing.

Third, the honest comparison: DSINE is the sharp pick, BAE is the safe standard. If you just want a normal map and don't want to think about it, BAE's single-knob simplicity is fine. Reach for DSINE when you want the extra crispness or you're doing relighting where accurate normals really pay off. And the universal reminder - the map does nothing until a normal ControlNet is loaded and wired through a ControlNet Apply node.

CategoryControlNet Preprocessors/Normal and Depth Estimators

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
fovoptFLOAT60.000–365
iterationsoptINT51–20
resolutionoptINT51264–16384

Outputs (1)

NameTypeDescription
IMAGEIMAGE