Mesh Smooth Normals
ComfyUI Node Guide
- BPY_OBJ
- BPY_OBJ
Mesh Smooth Normals is a small but handy shading-fix node from Avatar Graph, Avatech's pack for rigging static character art into real-time interactive avatars inside ComfyUI. If a mesh part in your rig is looking a bit chunky or faceted where you'd expect it to read as smooth, this is the node that softens it, without touching the actual geometry.
It's a direct wrapper of Blender's bpy.ops.mesh.smooth_normals operator, from Blender's Mesh > Normals toolkit. Here's the useful distinction: this isn't the same as Shade Smooth (which just changes how faces are shaded/interpolated) - it actually averages each vertex's normal vector with its neighbors', blending the surface's lighting response by a controllable amount. That's a subtler, more gradual effect than a hard smooth/flat toggle, which makes it a good fit for cleaning up shading on meshes generated programmatically - like the mesh layers Avatar Graph builds from segmented character artwork, which can come out with slightly rough or blocky normals depending on how the geometry was constructed.
There's exactly one thing to configure:
- factor - how strongly to blend each vertex's normal toward its neighbors' average, from 0 (no change) to 1 (fully averaged/maximally smooth). The default of 0.5 is a reasonable middle ground - enough to soften obvious faceting without erasing intentional shape detail. Push it toward 1 if a part still looks blocky; pull it toward 0 if smoothing is washing out detail you wanted to keep.
Output is the same BPY_OBJ, with adjusted vertex normals - geometry unchanged, shading softened.
Where this fits in a typical avatar-building sequence: it's a late-stage polish step, something you'd run after mesh generation and cleanup (things like Mesh Remove Doubles or Mesh Tris Convert To Quads) but before or alongside texturing, once the topology itself is settled and you're just refining how light plays across the surface.
Installing it: no standalone install - this node comes with the full Avatar Graph pack. Easiest path is ComfyUI Manager, searching "Avatar Graph" or avatar-graph-comfyui. Manual install: cd ComfyUI/custom_nodes, git clone https://github.com/avatechai/avatar-graph-comfyui, cd in, pip install -r requirements.txt, restart ComfyUI.
The install detail that actually causes problems: Avatar Graph needs Python 3.10.x specifically, because its bpy dependency - Blender's Python API packaged as a standalone library - only ships wheels for that version. A newer Python, which is the default on most fresh ComfyUI setups, means the install just fails outright. The README's fix is a dedicated environment: conda create --name comfyui python=3.10, activate it, install ComfyUI's requirements, then this pack's on top. For the live avatar preview inside Avatech's own web editor, also launch with --enable-cors-header (Mac: add --force-fp16); without that flag, shading and everything else still compute correctly, you just export .glb/.gltf and view the result in Blender instead of getting the live in-browser preview.
If you find factor doesn't seem to be doing anything visible, double-check the mesh actually has the geometry you think it does upstream - like most of this pack's mesh-editing nodes, it operates on whatever BPY_OBJ state has been built up so far in the graph, not some independent copy.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| factoropt | FLOAT | 0.500–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |