Skip to content

Blog

Technical deep dives, engineering challenges, and the science behind eclipse photography.

After the Shadow

The 12 August 2026 eclipse is over. A thank you to everyone who handed two irreplaceable minutes to software built by one person, an honest ask for what worked and what didn't — including the bad runs, which are worth more than the good ones — and an invitation to share your captures in the new community gallery. Plus the one thing photographers always forget to strip before sending a file.

Community Eclipse Photography 2026 Eclipse Feedback Gallery

Planning at the Speed of Your Camera

The mid-totality allocator used to slice inner corona, outer corona, and earthshine into three equal thirds regardless of cost, and the planner priced every camera's USB write from a static guess. Both are gone: a placement-aware scheduler that enumerates whole-bracket layouts instead of pooling milliseconds (71% to 89% utilization at a 120-second totality), and a new Equipment-page Test button that measures each body's actual write latency and identity-gates it to that exact camera and backend. A dual-camera dry run — Canon 5D Mark II and Nikon D7200 — validated both end-to-end at 0ms drift, including catching the Canon's corona-block write degradation that a short calibration run could never have reproduced. Plus why the execution logs used to report the wrong number as "timing error."

Scheduling USB Latency Performance Corona Bracketing Benchmarks Execution Engine

Under the Hood: A Power User's Tour of eclipseClick's Advanced Settings

The defaults are Espenak-derived and safe to trust blind. But your telescope, your low-altitude site, and your camera's bracket quirks aren't the defaults' problem to solve — they're yours. A full tour of the External Optics checkbox, atmospheric extinction correction, the per-phenomenon Q-walk bracket panel, Early Start/Late End timing padding, and how the Espenak Audit banner keeps hand-edited script lines honest.

Advanced Settings Camera Setup Exposure Espenak Bracketing Power User

Six Times Faster: Fixing Nikon Capture Latency on macOS

Nikon capture-to-card on macOS ran at 2540ms per frame on a body that shoots six frames a second, and a 45-line eclipse script drifted 22 seconds behind schedule by the end. The cause: libgphoto2's Nikon capture call blocks until the entire 22MB RAW has been written to the card, because it owes the caller a file path — one that eclipseClick discards. Switching to the trigger path took the median to 406ms. The more interesting half is the faster version we measured and rejected, after forty frames turned into fourteen files.

Nikon macOS libgphoto2 PTP Performance Backpressure Benchmarks

One Take: How eclipseClick Keeps Shooting When Things Go Wrong

After two eclipses spent more anxious than present — missed frames in Oregon, and a crash in Mazatlán that would have meant reconnecting everything by hand with the moon already moving — the goal became simple: maximise the odds that the photographer watches totality instead of troubleshooting it. This is the engineering that costs. Absolute celestial scheduling instead of a step sequence, four escalating tiers of camera recovery, remote-control state and exposure re-established rather than assumed, and an execution engine that outlives its own user interface. With diagrams, screenshots from rehearsal runs where the links were broken on purpose, and an honest account of where the limits are.

Reliability Resilience Execution Engine Recovery Timing Eclipse Photography

Thicker Air, Longer Exposures: How eclipseClick Computes Atmospheric Extinction

A low Sun is a dimmer Sun, and no published eclipse exposure table accounts for it. This is the full chain — Sun altitude from the Besselian elements already in the catalog, Kasten–Young airmass, a clear-sky extinction coefficient, magnitudes converted to photographic stops — and exactly where the resulting correction lands in your capture sequence: subtracted from Espenak's Q, per contact, per phenomenon, before the shutter ladder gets a say.

Exposure Atmospheric Extinction Airmass Astrophotography Mathematics

Four Seconds Early: A User Report, a JPL Ephemeris, and Three Layers of Eclipse-Timing Bugs

A Spain-bound user's report of C2/C3/maximum times running 4–5.5 seconds early sent us looking for a referee precise enough to settle it: a JPL Horizons DE441 ephemeris, solved from first principles instead of Besselian elements. That search turned up three independent bugs — a missing ephemeris-longitude correction that over-rotated every observer by Earth's own spin during Delta T, a Delta T catalog stuck on stale extrapolations, and a byte-swapped lunar terrain dataset that had never contained real limb data. All three are fixed, and the solver is now pinned to DE441 by a permanent regression harness.

Astronomy Mathematics Delta T Lunar Limb Bug Fix JPL Horizons

A 2-Stop Exposure Error: Recalibrating eclipseClick's Partial-Phase Formula

A customer's overexposed partial-phase photos traced back to a slope constant borrowed from the wrong model — the app was using a physically-exact ND-to-stops conversion where Espenak's own table calls for an empirically-calibrated one. Cross-checked against three independent sources and fixed.

Exposure Astrophotography Solar Filters Bug Fix Mathematics

Two Bugs at the Edge: Fixing Contact Times for Graze-Zone Observers

Two bugs in the contact time resolver specifically affected observers near the totality path limit — one produced false totality predictions for outside-path locations, the other silently dropped limb corrections that can reach 30–80 seconds at the path edge. Both are now fixed.

Astronomy Mathematics Eclipse Path Bug Fix Lunar Limb

When the Wizard and the Validator Disagree: Defense in Depth for Sony Eclipse Bracket Scripts

A user ran a corona bracket script on a Sony ZV-E10 via the libgphoto2 fallback path and hit four sequential bugs across the wizard, the renderer state, and the executor. A postmortem on why constraints need to be enforced in depth — and what happens when a UI cap, a runtime validator, a snapshotted backend, and a silent override all disagree.

Sony libgphoto2 Wizard Validation Bracketing Defense in Depth Zustand TypeScript

Sony CrSDK on macOS Apple Silicon: Five Bugs Between USB Plug-In and "Connected"

Sony's Camera Remote SDK ships native arm64 dylibs — but five distinct macOS-specific bugs sit between attaching a Sony A7 IV and a working SDK session. Hardcoded plugin paths, a SIP-bypassing daemon respawn race, an SDK Init that segfaults post-Release, a "stop live view" that doesn't reach the camera body, and a stale PTP session that needs an IOKit USB re-enumerate to clear.

macOS Sony Camera SDK Apple Silicon IOKit USB ptpcamerad SIP fork-safety

macOS Multi-Camera USB Challenges: Canon EDSDK, libgphoto2, and ptpcamerad

Connecting Canon and Nikon cameras simultaneously on macOS hits a fundamental platform limitation: ptpcamerad claims exclusive USB access to all PTP cameras. Here's what we tried, what failed, and the workaround that works.

macOS Multi-Camera Canon Nikon USB ptpcamerad

Supporting Sony Cameras in eclipseClick: Two SDKs, One Bridge, and a Lot of COM Interop

Sony's Camera Remote SDK doesn't support older models like the ZV-E10 or A7 III, so we built a second bridge using Windows Portable Devices MTP extensions. Getting COM interop working on .NET 8 with trimming required multiple rewrites — and Sony testing exposed DeviceBusy retry gaps across every vendor.

Sony Camera SDK COM Interop C++ C# PTP WPD

Nikon MAID SDK on macOS Apple Silicon: Why It Fails and How I Worked Around It

A deep dive into 9 distinct failure modes — from wrong binary formats to ARM64 Pointer Authentication crashes — and how I replaced the proprietary SDK with libgphoto2.

macOS Nikon Camera SDK Apple Silicon libgphoto2

How eclipseClick Computes Eclipse Contact Times

From Besselian elements to sub-second timing — the math and algorithms behind every prediction, including Newton-Raphson iteration, WGS84 oblate Earth, and lunar limb corrections.

Astronomy Mathematics Besselian Elements Newton-Raphson

Why I Built eclipseClick

Three eclipses, two automation tools, and one persistent question: what if capture software could disappear on eclipse day? The origin story of eclipseClick.

Eclipse Photography Automation Origin Story