MeshTools Remesh (Instant-Meshes)
The node that actually fixes topology — and eats your textures
- trimesh
- trimesh
MeshTools Remesh is the one node in this pack that changes how a mesh is built, not just how big it is. It runs the Instant Meshes algorithm - the academic quad-dominant remesher that artists reach for when they want a clean, uniform mesh instead of triangle soup - through a Python binding called pynanoinstantmeshes. Feed it your Hunyuan3D or TRELLIS output and you get back a mesh with regular, evenly-sized faces and a topology that doesn't make a 3D artist wince.
That matters because bad topology is the single most consistent complaint about generated 3D. The KB essay quotes the field's verdict directly: the output looks great and "the geometry underneath" - how the triangles are laid out - is not. For a 3D print, the fix is even more blunt, as one commenter put it: "They dont care about topology, tri count, textures, or rigging! Just remesh that shit." That's this node.
The warning, up front
Remeshing removes all vertex colors, textures, and UV coordinates. The node says it in its tooltip, in its description, and again in the README, and it's still the thing people get burned by. Instant Meshes rebuilds the surface from scratch - there's nothing left to carry a texture. Run this before texturing, never after. The order that works: generate → remesh → UV unwrap → texture → export.
How it works
The node's pipeline is straightforward. It optionally merges duplicate vertices (merge_vertices, on by default - generated meshes are full of them, so leave it on), then calls Instant Meshes with:
vertex_count(default 10,000) - the target vertex count for the output. The actual number can differ slightly; the algorithm hits it approximately. More vertices = more detail, slower.smooth_iter(default 8) - Laplacian smoothing iterations. Higher = smoother, but you can lose fine detail and sharp edges. Set 0 to disable.align_to_boundaries(on by default) - aligns the new mesh's edges to the original mesh's boundary, which gives cleaner borders.triangulate_result(on by default) - converts the output from quads to triangles, since most pipelines expect triangles. Turn it off if you want quad topology, e.g. for subdivision-surface modeling.max_facenum(default 40,000) - a safety cap. If the remesh lands over this, the node decimates it down. The cap exists because Instant Meshes can over-deliver on high-detail inputs.
Output is a single trimesh socket.
Installing
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/agenticvibes/ComfyUI-MeshTools
cd ComfyUI-MeshTools
pip install -r requirements.txt
pynanoinstantmeshes is in requirements.txt, but it's the one optional dependency in the pack - the README calls it out as only needed for the Remesh node. If the node throws ImportError: pynanoinstantmeshes not found, the fix is exactly what the error says: pip install pynanoinstantmeshes. No model files anywhere in this pack.
Common issues
- "pynanoinstantmeshes not found" - the dependency didn't install (or you're running a different Python than the one pip targeted). Install it into ComfyUI's Python environment and restart.
- Colors/textures vanished - expected, not a bug. Re-run UV Unwrap and re-texture. This is why the node's docs tell you to use it before texturing.
- The mesh came back with an error - the node raises a
ValueErrorif Instant Meshes fails to produce a consistent result (it validates that the vertex/face counts line up). Retry with a lowervertex_countorsmooth_iter; some inputs just don't play nice. - Slow on big meshes - Instant Meshes is CPU-bound and the Python binding is a thin wrapper. A multi-million-face input will sit and spin for a while. Decimate down with MeshTools Simple Decimate first, or lower
vertex_count.
One honest caveat: Instant Meshes gives you a uniform remesh - nice even quads everywhere, but no art-directed edge flow. For a static prop, a print, or a base to sculpt on, it's fantastic. If you need edge loops that follow a character's face, that's still a guided retopo in Blender or zRemesher territory.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | Input mesh to remesh. Note: vertex colors and textures will be removed | |
| merge_vertices | BOOLEAN | true | Merge duplicate vertices before remeshing for cleaner topology |
| vertex_count | INT | 10000100–10000000 | Target number of vertices in the remeshed output |
| smooth_iter | INT | 80–100 | Number of Laplacian smoothing iterations. Higher = smoother but may lose detail |
| align_to_boundaries | BOOLEAN | true | Align remeshed edges to the original mesh boundaries |
| triangulate_result | BOOLEAN | true | Convert quad faces to triangles in the output |
| max_facenum | INT | 400001–10000000 | Maximum face count after remeshing. Applies decimation if exceeded |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| trimesh | TRIMESH | — |