
Milky Way Season
Last June near Sedona, Arizona, I got up at 2:00 AM, drove my rental car down a dirt road, and parked at a trailhead. I got out and looked up. Even though my eyes hadn’t fully adjusted, the sheer number of stars overwhelmed me. It was darker than I’d ever experienced. I couldn’t make out where the earth ended and the sky began, with thousands upon thousands of stars seemingly surrounding me. I had never felt anything like it.
As my eyes adjusted, I noticed a cloud stretching across the sky - brown, layered, with barely visible shadows along its edges. After about an hour of taking it all in and attempting to photograph it, the sky brightened. Although sunrise was two hours away, the stars faded, and the horizon revealed the outlines of the mountains.
Driving back, I had questions. What was that cloud? Why did it get light so early? How could I see more?
Back home under the bright skies of Atlanta, Georgia, I started researching. I learned about dark-sky scales, astronomical twilight, and what that cloud actually was: the galactic core of our own galaxy.
I also began learning about astrophotography, including a technique called photo stacking for processing images. I began to wonder: that night, I’d used my DJI Action Cam 5 to shoot a timelapse - that mode also saves raw images alongside the video. When I looked at the footage, it was unusable. By chance, I still had the raw images on the card. Could stacking help? I got the card out, and a few hours later - the result.

An Obsession Took Hold
NOAA estimates that eighty percent of Americans and one-third of humanity live in areas where they cannot see the Milky Way. My first glimpse - under a clear, moonless Bortle 2 sky, during peak Milky Way season - was more chance than planning. On my flight to Arizona, I asked ChatGPT for things to do in Sedona. It told me to go stargazing, gave me a location, and suggested I go after moonset that night. I verified that I wasn’t being set up for a bad time by a hallucinating AI, and gave it a go. The photo I captured was also more luck than planning. Action cams, with their wide-angle lenses, high ISO performance, and long shutter speeds, do better than a potato with night sky photography. So can a cellphone if you know some basics.
Experiencing the stars under truly dark skies satisfies something innate. I had to see more. This meant planning my finite free time around moon cycles, planetary orbits, dark-sky locations I could truly access, weather, and travel logistics. It also meant cycling through a stack of apps to understand and plan: PhotoPills, Weather, Dark Sky Maps, Star Charts, Google Maps, etc. Picture this: sitting in a car, cycling through apps for a plan B because the campers down the hill turned up their party lights. It’s painful, and it sucks the fun out of an activity that rewards precision and planning.
The App
So, I built myself a tool. It started as a simple script to give me moonless nights. Then I added feature after feature. I couldn’t have built something so advanced so quickly without AI, but I also couldn’t have built it well if I didn’t know how to code. I base the features on real science, drawing heavily on publicly available data from many sources. But the app itself calls only three APIs - two for weather, one for location. I implemented everything else myself in Python, rather than piecing it together from other people’s APIs. I open-sourced the project - the app is free for anyone to use. I tested it over a few trips — including a trip to Zion National Park — and DarkHours has performed well, even on the night when 100% cloud cover rolled in just as astronomical night kicked in, exactly as it predicted.