RenderFormer Mesh Loader
The node that gets your .obj into RenderFormer's world
- material
- MESH
- MATERIAL
Before RenderFormer can render anything, it needs a mesh, and the RenderFormerLoadMesh node is the front door for 3D geometry in this pack. It loads a .obj (or whatever trimesh can read), lets you position it, scale it, and slap a PBR material on it, then hands the result to the scene as a MESH. It's one of the 15 nodes in paulh4x/ComfyUI_PHRenderFormerWrapper, the "100% vibecoded" wrapper around Microsoft's RenderFormer (SIGGRAPH 2025).
How it works
The node loads your file with trimesh, builds a transform (translation, rotation, scale) and a material, and bundles all three into a MESH object. Two outputs come out of it:
MESH- the mesh + transform + material bundle. This is what you wire forward (to the Scene Builder, or through RandomizeColors/Remesh/Combine first).MATERIAL- the material definition on its own, so you can reuse the same surface on another mesh by connecting it to that node'smaterialinput.
The inputs that matter
mesh- a dropdown of files in ComfyUI'sinput/3dfolder (the pack creates that folder for you). This is where you drop your.objfiles -ComfyUI/input/3d/your_model.obj.mesh_path- an alternative absolute path if the file isn't ininput/3d. Handy for one-offs.normalize_mesh- defaulttrue. This is a big one: it scales the mesh into a sane unit space so you're not fighting a model that's 10,000 units across. Leave it on unless you know your asset's scale is already correct.trans_x/y/z,rot_x/y/z,scale- the transform, same story as the camera and lighting nodes.diffuse_rgb(default204, 204, 204),specular_rgb(default25, 25, 25),roughness(default0.7) - the core PBR material: base color, specular, and how matte or shiny the surface is (0–1). Color strings are "R, G, B" from 0–255.
One nice touch buried in the code: if you load one of RenderFormer's background files (plane.obj, wall0-2.obj), the node automatically applies the default background transform and skips normalization, so the background geometry lines up with the examples out of the box.
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. Drop your meshes into ComfyUI/input/3d/ and they'll show up in the dropdown.
Common issues
- "Mesh file not found" - the file isn't in
input/3dor the path is wrong. Use the dropdown, notmesh_path, unless you're sure. - Mesh appears as a speck or flies off camera -
normalize_meshis off. Turn it on. - Polygon budget - RenderFormer is limited to meshes of up to 8192 polygons. If your asset is dense, run it through
RenderFormerRemeshMesh(target ~4096 faces) before it hits the sampler. The.glb/.fbxsupport is on the pack's to-do list, so for now.objis the reliable format.
It's the node you'll reach for on every single workflow - everything in this pack starts with loading a mesh.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | COMBO | 0 options: | |
| materialopt | MATERIAL | — | |
| mesh_pathopt | STRING | — | |
| normalize_meshopt | BOOLEAN | true | — |
| trans_xopt | FLOAT | 0.000-10–10 | — |
| trans_yopt | FLOAT | 0.000-10–10 | — |
| trans_zopt | FLOAT | 0.000-10–10 | — |
| rot_xopt | FLOAT | 0.0-360–360 | — |
| rot_yopt | FLOAT | 0.0-360–360 | — |
| rot_zopt | FLOAT | 0.0-360–360 | — |
| scaleopt | FLOAT | 1.000.1–10 | — |
| diffuse_rgbopt | STRING | 204, 204, 204 | Diffuse color (R, G, B) from 0-255 |
| specular_rgbopt | STRING | 25, 25, 25 | Specular color (R, G, B) from 0-255 |
| roughnessopt | FLOAT | 0.700–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MESH | MESH | — |
| MATERIAL | MATERIAL | — |