BD Combine Edge Metadata
Merge edge marks from two detectors without the face-split vertex mess
- reference_mesh
- edge_metadata_1
- edge_metadata_2
- edge_metadata_3
- edge_metadata_4
- edge_metadata
- status
In the low-poly game-asset pipeline this pack is built around, "edge metadata" is the map of which edges are supposed to stay sharp - hard corners, material boundaries, seams. Different detectors find different edges: the pack's BD Planar Grouping finds structure-based boundaries (flat regions meeting), BD Blender Edge Marking finds color- and angle-based edges. One detector alone always misses some. BD Combine Edge Metadata unions the edge sets from up to four sources into a single EDGE_METADATA output that downstream nodes (like BD Blender Merge Planes, which respects sharp edges when dissolving) consume.
The subtle part - and the reason this node exists rather than a naive set-union - is how it deduplicates. It says so in the node description: position-based, not index-based. In a face-split mesh, the same geometric edge can exist as different vertex indices in different sources, because one detector split a face where another didn't. Comparing indices would produce duplicate edges and miss merges. Comparing vertex positions (at a configurable precision, default 5 decimal places) correctly recognizes that edge as one, regardless of which indices each source assigned.
The inputs
- reference_mesh - the TRIMESH that will be passed downstream. Connect it to enable index remapping so the merged output uses the downstream mesh's vertex indices (which is what Merge Planes needs). Without it, the output uses indices from whichever source first contained each edge - which may not match your final mesh.
- edge_metadata_1 - required first source.
- edge_metadata_2 / 3 / 4 - optional additional sources.
- position_precision - decimal places for position comparison (3–8, default 5 = 0.00001 units). Lower is more aggressive merging - two edges whose vertices are within 0.001 units count as the same edge.
Outputs: edge_metadata (the union) and status (STRING).
The workflow shape
The node's own docs draw it out:
[Mesh] ─┬→ [PlanarGrouping] ─→ edge_metadata_1 ─┐
└→ [EdgeMarking] ───→ edge_metadata_2 ─┼→ [BD Combine Edge Metadata] → [MergePlanes]
[Final Mesh] ─────────────────────────────────→ reference_mesh ────────────────┘
Structural boundaries from one branch, color/angle edges from another, combined into one set and handed to the dissolve step with correct indices. If you're building the pack's hard-edge pipeline (Planar Grouping → Edge Marking → Merge Planes), this is the glue in the middle.
Installing it
Part of BizaNator/ComfyUI-BrainDead (BrainDeadGuild). ComfyUI Manager → search "BrainDead" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/BizaNator/ComfyUI-BrainDead
cd ComfyUI-BrainDead
pip install -r requirements.txt
Restart; it's under 🧠BrainDead/Mesh.
Gotchas
The big one: forget to wire reference_mesh and the merged metadata can carry indices that don't exist in your final mesh, and Merge Planes will silently misbehave - edges won't dissolve where they should. Wire it. Second: position_precision is the knob you'll tune when edges that should merge aren't (drop it from 5 to 4) or when distinct nearby edges are collapsing together (raise it). And note it only combines edge metadata - if your sources disagree about whether an edge is sharp, this node doesn't arbitrate, it just keeps the union. If that matters to you, reconcile upstream.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| reference_mesh | TRIMESH | Reference mesh for position-based deduplication and index remapping. Should be the mesh that will be passed to downstream nodes. | |
| edge_metadata_1 | EDGE_METADATA | First edge metadata source (required) | |
| position_precision | INT | 53–8 | Decimal precision for position comparison (5 = 0.00001 units). Lower = more aggressive merging. |
| edge_metadata_2opt | EDGE_METADATA | Second edge metadata source (optional) | |
| edge_metadata_3opt | EDGE_METADATA | Third edge metadata source (optional) | |
| edge_metadata_4opt | EDGE_METADATA | Fourth edge metadata source (optional) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| edge_metadata | EDGE_METADATA | — |
| status | STRING | — |