Status: archived. A personal backyard-astronomy project from April 2023, kept as work history. It is not maintained and is described here rather than offered for use.
A small web tool for planning a night of amateur astrophotography. Given an observer's latitude and longitude, a date range, a nightly time window, and altitude/azimuth limits (the practical constraints of a backyard with trees and rooflines), it computes when the requested targets are observable and renders the results as a nightly schedule.
Two parallel prototypes of the same idea, both structured as Flask form apps:
AstroPlanningApp.ipynb, the Skyfield version. It loads the JPL DE421 planetary ephemeris (de421.bsp, checked into the repo), places the observer withTopos, finds rise and set events withskyfield.almanac, and filters those events against the user's altitude and azimuth ranges. The notebook's saved output shows it serving on a local Flask dev server; its target catalog only got as far as the Moon.AstroPlanner.py, the astropy/astroplan version. It restates the problem inastroplanprimitives:Observer,FixedTargetname resolution,AltitudeConstraint,AirmassConstraint,AtNightConstraint, and aSequentialSchedulerproducing per-night observing blocks. This variant was left mid-rewrite and does not run as committed.
Python 3.9, Flask, Skyfield, astropy, astroplan, astroquery, and pytz. The 16 MB de421.bsp file is the JPL DE421 ephemeris the notebook loads.
- AstrophotPlanner, a fork of pjcigan/obsplanning with small local fixes, used alongside these prototypes for the same planning workflow.
MIT license.