Nodes/ComfyUI-MoGe/MoGe Process
ComfyUI Node

MoGe Process

One image in, a textured 3D mesh out

By kijai·Created 2 years ago·Updated 2 years ago· 53
MoGe Process
  • model
  • image
  • depth
  • glb_path
  • trimesh
resolution_level9
remove_edgetrue
metallic_factor0.50
roughness_factor1.00
save_formatglb
filename_prefix3D/MoGe

MoGeProcess is the payoff. Feed it any image plus the MOGEMODEL from (Down)load MoGe Model, and it turns the photo into actual 3D geometry - a textured mesh saved to disk, plus a grayscale depth map you can preview or reuse. This is the node that separates MoGe from every plain depth estimator: it doesn't just tell you how far things are, it reconstructs a point map and builds geometry from it.

Kijai kept this pack to two nodes on purpose, and this is the one doing the interesting work. The community noticed: the pack's canonical intro thread is titled "Kijai's MoGe wrapper has been around for a while, and no one has introduced it yet" (r/StableDiffusion, +67), where it's called the most accurate normalized depth model around - with the caveat that it meshes without back faces, which matters for what you point it at.

How it works

MoGe's model runs on your image and outputs a per-pixel point map, a validity mask (regions like sky get excluded), and camera intrinsics - from which depth and focal length are derived. This node then turns that point map into a triangle mesh with vertex colors and UVs, and when you save as GLB it bakes your original image on as a PBR texture. Hence the metallic_factor and roughness_factor inputs: those are material properties written into the GLB itself, so the mesh looks like your image rather than a gray blob when you open it in a viewer.

The inputs that matter

The model and image inputs are obvious. The rest are the settings you'll actually touch:

  • resolution_level (0–9, default 9) - controls the internal working resolution. Level 9 targets ~500k pixels of processing area; level 0 targets ~250k. Lower is faster and rougher, and the output is resized back to your original dimensions either way. Start at 9; drop it only if a big image is slow.
  • remove_edge (default on) - trims pixels along depth discontinuities so seams between foreground and background don't get baked into the mesh as jagged artifacts. Leave it on.
  • save_format - glb (default), ply, or none. GLB gets you the textured mesh; PLY gives you vertex colors but no PBR texture; none is for when you only want the depth output.
  • filename_prefix - where it lands under ComfyUI/output, default 3D/MoGe.
  • metallic_factor / roughness_factor - GLB material knobs. Defaults are 0.5 / 1.0, which reads as a mostly-matte surface. Set metallic to 0 for pure matte.

Outputs and what to wire them into

  • depth - a normalized grayscale IMAGE. Preview it, feed it to a depth ControlNet preprocessor pipeline, or use it as a displacement map. It's the "boring" output that's secretly useful.
  • glb_path - a STRING path to the saved GLB. Wire this into a Preview3D node (or any 3D viewer node that takes a path) to inspect the mesh without leaving ComfyUI. The example workflow that ships with the pack is exactly this: LoadImage → Load Model → MoGeProcess → PreviewImage on depth + Preview3D on the path.
  • trimesh - the mesh object itself, typed TRIMESH, for nodes from other 3D packs that speak that type.

The traps

The big one is baked into MoGe itself: you get a single-view mesh with no back faces. It's great for objects and 2.5D set dressing - a tree with transparency, a rock, a prop you'll drop into a scene - and weak for full environments, where occluded areas become holes. The community trick is to treat it as a base mesh and inpaint the small blanks (one practical user in that same thread does exactly this, hand-mixing MoGe meshes with hand-made geometry). Depth estimation's usual caveats apply too: transparent surfaces and featureless skies confuse it, which is why the mask exists. And one more: the mesh is built from a single camera view, so don't expect to orbit behind anything - that geometry was never in the image to begin with.

CategoryMoGe

Inputs (8)

NameTypeDefaultDescription
modelMOGEMODEL
imageIMAGE
resolution_levelINT9
remove_edgeBOOLEANtrue
metallic_factorFLOAT0.50
roughness_factorFLOAT1.00
save_formatCOMBOglb3 options: glb, ply, none
filename_prefixSTRING3D/MoGe

Outputs (3)

NameTypeDescription
depthIMAGE
glb_pathSTRING
trimeshTRIMESH