Nodes/BrainDead Nodes/BD Blender Decimate
ComfyUI Node

BD Blender Decimate

The decimator that remembers your color boundaries

By BizaNator·Created 8 months ago·Updated 3 days ago· 15
BD Blender Decimate
  • mesh
  • color_field
  • mesh
  • status
target_faces5000
pre_cleanuptrue
detect_color_edgestrue
color_edge_threshold0.15
fill_holestrue
remove_internalfalse
internal_methodSIMPLE
planar_angle7.0
sharp_angle14
preserve_boundariestrue
preserve_colorstrue
fix_normalstrue
use_planar_groupingfalse
planar_group_angle15
planar_group_min_size10
timeout600
debug_path

Plain decimation is easy - shrink a mesh to a target face count and watch every hard edge dissolve into mush. That's useless for stylized low-poly work, where the whole point is keeping clean silhouettes and crisp color seams at a fraction of the triangle count. BD Blender Decimate is BrainDead's full-featured answer: a Blender-based decimator that detects color boundaries and planar structure before it starts removing geometry, then preserves them as sharp/seam edges while it works.

The headline feature is the color_field input. This is the correct way to keep colors through decimation: wire a COLOR_FIELD (from BD_SampleVoxelgridColors or BD_UnpackBundle) directly into the node instead of pre-applying colors to the mesh. The pack is emphatic about why - pre-applied colors force faces to split at color seams, which destroys the topology you're trying to clean. Sampling colors spatially on clean topology, then preserving them during decimation, gives you a low-poly mesh where the colors and the hard edges actually agree.

The inputs that matter

  • target_faces (default 5000) - the face budget. Everything else is in service of hitting this without wrecking the mesh.
  • detect_color_edges (default on) + color_edge_threshold (0.15) - marks color boundaries as sharp/seam edges. Lower threshold = more edges preserved. This is the "CRITICAL" toggle in the pack's own docs.
  • planar_angle (7°) and sharp_angle (14°) - the planar decimation merge angle and the post-decimation sharp-edge mark angle. Lower planar angle = flatter, more faithful surfaces.
  • use_planar_grouping + planar_group_angle (15°) + planar_group_min_size - optional structure-aware grouping that finds planar regions from face normals and marks their boundaries.
  • preserve_boundaries / preserve_colors - both on; preserve mesh borders and transfer colors with face-based lookup (no bleeding).
  • remove_internal (+ internal_method SIMPLE/RAYCAST) - jacketing cleanup for hidden internal faces, off by default.

Optional: color_field (the star input), timeout, and debug_path to dump a debug GLB when you need to see what went wrong. Outputs: decimated mesh + status.

Install and the Blender gotcha

Pack install is standard - ComfyUI Manager → "BrainDead", or:

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

Restart, update ComfyUI (V3 API required), and - this being a Blender node - make sure a real Blender exists on the system. The README says it's bundled; the binary isn't in the repo. The code checks bundled blender-5.0.1, sibling packs, then /usr/bin/blender. No Blender, no decimation.

Where people get burned: they decimate to an aggressive target and blame the node when the silhouette wobbles - but the real fix is usually detect_color_edges + planar_grouping doing their job, or pre-running BD Blender Cleanup. For a quick stylized look, run this after BD Planar Grouping with straighten_boundaries=True, then finish with BD Blender Merge Planes. That's the pack's documented hard-edge pipeline, and it's genuinely good.

Category🧠BrainDead/Blender

Inputs (19)

NameTypeDefaultDescription
meshTRIMESH
target_facesINT5000100–500000Target face count after decimation
pre_cleanupBOOLEANtrueFix non-manifold geometry before decimation
detect_color_edgesBOOLEANtrueCRITICAL: Detect color boundaries and mark as sharp/seam edges for preservation
color_edge_thresholdFLOAT0.150.01–1Color difference threshold for edge detection (lower = more edges)
fill_holesBOOLEANtrueFill holes in mesh before decimation
remove_internalBOOLEANfalseRemove internal/hidden faces (jacketing cleanup)
internal_methodCOMBOSIMPLESIMPLE=fast, RAYCAST=more accurate but slower
planar_angleFLOAT7.00–45Angle threshold for planar decimation (merge coplanar faces)
sharp_angleFLOAT140–90Angle threshold for marking sharp edges after decimation
preserve_boundariesBOOLEANtruePreserve mesh boundaries during planar decimation
preserve_colorsBOOLEANtrueTransfer vertex colors with face-based lookup (no bleeding)
fix_normalsBOOLEANtrueRecalculate normals to face outward
use_planar_groupingBOOLEANfalseDetect planar groups from face normals and mark boundaries as sharp/seam
planar_group_angleFLOAT151–90Max angle between normals in same planar group (lower = more groups = more preserved edges)
planar_group_min_sizeINT101–1000Minimum faces per group (smaller groups merged into neighbors)
color_fieldoptCOLOR_FIELD
timeoutoptINT60060–3600Maximum processing time in seconds
debug_pathoptSTRINGOptional: Full path to save debug GLB (e.g., /tmp/decimate_debug.glb)

Outputs (2)

NameTypeDescription
meshTRIMESH
statusSTRING