Mesh Customdata Custom Splitnormals Add
Locks in editable normals instead of Blender's auto-calculated ones
- BPY_OBJ
- BPY_OBJ
Normals aren't something most people think about until shading looks wrong - a face that should be flat looks faceted, or a smooth surface has a visible seam where it shouldn't. This node wraps Blender's bpy.ops.mesh.customdata_custom_splitnormals_add operator, and it's the step that lets you take manual control of that.
What it actually does
By default, Blender calculates a mesh's normals automatically from face angles and smoothing settings - you don't store them, they're derived on the fly. Custom split normals is an optional data layer that overrides that: once it exists, each face corner can have its own explicit normal direction, independent of the underlying geometry's actual angles. This is what lets tools like the Weighted Normal modifier, Data Transfer, or manual normal-editing tools bake in specific shading behavior - for instance, making a low-poly mesh read as smoother than its actual topology, a common trick for stylized or game-ready assets.
Running this operator doesn't change how the mesh looks by itself. It takes a snapshot of whatever normals Blender would currently calculate and freezes them as editable custom data. Nothing shifts until something downstream actually modifies those frozen normals.
The input and output that matter
BPY_OBJ(optional) - the mesh to add the custom split-normals layer to.
Output is the same BPY_OBJ, geometry unchanged, now carrying normals you (or a downstream node) can edit independently of face angles.
How to install it
Search Avatar Graph in ComfyUI Manager, or install manually:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui
python -m pip install -r requirements.txt
Restart afterward. The pack is pinned to bpy==3.6.0, which only works under Python 3.10.x - the README's prebuilt Python-3.10 ComfyUI zip covers Windows, and a dedicated conda environment (conda create --name comfyui python=3.10) is the reliable path on Mac/Linux. Expect opencv-python, mediapipe, and segment-anything to install alongside it, unpinned but not trivial in size.
Common issues & troubleshooting
"I added custom split normals and shading looks exactly the same." That's expected - this node snapshots Blender's current auto-normals as editable data, it doesn't change them. If you were hoping for a visible shading fix, you need a step after this one that actually modifies the normal values (a Weighted Normal modifier, Data Transfer from another mesh, or manual editing).
Shading looks worse after later steps in your graph. If something downstream is writing bad or inconsistent normal data into this layer, the mesh can end up shading worse than it did with Blender's automatic calculation - custom normals override the sensible default, so a mistake here is visible in a way a mistake in, say, vertex crease isn't.
bpy import failures at startup. That's the Python 3.10.x pin, not this node - check your interpreter version before assuming anything's broken in the graph itself.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |