Atlas Depth Band Split π
One authoritative foreground/background boundary, shared by every band
- band_split
If you've ever built a 2.5D matte-painting stack in this pack, you know the failure mode this node exists to kill: you decide where "foreground" ends in three different layer nodes, and they quietly disagree, leaving seams where the background peeks through. AtlasDepthBandSplit is the single source of truth for that boundary - one node, one widget, one number that every band-aware node reads.
Think of it as the shared reference that stops the layers drifting apart. The pack's layered projection workflow (AtlasDepthBandSplit β AtlasDepthLayerMask β ... β AtlasCleanPlateLayer) is literally built around it: instead of each band node re-deciding where foreground stops, you wire this one band_split output into all of them, and they physically can't disagree.
How it works - and why the default isn't what you expect
The subtle part is what split means. It's not a pixel percentile. The tooltip is emphatic about this: depth is skewed, so a percentile wastes 0β0.9 on the foreground. Instead the boundary is a position along the scene's log-depth range, where 0.5 equals the geometric mean of the depth range - which is the perceptually mid-scene point. Same scene-relative value adapts to each solve's own depth distribution. It's a small mental rewire, and it's the difference between a boundary that lands where your eye says "foreground ends" and one that lands 90% of the way to the back wall.
Inputs
Both optional, which is the nice part:
split(default 0.55) - the fg/bg boundary as a position along the log-depth range, 0β1. Lower = more stuff treated as foreground.split_m(default 0) - the absolute boundary in metres. The tooltip's advice is direct: it overridessplitwhenever it's nonzero, for when you've measured the scene and want a hard number instead of a relative position.
One output: band_split (an ATLAS_BAND_SPLIT), which you fan out to the layer and band nodes - AtlasDepthLayerMask with band_side set, AtlasCleanPlateLayer, and the other band consumers. The catalog notes the workflow's band_override strings win over this node's own near/far widgets, and a connected band_split wins over everything - so there's exactly one dial to turn.
Why you'd reach for it
Two scenarios. First, the layered stack: you're splitting a shot into near/mid/far clean-plate layers and you want the fg/bg cut to be one decision, not four. Second, consistency: any time two nodes need to agree on "where's the foreground," this is the honest way to do it - a shared reference beats duplicated widgets every time, and ComfyUI's whole ecosystem (per the KB's plumbing essay) is about fighting exactly this kind of repetition and drift.
It's a pure logic node - no image in, no pixels touched - so there's nothing to break and nothing to tune beyond the two numbers.
Install
Same pack, same one-liner:
cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git
Restart (or Manager β "atlas-camera"). This node itself is dependency-free - pure schema in the core tier. It only earns its keep when the depth-heavy nodes upstream exist, so in practice you'll be installing the [neural] tier anyway for those (torch + GeoCalib + transformers, see INSTALL.md). The pack is brand new with no community war stories yet, so trust the tooltips - they're unusually precise about what each number means.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| splitopt | FLOAT | 0.550β1 | The fg/bg boundary as a position along the scene's LOG-depth range (0.5 = geometric mean of the depth range = perceptually mid-scene). Scene-relative: the same value adapts to each solve's own depth distribution. |
| split_mopt | FLOAT | 0.00β10000 | Absolute boundary in metres β overrides `split` when nonzero (for when you've measured the scene and want a hard number). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| band_split | ATLAS_BAND_SPLIT | β |