Nodes/Atlas Camera/Atlas Roll Trim 🎚
ComfyUI Node

Atlas Roll Trim 🎚

Atlas Roll Trim 🎚 β€” the nudge that makes the horizon read level

By mikejamesvfxΒ·Created 3 months agoΒ·Updated a day agoΒ· 1
Atlas Roll Trim 🎚
  • solve
  • solve
  • report
β—„roll_deg0.00β–Ί

Every solve gets the focal and the horizon right and still manages to be a hair off on roll. AtlasRollTrim is the one-dial fix for that: it applies a small extra rotation about the recovered camera's view axis until your verticals and horizon read level. Zero is a no-op, positive rotates the projected scene counter-clockwise on screen (the horizon's right end rises), negative goes the other way. Dial it, watch the viewport, stop when the world stands up straight.

That's the whole job, and the design respects it. Position and view direction never move - this is purely the roll axis. There's no focal, no pitch, no scale lurking in here to mess up the rest of your carefully-solved camera. It's the surgical version of what a free-floating rotation node would do with too much freedom.

Why it exists at all

A vanishing-point solve derives gravity from how detected lines converge, and on real photography - a handheld phone shot, a slightly crooked drone frame, an old scanned plate - that line evidence is noisy enough that the answer comes back with a confidence value attached and a residual few-tenths-of-a-degree tilt. One degree of roll is invisible in a still and glaring the moment you do a camera move in the viewport, because parallax amplifies orientation error you never noticed. This node is the matte painter's equivalent of re-leveling the camera on the tripod before you commit to projecting onto it.

The one input and what it does

  • solve - your ATLAS_SOLVE, from any solve node.
  • roll_deg - the trim, βˆ’45Β° to +45Β° at 0.05Β° steps. A full degree is usually far too much; the step size is that fine for a reason. You'll live in the Β±2Β° range.

Output is the corrected solve plus a report that tells you what it did.

Gotchas

Because it's rotation about the recovered view axis, its meaning depends on the solve being otherwise good. If your solve has the horizon genuinely wrong (not just tilted), trim the roll all you want - you're polishing a camera that's still off; fix the underlying solve or use AtlasSolveGate's compass override instead. And don't forget the node is a trim, not a truth: two different photos of the same scene will want slightly different values, so if you're batch-solving a burst, check whether the tilt is systematic (one setting, fine) or per-frame (you've got a real problem to solve before the shot list).

Install

Core node, zero dependencies:

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

Restart, or grab the whole pack via ComfyUI Manager by searching "atlas-camera". You'll find it under Atlas/02 Β· Orient & Scale with the other orientation nodes.

CategoryAtlas/02 Β· Orient & Scale

Inputs (2)

NameTypeDefaultDescription
solveATLAS_SOLVEβ€”
roll_degoptFLOAT0.00-45–45Extra roll (degrees) about the recovered camera's view axis. 0 = no-op. Positive rotates the projected scene counter-clockwise on screen (the horizon's right end rises); negative clockwise. Dial until verticals/horizon read level. Position and view direction never move.

Outputs (2)

NameTypeDescription
solveATLAS_SOLVEβ€”
reportSTRINGβ€”