Dust3rRun
Two photos in, a textured 3D scene out
- model
- images
- result
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
IMAGEbatch. TwoLoadImagenodes into anImageBatchworks. 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, oroneref.completematches every pair of images, which is the most thorough and the VRAM-hungriest once you're past a handful of frames;swinandonerefbuild 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
resultinto aShowTextnode to read it, then load the.glbin 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
completewith more than ten images as a risk - drop toswinor 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.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | Dust3rModel | — | |
| device | STRING | cuda | — |
| images | IMAGE | — | |
| image_size | INT | 512 | — |
| scenegraph_type | COMBO | complete | 3 options: complete, swin, oneref |
| schedule | COMBO | linear | 2 options: linear, cosine |
| niter | INT | 3000–5000 | — |
| min_conf_thr | FLOAT | 3.01–20 | — |
| cam_size | FLOAT | 0.0500.001–0.1 | — |
| as_pointcloud | BOOLEAN | false | — |
| mask_sky | BOOLEAN | false | — |
| clean_depth | BOOLEAN | true | — |
| transparent_cams | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result | STRING | — |