Iris Depth to 3D
The fun one, and it's a relief map rather than real geometry
- depth_3d
- model_3d
This is the node that makes people install the pack. Feed it an IRIS_DEPTH from Iris Depth and it writes a coloured .ply - a point cloud or a mesh - into your output folder, which you then view with ComfyUI's Preview 3D node and orbit around with your mouse. Photos come out as something you can look at from an angle, which is a genuinely good time the first time you do it.
Set expectations correctly, though, because the demos oversell it a bit. Your photo was a single view. Depth gives you a height for each pixel and nothing else, so what you're building is a 2.5D relief: rotate 20 or 30 degrees and it still reads, rotate behind it and you're looking at a hollow shell. This is the depth-estimation version of parallax, not photogrammetry, and it won't survive the "can I rig it" test that the proper image-to-3D models already struggle with.
What it actually writes
The maths, from the node's source, because it explains every parameter:
- Depth values are exponentiated - the bundle carries log-depth - giving depth up to a global scale, which is then rescaled so the median lands at 3. So the coordinate system is arbitrary units, not metres, and every scene is centred on its own median.
- A pinhole camera model turns pixel coordinates into x/y/z, with the focal length derived from
fov:f = (width / 2) / tan(fov / 2). Wider assumed FOV, shorter focal length, flatter-looking scene. - Coordinates come out in three.js convention (y-up, camera looking down −z), which is why Preview 3D's orbit feels natural.
- Vertex colours are sampled straight from the source image, so the cloud is coloured like the photo.
- The file is a binary little-endian PLY with per-vertex xyz floats and RGB bytes - small, standard, and openable in Meshlab or Blender if you'd rather not orbit it in ComfyUI.
In mesh mode it also triangulates neighbouring sampled points and then throws away any triangle whose three vertices span a big depth jump - a max/min ratio of 1.08 or worse. That's a deliberate anti-artifact move and it's why meshes from this node have holes at silhouettes rather than stretched rubber sheets between the subject and the background. The author's tooltip says exactly that: mesh mode leaves gaps at depth edges.
Inputs and output
depth_3d - the third output of Iris Depth. Not the image, not the mask; the IRIS_DEPTH one that exists for this purpose.
mode - point cloud (default) or mesh. Points are honest and view well; mesh gives you something Blender-importable and looks better head-on. Try both, it's one field.
fov - default 60 degrees, range 10 to 150. The horizontal field of view you're assuming the photo was taken with. This is your main lever on how much the picture "opens up": too high and the scene looks flattened and stretched at the edges, too low and everything looks cramped and telescopic. There's no way to measure it from the image - 60 is a sane default for a casual photo, and portrait or telephoto shots want lower.
max_points - default 500,000, range 10,000 to 4,000,000. Big depth maps are subsampled by striding until they fit. Turn this up for fine detail on a large image and expect Preview 3D to feel heavier and any downstream 3D app to load slower. 500k is plenty for orbiting.
filename_prefix - where the file lands in your output folder, default iris3b_depth3d. A batch writes one .ply per frame, numbered.
The node is marked as an output node, and the single model_3d output is a FILE_3D. Connect it to Preview 3D, hit Fit to Viewer in the panel, then drag to orbit and scroll to zoom.
Install
ComfyUI-Manager, search Iris-3B. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/bani4kaskashka/Iris-3B-Comfy-Nodes
pip install -r requirements.txt
The node itself needs numpy and nothing exotic. You'll also need the depth checkpoint (12 GB) and, for viewing, a ComfyUI build with the Preview 3D node - it's core, but it's the newer 3D pipeline, so an older frontend won't have it. Iris-3B Depth from Templates sets all of this up.
Where it goes wrong
Preview 3D shows nothing. Check the output folder - if the .ply is there, the graph worked and it's a viewer/version problem. If it isn't there, look at what you wired into depth_3d; the map image and the mask are different socket types and won't connect, so a wrong wire usually fails earlier.
The cloud looks pancaked or bulbous. fov. Nudge it and watch the geometry change; that's the whole parameter for this.
Holes in the mesh. Expected. Depth edges are where the triangulator deliberately stops.
Preview 3D crawls. Drop max_points. Half a million points is smooth; four million is a stress test, and past a certain size you're better off exporting the PLY to Meshlab and rotating it there.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| depth_3d | IRIS_DEPTH | the depth_3d output of Iris Depth | |
| mode | COMBO | point cloud | mesh joins neighboring points into triangles and leaves gaps at depth edges |
| fov | FLOAT | 6010–150 | assumed horizontal field of view of the photo, in degrees |
| max_points | INT | 50000010000–4000000 | the depth map is subsampled to stay under this |
| filename_prefix | STRING | iris3b_depth3d | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model_3d | FILE_3D | — |