Ephemeris is a free, open-source Mac app that reads PHD2 guide logs. Version 2.0 is out today, and it adds the one thing 1.0 could never do: remember. Where 1.0 analyzed a single night, 2.0 keeps a library of every night your rig has recorded and tells you what it notices across all of them.

The single-log side hasn't gone anywhere. You still open a night, see every guiding and calibration session in order, chart RA and Dec error, plot the calibration cross, run an FFT and find your worm period. That's still what I reach for the morning after a session. 2.0 is about the question one log can't answer: is this getting better? Was that a bad night, or a bad setup? Has anything actually changed since I re-tightened the OAG?

One session, 291 frames, with the RA and Dec scatter, star mass and SNR tracked alongside. The verdict at the top is measured against this rig's imaging scale rather than the guide camera's.

The Log Library

Point Ephemeris at a folder of logs and it imports the lot, skipping the ones it already has, so you can re-import the same directory next month without making a mess. Everything lands under a rig profile: focal length, pixel size, binning, reducer, mount class.

The rig is the part that makes the numbers mean something. Once Ephemeris knows you're imaging at 0.40 arcseconds per pixel rather than 3, a 0.6″ night stops being a number and starts being a comparison. You get median, p75 and p90 across the range instead of one figure, total integration, and target clusters that group sessions pointing at the same patch of sky, so you can see how the same object guided in February and again in April.

Thirty nights, 291 sessions, 108.9 hours on one rig. The dashed line is the rig's own imaging scale. The two cross-night observations underneath are calibration orthogonality drifting.

Observations

23 analysis rules run over your library, 19 within a night and 4 across nights, and write what they notice in plain language. Every one is labelled with where the claim came from.

That labelling is the part I care most about. An observation sourced to PHD2's documentation is applying a threshold from PHD2's own manual. One sourced to a PHD2 measurement is surfacing a number PHD2 produced, usually from a Guiding Assistant run, without deriving anything from it. One sourced to an Ephemeris heuristic is my inference from your data, which is useful and is not authoritative. When those disagree, and they do disagree, you can see which is which and make the call yourself.

Observations point at PHD2's own tools by name, because that's where the fix happens: the Calibration Assistant, the Guiding Assistant, Drift Align. And they stop short of claiming causation. A pier-side RMS ratio of 2.2x is a fact about your night. Why it happened is a hypothesis, and it gets written as one.

One night, thirteen guide sessions, eight observations. Each one carries its source, its evidence, and the PHD2 tool that actually fixes it.

Annotations and star quality ratings

Record what you changed and when. A new guide camera, a re-greased worm, a night the wind never stopped. The cross-night rules use those notes to attribute step changes in your trends instead of guessing at them. Star quality ratings stay with a session, so "the good nights" becomes something you can sort by months later rather than something you half remember.

Asking your own logs questions

This one started with me pasting chunks of guide log into Claude by hand to argue about a night that had gone sideways. It worked better than it deserved to, so I built the app a way to hand over structured data instead of me copying text.

Turn on the MCP server in Settings and Claude Desktop, running on the same Mac, can query your library directly. It's read-only, it binds to loopback, it's off until you switch it on, and it exposes session-level summaries rather than raw frames or log text.

   Claude Desktop  Ephemeris connected
  Ephemeris flags my min-move as too high on almost every night this season. Should I lower it?
list_observations rig: Edge-10mlist_ga_results rig: Edge-10m

Before you change anything: those flags disagree with PHD2's own measurement, and it matters which one you trust.

The min-move observations are labelled Ephemeris heuristic. They estimate a seeing floor from each session's pre-algorithm distances, then conclude your 0.40 px setting is running 2.2x to 4.2x above it, and suggest something in the 0.10 to 0.18 range.

But your Guiding Assistant runs are labelled PHD2 measurement. PHD2 ran it twice on this rig, on 15 and 25 April, and recommended 0.40 and 0.50 px. You're already set to 0.40. You match what PHD2 measured.

That's a real conflict rather than a rounding difference, and it comes from how each number is produced. The Guiding Assistant measures directly, with guiding paused, over a couple of minutes. The heuristic infers backwards from a full night of already-corrected data, which tends to pull the estimated floor low. I'd weight the direct measurement.

If you want to settle it rather than pick a side: both of your GA runs are from April, and the shorter one sampled just over two minutes. Run Tools → Guiding Assistant again for longer, on a night with typical seeing, and see whether it still lands near 0.40.

 
  Two patches of sky I shoot are about six degrees apart and guide completely differently. Any idea why?
list_targets rig: Edge-10mget_aggregate_stats rig: Edge-10m

You have two clusters sitting near RA 12.6h. The one at Dec +8.1 runs a median of 0.96″ across 115 sessions. The one at Dec +14.2 runs 0.37″ across 28. Same rig, six degrees apart, and a 2.6x difference.

Six degrees of declination on its own doesn't explain that. Before reaching for a mechanical cause, look at when you shot them: the +8 cluster spans 8 nights and the +14 cluster spans 5, so this may be which nights each target happened to land on rather than where it sits in the sky. Your p90 night is 1.72″ against a 0.58″ median, so two or three rough nights loaded into one cluster would produce exactly this.

I can't separate those two explanations from here. The connection gives me per-session summaries, not frame-level data, so I can see that the difference exists but not what the guide star was doing inside those sessions.

What would settle it: annotate the worst nights in Ephemeris with what the sky was actually doing. The cross-night rules use annotations to attribute step changes, so once the bad nights are labelled, the difference either survives or it doesn't.

 
A real exchange against a real library: 56 nights, 291 hours, one rig at 0.40″/px. Ephemeris hands over the numbers and their provenance. It doesn't hand over an answer.

Smaller things

Forum post export formats a session as text ready to paste into a Cloudy Nights thread, so asking for help stops meaning screenshotting a chart. Shortcuts support means importing a night or pulling stats can run from a shortcut or a Focus trigger. And the app now carries Sparkle, so future updates arrive in-app after you've said yes to checking for them.

Before you download

2.0 requires macOS 15 Sequoia. 1.0 ran on Sonoma, so if you're still on 14 this one won't open.

This update is manual. 1.0 shipped without Sparkle, so there's nothing in your current copy that can fetch the new one. Download it and replace the old app. It's the last time you'll have to do that.

Free, GPLv3, Developer ID signed and notarized, same as it was. Ephemeris is a Mac-native re-implementation of Andy Galasso's phdlogview, and it exists because that project does.

Download Ephemeris 2.0  ·  Read the full feature rundown  ·  Source on GitHub