RenderFormer Remesh
Shrink your mesh to 4096 faces before RenderFormer chokes on it
- mesh
- MESH
RenderFormer has a hard limit you'll hit the moment you load a real-world asset: it can only handle meshes up to 8192 polygons. Most models you grab off the internet are way past that - game assets and scans are routinely tens or hundreds of thousands of triangles. RenderFormerRemeshMesh is the node that gets you under the limit by simplifying geometry to a target face count, and it's one of the 15 nodes in paulh4x/ComfyUI_PHRenderFormerWrapper, the "100% vibecoded" wrapper around Microsoft's RenderFormer (SIGGRAPH 2025).
How it works
It uses pymeshlab to do the heavy lifting. For each mesh in your MESH input it runs two passes:
meshing_isotropic_explicit_remeshing- a remesh pass that evens out the triangle distribution, so you don't end up with a few huge faces and a thousand tiny ones.meshing_decimation_quadric_edge_collapse- quadric edge-collapse decimation down to your target face count, which is the classic quality-preserving way to simplify.
The output is a new MESH with the same materials and transforms but simplified geometry, ready to keep flowing through the pipeline.
The inputs
mesh- anyMESH(from LoadMesh, or a combined multi-mesh list - the node processes every mesh in the list, not just the first, which was a bug in earlier versions).target_face_count- default4096, range 100–100000. The README's examples sit around 4096, which is a safe middle ground between the 8192 hard cap and keeping enough detail to read as the original object. Start there; drop to 2048 if your asset is dense and you're seeing slow builds.
Single output, MESH, which chains into whatever's next - RandomizeColors, MeshCombine, or straight to the Scene Builder.
When you need it
Honestly: almost always. The example workflows ship .obj assets already under the cap, but the moment you bring in your own model, remeshing becomes a mandatory first step. It's also genuinely useful even under the limit - feeding RenderFormer a cleaner, decimated mesh makes the transformer's job easier and renders faster. If you're keeping the original high-poly mesh around for another purpose, don't worry: this node doesn't modify anything in place, it returns a new MESH.
Installing it
# ComfyUI Manager: search "ComfyUI_PHRenderFormerWrapper"
cd ComfyUI/custom_nodes/
git clone https://github.com/paulh4x/ComfyUI_PHRenderFormerWrapper.git
cd ComfyUI_PHRenderFormerWrapper
git clone https://github.com/microsoft/renderformer.git renderformer
pip install -r requirements.txt
python -c "import imageio; imageio.plugins.freeimage.download()"
Restart ComfyUI. Note that pymeshlab is one of the pack's heavier dependencies - if the node errors on first use, pip install pymeshlab in your ComfyUI environment.
Common issues
- Render errors or memory blowups with dense meshes - you skipped remeshing. Get under 8192 first.
- Decimation looks blobby on organic shapes - raise
target_face_count(say 6000–8000) to keep more detail, as long as you stay under the cap. - The node ignores most of your meshes - only if you're on a very old version of the pack; current builds process the whole list. Update via Manager.
It's a utility node, but it's the one that makes this whole pack usable with real assets.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | MESH | — | |
| target_face_count | INT | 4096100–100000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MESH | MESH | — |