FirstRig
firstrig.com

Sub-Exposure & Calibration Planner

How long each sub needs to be, how many hours the target will take, and which calibration frames your sensor actually needs. The first two are physics: your read noise against your sky. The third is a property of the sensor, not a rule of thumb.

Read noise comes from each manufacturer’s own table or chart, and every figure says which. Most manufacturers publish only a chart, so most of these numbers were read off one by eye; the result carries that uncertainty instead of hiding it.

21 cameras. Every figure links to the manufacturer page it came from, and says whether it was printed as a number or read off a chart.

Telescope

mm
mm
mm

Sky

A Bortle class is a range; the planner uses one representative value for each. A measured SQM reading is better. A lookup from your location, from our own light-pollution model, will plug in here.

Filter figures are effective-bandwidth approximations from our physics reference, not measured curves, and the result marks them as such. There is no “type a bandwidth” option on purpose: the reference’s own figures don’t scale linearly with bandwidth, so any formula for it would be a guess.

Tolerance

1% — long subs20% — short subs

5% is Dr Robin Glover’s usual figure and a common default. It is a preference, not a threshold: 10% halves the sub length and costs about 5% more noise.

Refine the assumptions
%
e⁻/px/s
mag/arcsec²
SNR
s

The target is an emission-nebula stand-in at 21.5 mag/arcsec² unless you change it. An SNR of 40 is the reference’s “good result”, a convention rather than a threshold.

How this is computed

e_sky  = F₀ · 10^(−0.4 · m_sky) · A · s² · QE · T_filter      F₀ = 8.79 × 10⁵ photons/s/cm²
t_min  = R² / ( e_sky · ((1 + p)² − 1) )
SNR    = S·T / √( S·T + B·T + D·T + N·R² )                 N = T / t
T      = SNR² · ( S + B + D + R²/t ) / S²

A = collecting area (cm²), s = image scale ("/px), R = read noise (e⁻),
p = allowed noise increase, S/B/D = target/sky/dark rates (e⁻/px/s)

The minimum sub is the length at which read noise inflates the stack’s noise by no more than p over what sky shot noise alone would give. It scales with read noise squared, which is why a 1.5 e⁻ CMOS camera needs far shorter subs than a 7.5 e⁻ CCD, and why the gain setting matters more than any other input here.

It is a floor, not an optimum. Above it the penalty flattens quickly and the choice is about what the physics doesn’t see: guiding, wind, satellites, how many files you want to handle, and star cores. Below about 30 s, download and dither overheads dominate, so the planner raises a shorter floor to that and says so.

Aperture and focal length enter the per-pixel sky rate only through the f-ratio (A·s² ∝ (D/f)²): aperture sets how many photons a target sends you, f-ratio sets how fast each pixel fills.

The sky is one number in mag/arcsec². A Bortle class is turned into one representative value; a typed SQM reading is used as given. Filter transmissions are effective-bandwidth approximations from the physics reference, not measured curves, and the result marks them. How the numbers are computed.

Source: docs/03-physics-reference.md §§ 2–3 · Dr Robin Glover, “Deep Sky Astrophotography with CMOS Cameras” · SharpCap Smart Histogram documentation · Howell, Handbook of CCD Astronomy. Implemented in packages/physics/src/exposure.ts, with the worked examples as unit tests.