RenderFormer Model Loader
The node that drags Microsoft's neural renderer onto your GPU
- MODEL
Every RenderFormer workflow starts here. This is the first node you place and the one that does the heavy lifting before you've rendered a single pixel: it pulls Microsoft's RenderFormer model - a SIGGRAPH 2025 transformer that renders triangle meshes with PBR materials and global illumination - out of Hugging Face, loads it onto your GPU, and hands it to the sampler as a MODEL.
It's part of paulh4x/ComfyUI_PHRenderFormerWrapper, a 15-node pack that's a wrapper around RenderFormer. Worth knowing going in: the whole pack is the author's first-ever coding project, openly "100% vibecoded" and experimental. It works - the r/comfyui release thread got a warm reception and it really does render - but don't expect polished official support. The node itself is about as simple as a loader gets.
How it works
Under the hood it's a one-liner: RenderFormerRenderingPipeline.from_pretrained(model_id), then .to(device). That call handles downloading, caching, and loading the model. The only inputs are model_id and precision, and honestly, precision is the only one you'll touch after the first run.
model_id- defaults tomicrosoft/renderformer-v1.1-swin-large, the official HF repo. The tooltip says it can also be a local path, which is handy if you've already downloaded the weights and want to skip the network. First run downloads a couple of GB to your Hugging Face cache, so give it a minute.precision-fp16(default) orfp32. The author's own benchmark was fp32: about 1.15s per 1024×1024 frame on a 4090, running in 8GB VRAM. fp16 will cut memory and usually speed things up, but if you see color or shading artifacts, fp32 is the safest dial to turn. With a 4090-class card, just leave it on fp32.
Wiring it in
It has a single output, MODEL, which feeds the RenderFormerGenerator ("Sampler"). That's the whole graph on the model side - load → sample. Everything else - meshes, camera, lights - gets assembled by the Scene Builder and joins the sampler through a separate SCENE input, not through this node.
Installing it
The pack installs like any ComfyUI custom node, with one extra step that trips people up. Either:
# ComfyUI Manager: search "ComfyUI_PHRenderFormerWrapper" and install
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()"
Then restart ComfyUI.
The git clone ... renderformer line is not optional - it must live inside the pack directory under exactly that name. That's where the example scenes and conversion code come from. If you skip it, nodes load but example/import paths break.
Common issues
- First-run silence then a long wait - the model download can look like a hang. It isn't; give it time or watch your network.
- Import errors on startup - the
__init__.pyprints a colored "Nodes loading ERROR" banner. Nine times out of ten it's a missing requirement (the pack pulls intrimesh,pymeshlab,h5py,roma,simple-ocio, and a git-installedrenderformer-liger-kernel, so it's a heavier dependency set than most). Runpip install -r requirements.txtand restart. - VRAM pressure - at 8GB it fits, but if your ComfyUI is already loaded with a diffusion model, consider
fp16or running the loader in a fresh session.
It's a boring node, and that's a compliment: it's the download-and-go entry point that the rest of this pack depends on.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model_id | STRING | microsoft/renderformer-v1.1-swin-large | The model ID from Hugging Face or a local path. |
| precision | COMBO | fp16 | 2 options: fp16, fp32 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |