ComfyUI Node

RenderFormer Remesh

Shrink your mesh to 4096 faces before RenderFormer chokes on it

By paulh4x·Created about a year ago·Updated about a year ago· 37
RenderFormer Remesh
  • mesh
  • MESH
target_face_count4096

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:

  1. 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.
  2. 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 - any MESH (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 - default 4096, 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.

CategoryPHRenderFormer

Inputs (2)

NameTypeDefaultDescription
meshMESH
target_face_countINT4096100–100000

Outputs (1)

NameTypeDescription
MESHMESH