BD CuMesh Simplify
Turn a 200k-triangle blob into something a game can eat
- mesh
- mesh
- status
Every image-to-3D model dumps out a mesh with an absurd triangle count and questionable topology - the "extremely low-quality 3d assets" problem the community keeps calling out isn't the look, it's the geometry underneath. BD CuMesh Simplify is the BrainDead node that fixes the geometry side on the GPU. Feed it the triangle soup from TRELLIS2 or Hunyuan3D, say "I want 5,000 faces," and it edge-collapses its way down to something a game engine, a 3D printer, or a Blender session will actually accept.
It's CUDA-only, using the cumesh library. That's both its superpower (fast, proper edge-collapse with BVH acceleration) and its biggest gotcha, which we'll get to.
What it actually does
target_faces is the number you care about (default 5,000). It's a simplification target, not a guarantee - the mesh will land near it. Everything else is cleanup and topology strategy:
- remesh (default off) - optionally runs a dual-contouring remesh before simplifying, for cleaner topology. When on,
remesh_resolution(voxel grid, default 512),remesh_band,preserve_sharp_edges_remesh,remesh_sharp_angle, andproject_back(how much to snap remeshed vertices back to the original surface, 0.9 is a good sweet spot) all come into play. VRAM scales withresolution³, so don't just crank it. - Cleanup toggles: fill_holes, remove_duplicate_faces, repair_non_manifold, remove_small_components (+ a
small_component_threshold). Defaults are sensible - leave them on unless a pass is destroying detail you want. - multi_stage (default on) - progressive simplification: 3× target → clean → 1× target → clean. Better topology than a single pass, slightly slower. Keep it on.
Outputs are just mesh (TRIMESH) and status. Wire the result into BD CuMesh Quad Remesh, a Blender node, or export.
The two gotchas that will actually bite you
1. cumesh is not in the pack's requirements.txt. The BrainDead requirements install Pixal3D's dependencies (moge, utils3d, pipeline, natten), not this. If cumesh isn't in your environment the node just returns ERROR: cumesh not installed - you need to install it yourself, and it's a compiled CUDA package, so this is where a missing CUDA toolkit or an ABI mismatch shows up. If you came from ComfyUI Manager thinking dependencies were handled, this is the exception.
2. Vertex colors are not preserved. The README flatters it as "simplification with color preservation," but the node's own docs are explicit: CuMesh operates on geometry only. If your mesh's color lives in vertex colors (very common for TRELLIS2 output), you will get a clean but colorless mesh back. When you need colors to survive, reach for BD Blender Decimate with a color_field instead - that's the intended color-aware path in this pack.
Installing and running
ComfyUI Manager → search "BrainDead" → install. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/BizaNator/ComfyUI-BrainDead
cd ComfyUI-BrainDead
pip install -r requirements.txt
Then, separately, pip install cumesh (CUDA build).
The recipe the README recommends for TRELLIS2 output: enable remesh + preserve_sharp_edges_remesh for cleaner topology, keep the cleanup toggles on, target 5k–50k faces depending on the asset, and use Blender Decimate when texture/color transfer matters. For a quick win on a typical character mesh, 5–10k faces is a solid floor; you can push to 50k+ for hero assets.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | TRIMESH | — | |
| target_faces | INT | 5000100–1000000 | Target number of faces after simplification |
| remesh | BOOLEAN | false | Apply dual-contouring remesh before simplification for cleaner topology |
| remesh_resolution | INT | 512128–8192 | Voxel grid resolution for remeshing. Higher = more detail but slower. VRAM usage scales with resolution^3. |
| remesh_band | FLOAT | 1.00.1–5 | Narrow band width in voxel units for remeshing |
| preserve_sharp_edges_remesh | BOOLEAN | true | Preserve sharp edges during remeshing (requires CuMesh PR #19) |
| remesh_sharp_angle | FLOAT | 3010–90 | Angle threshold (degrees) for sharp edge detection during remeshing |
| project_back | FLOAT | 0.90–1 | How much to project remeshed vertices back to original surface (0=none, 1=full) |
| fill_holes | BOOLEAN | true | Fill small holes before simplification |
| fill_holes_perimeter | FLOAT | 0.0300.001–0.5 | Maximum hole perimeter to fill (mesh units) |
| remove_duplicate_faces | BOOLEAN | true | Remove duplicate/degenerate faces |
| repair_non_manifold | BOOLEAN | true | Repair non-manifold edges |
| remove_small_components | BOOLEAN | true | Remove small disconnected mesh components |
| small_component_threshold | FLOAT | 0.00000–0.1 | Volume threshold for removing small components (as fraction of total) |
| multi_stage | BOOLEAN | true | Progressive simplification: 3x target → clean → 1x target → clean. Better topology than single pass. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| mesh | TRIMESH | — |
| status | STRING | — |