Nodes/Atlas Camera/Atlas Derive Interior Room πŸ›‹
ComfyUI Node

Atlas Derive Interior Room πŸ›‹

Floor, walls, ceiling from one interior photo

By mikejamesvfxΒ·Created 2 months agoΒ·Updated a day agoΒ· 1
Atlas Derive Interior Room πŸ›‹
  • solve
  • depth
  • solve
  • report
β—„backdropmeasured_onlyβ–Ί

Interiors are a different species of geometry problem. A street scene is a set of vertical slabs; a room is an orthogonal box you're standing inside, and the "wall fit" that works outdoors leaves you with a ceiling that refuses to exist. AtlasDeriveInteriorRoom is the pack's interior specialist: it fits a Manhattan floor + walls + ceiling (room_cuboid) - orthogonal interiors only, and unapologetically so.

It's the indoor half of the same family where AtlasDeriveRoofsFacades is the outdoor ransac_planes half, and the indoor preset in AtlasDeriveProjectionGeometry is literally this node's recipe: primitives + room_cuboid + the Indoor depth model. Use the wrong depth model and the room won't fit right - the Indoor variant matters, because indoor metric depth behaves differently from outdoor.

How it works

The room_cuboid method exploits the strongest prior an interior gives you: the dominant planes are mutually orthogonal. "Manhattan" is the computer-vision shorthand for a scene whose surfaces align to three perpendicular directions, and the solver uses that constraint to lock in floor, walls, and ceiling as one consistent box instead of five loosely-fit planes. It's the geometrically robust version of "assume the room is a box, then find the box."

That orthogonality assumption is also the hard limit. If the interior is a vaulted ceiling or a heavily angled space, this node is the wrong tool - that's when you'd fall back to the relief mesh or the any-orientation RANSAC plane fit, accepting rougher walls for the freedom.

Inputs and outputs

Required: solve and depth. Then exactly one optional input:

  • backdrop - the far cyclorama plane: measured_only (default), always, or never. The default's rationale is worth internalizing because it applies pack-wide: emit the backdrop only when real depth actually placed it. If the frame had no valid depth, a backdrop would sit at an invented 60 m, so the node drops it and the report says so. always is the old pre-2026 behavior, preserved for backward compatibility.

Output: solve (now carrying the fitted room) and a report that documents whether the backdrop survived.

That's the whole surface. Two required inputs, one optional knob, one output. The restraint is the feature.

How to use it

Solve an interior, run AtlasDepthMap with the Indoor depth model, wire both in, and the room box comes out. Merge it with a relief mesh for anything non-box-shaped (the furniture, the window reveals) via AtlasMergeGeometry, and you have a projectable interior. For a beginner, the single most important habit is matching the depth model: the Indoor variant on the solve and depth side, or the box will be fit to outdoor-biased depth.

Install

cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git

Restart (or Manager β†’ "atlas-camera"). Needs the [neural] tier for depth (torch + GeoCalib + transformers; GeoCalib GitHub-only). Watch the kornia<0.8.3 cap that protects LTXVideo. New pack with no community folklore yet - the tooltips are the honest docs, and this node's single optional input is a nice illustration of how tight this pack keeps its specialists.

CategoryAtlas/05 Β· Geometry

Inputs (3)

NameTypeDefaultDescription
solveATLAS_SOLVEβ€”
depthATLAS_DEPTH_MAPβ€”
backdropoptCOMBOmeasured_onlyFar cyclorama plane behind the extracted geometry. measured_only (default) = emit it only when real depth placed it; if the frame had no valid depth the backdrop would sit at an invented 60 m, so it is dropped and the report says so. always = emit it regardless (the pre-2026-07-27 behaviour). never = never emit it.

Outputs (2)

NameTypeDescription
solveATLAS_SOLVEβ€”
reportSTRINGβ€”