RunningHub Pixal3D Save GLB
Triangle budget, texture size, and where your GLB lands
- asset
- glb_path
The last node in a Pixal3D workflow, and the one people skip past - which is a mistake, because this is where the output actually gets shaped. It takes the PIXAL3D_ASSET from the Image to 3D node and writes a textured .glb into ComfyUI's output folder, with three settings that decide whether your mesh is a 10 MB prop or a 300 MB monster.
What happens when you run it
Internally it's a thin wrapper around TRELLIS.2's o_voxel post-processing. The raw mesh from Pixal3D gets decimated to a triangle budget, UV-unwrapped onto a texture atlas of a set size, optionally remeshed, then exported with the texture embedded as WebP. A fixed coordinate transform is applied on the way out so the model sits in a typical engine orientation. It uses ComfyUI's standard save machinery, which means the file lands under ComfyUI/output/ with an auto-incrementing counter.
The settings that matter
decimation_target- the mesh face budget, default 200,000. Lower it (say 50k) for a small prop; raise it toward a million for maximum detail. This is your main quality-versus-size trade-off, and it's the closest thing to an answer to the "garbage topology" complaint leveled at every image-to-3D model - the mesh is a decimated mesh either way.texture_size- the texture atlas resolution, default 2048. Go 4096+ for assets that get viewed up close; 256–512 for thumbnails or background filler. Bigger is slower to bake and heavier on disk.remesh- on by default. Remeshing makes the surface watertight and cleans up the worst of the machine topology, which matters if you're 3D printing. It costs time; turn it off if you want the fastest export and don't care about a clean surface.filename_prefix- the path underComfyUI/output/, default3d/Pixal3D, so you'll get something likeoutput/3d/Pixal3D_00001_.glb.
Output
glb_path (STRING) - the relative path of the saved file, handy if you want to pass it along or log it. The node also lists the result in ComfyUI's UI as a "3d" output.
Install
Same deal as the rest of the pack - no extra dependencies beyond it:
cd ComfyUI/custom_nodes
git clone https://github.com/RH-RunningHub/ComfyUI_RH_Pixal3D.git
cd ComfyUI_RH_Pixal3D
pip install -r requirements.txt
The real install weight is upstream. The exporter needs the full model stack (Pixal3D, MoGe, DINOv3, BiRefNet, NAF) plus the CUDA extension wheels - NATTEN with libnatten, flash_attn, flex_gemm, o_voxel, nvdiffrast, and nvdiffrec_render. Get the loader to return a pipe and this node will just work.
Common issues
- "Where did my file go?" -
ComfyUI/output/3d/, or underoutput/<your prefix>/if you changed it. - Huge files or long exports - a big
decimation_targetplus a 4096/8192texture_sizeis the usual culprit. Drop one. - The asset still looks rough - that's the model's topology, not the export. Remeshing helps a little; expecting rig-ready geometry from any image-to-3D pipeline is asking for disappointment. For static props, prints, and renders it's genuinely useful - that's the realistic job this node does well.
The example workflow in the pack runs LoadImage → Load Model → Image to 3D → this node end to end, so you can have a GLB on disk minutes after a successful first generation.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| asset | PIXAL3D_ASSET | — | |
| decimation_target | INT | 2000001000–2000000 | — |
| texture_size | INT | 2048256–8192 | — |
| remesh | BOOLEAN | true | — |
| filename_prefix | STRING | 3d/Pixal3D | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| glb_path | STRING | — |