ComfyUI Node

Dust3rRun

Two photos in, a textured 3D scene out

By chaojie·Created 2 years ago·Updated 2 years ago· 22
Dust3rRun
  • model
  • images
  • result
devicecuda
image_size512
scenegraph_typecomplete
schedulelinear
niter300
min_conf_thr3.0
cam_size0.050
as_pointcloudfalse
mask_skyfalse
clean_depthtrue
transparent_camstrue

This is the node the whole pack exists for. Feed Dust3rRun a batch of photos of the same thing shot from different angles - 2, 5, 15, doesn't matter - and it hands you back a path to a textured .glb 3D scene. Mesh or point cloud, your call. No COLMAP, no separate depth preprocessor, no photogrammetry rig. That's DUSt3R's whole trick, and this is Naver's model wrapped up in a ComfyUI node.

Where does it sit in a workflow? Right where you'd want geometry instead of a flat image. The .glb goes into a 3D viewer node (the pack's demo wires it into a Panda3D viewer), or you drag it into Blender, or you feed its output into the sibling CameraPoseVideo to reuse the recovered camera motion. Think of it as the actual-geometry end of the depth-estimation family tree - Marigold and Depth Anything give you a depth map, dust3r gives you a coherent 3D point cloud with colors baked in.

How it works

DUSt3R (dense unconstrained stereo 3D reconstruction) skips the usual "estimate depth, then fuse" pipeline. For each image pair it predicts a point map - per-pixel 3D coordinates - for both views at once. Then a global alignment step treats the whole set as one scene and refines the camera poses and geometry together by gradient descent, weighted by per-point confidence. You feel that second stage as the niter slider: crank it up and alignment gets tighter (and slower).

Behind the scenes the node does something slightly undignified: it saves your images to the pack's own input/ folder, runs the reconstruction, and exports scene.glb into its output/ folder. That matters, because the node's single output isn't an image - it's a STRING that is the file path to that .glb.

The inputs that matter

  • images - any IMAGE batch. Two LoadImage nodes into an ImageBatch works. With a single image it quietly duplicates it, so you get a depth-ish mesh but no real parallax; for actual geometry you want 2+ genuinely different angles.
  • image_size - 512 is the default and it matches the 512-px checkpoint. Leave it unless you're on the 224 model.
  • scenegraph_type - complete, swin, or oneref. complete matches every pair of images, which is the most thorough and the VRAM-hungriest once you're past a handful of frames; swin and oneref build fewer pairs and are the escape hatch on a mid-range card.
  • niter - alignment iterations, default 300.
  • min_conf_thr - drops low-confidence points from the export. Default 3.0; nudge up if the point cloud is noisy.
  • as_pointcloud - export a raw point cloud instead of a mesh.
  • mask_sky, clean_depth, transparent_cams, cam_size - output polish: strip sky, clean the cloud, show/hide camera frustum markers in the .glb. The defaults are fine.

Installing it

ComfyUI Manager → search ComfyUI-dust3r, or:

cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-dust3r

then restart ComfyUI. Dependencies auto-install on first load - the README explicitly says no manual pip install -r requirements.txt, and the pack's __init__.py does a pip install of requirements.txt (roma, trimesh, opencv-python, scipy, einops, pyglet) when the first import fails. Give it a few minutes on that first launch; it's a real install, not a formality.

The checkpoint does not download itself. Grab one of the three .pth files from the README (start with DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth) and drop it in ComfyUI/custom_nodes/ComfyUI-dust3r/checkpoints/. It's a multi-gigabyte .pth, not a safetensors, and it's the #1 "nothing works" cause: the loader lists whatever is in that folder, and an empty folder means an empty dropdown.

Where people get burned

  • The output is a path, not a preview. Wire result into a ShowText node to read it, then load the .glb in a 3D viewer. People expect a rendered image and think the node failed.
  • It writes into the pack's folder, wiping input/ every run. Don't point it at anything you care about, and don't run two of them in parallel against the same install.
  • VRAM. This is a ViT-Large model. Stick to 512px, and if you're under ~24 GB treat complete with more than ten images as a risk - drop to swin or fewer frames.
  • License. dust3r is CC BY-NC-SA 4.0. Non-commercial. Fine for personal and research use; not fine for selling the results.
CategoryDust3r

Inputs (13)

NameTypeDefaultDescription
modelDust3rModel
deviceSTRINGcuda
imagesIMAGE
image_sizeINT512
scenegraph_typeCOMBOcomplete3 options: complete, swin, oneref
scheduleCOMBOlinear2 options: linear, cosine
niterINT3000–5000
min_conf_thrFLOAT3.01–20
cam_sizeFLOAT0.0500.001–0.1
as_pointcloudBOOLEANfalse
mask_skyBOOLEANfalse
clean_depthBOOLEANtrue
transparent_camsBOOLEANtrue

Outputs (1)

NameTypeDescription
resultSTRING