Atlas Derive Roofs & Facades π
The RANSAC node for sloped roofs and stepped facades
- solve
- depth
- solve
- report
Vertical walls are easy. Roofs, ramps, and facades that step or lean are the reason a street scene still looks flat after a wall blockout. AtlasDeriveRoofsFacades is the pack's any-orientation specialist: it fits planes at any angle via sequential RANSAC, which is exactly what sloped roofs, stepped facades, and ramps need.
The ransac_planes method is the outdoor-scene counterpart to the indoor room_cuboid - the tooltip on the projection-geometry node calls them out together: ransac_planes for exteriors, room_cuboid for orthogonal interiors. This node is the exterior half, and it's the one you reach for when the shot's character lives in angled surfaces, not plumb walls.
How it works
Sequential RANSAC, plain and simple: fit a plane to the dominant surface, peel those points off, fit the next plane to what remains, repeat until the plane budget is spent. Because it works on any orientation - not just verticals - it picks up the sloped roof plane, the stepped facade, the ramp, and the angled parapet that an azimuth-wall fit would collapse or truncate. It's the classic robust-fitting workhorse, applied to the point cloud your metric depth implies.
Inputs and outputs
Required: solve and depth. Then the genuinely small input set:
max_planes(default 8, 1β16) - the plane budget. The tooltip's framing is "roofs, facades, ramps." That's the whole list of what this node fits.backdrop- the far cyclorama plane:measured_only(default),always, ornever. Default keeps it honest - only emit the backdrop when real depth actually placed something back there, instead of inventing a 60 m plane.
Output: solve (carrying the fitted planes) and a report.
That's it. Two optional knobs, one required pair of inputs, one output. It's the sparsest of the derive nodes, which is the point - it does one job and doesn't try to be clever about it.
How to use it
The natural home is the AtlasDeriveProjectionGeometry graph when scene_type is outdoor - that preset is literally "primitives + ransac_planes + Outdoor depth model." If you're wiring nodes by hand instead of using presets, this is the node you add for the roofline layer, then merge with AtlasMergeGeometry alongside a walls node or a relief mesh for the background. Like the other derive nodes, its ground fit and scale stay full-frame, so a masked branch still shares one metric world.
Where people get tripped up
The main disappointment is expecting it to also handle verticals nicely - it does, but that's the walls node's job and RANSAC's plane budget is better spent on the angled surfaces it's named for. If your planes keep getting eaten by noise, remember the budget: 8 planes is a maximum, and RANSAC spends it greedily on whatever it finds first. Don't be shy about lowering it on simple shots.
Install
cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git
Restart (or Manager β "atlas-camera"). Needs the [neural] tier for the depth upstream. The kornia <0.8.3 cap protects LTXVideo; GeoCalib comes from GitHub. Brand-new pack, no community folklore yet - the tooltips and report string are the documentation, and they're dependable.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| solve | ATLAS_SOLVE | β | |
| depth | ATLAS_DEPTH_MAP | β | |
| max_planesopt | INT | 81β16 | Plane budget (roofs, facades, ramps). |
| backdropopt | COMBO | measured_only | Far 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)
| Name | Type | Description |
|---|---|---|
| solve | ATLAS_SOLVE | β |
| report | STRING | β |