I wanted a cover that explains itself. A year of Earth in 30 seconds, one picture a day from the same satellite at the same minute. Then the change is the only thing that moves. Himawari-9 hangs over 140.7 degrees east and NICT keeps its full disks as small PNG files. This looked like an evening of work. The hard part, I thought, would be the download.
Noon is the obvious time and also the boring one, because almost the whole disk is lit every day and only the clouds move. I took 21:00 UTC instead. Under the satellite it is about 06:23 local mean time, so the edge between day and night runs across the disk. NASA Earth Observatory has 4 Meteosat pictures taken this way, one per solstice and equinox. The edge tilts one way in December and the other way in June. I wanted every day between them. How to turn Himawari frames into an animation Charlie Loyd wrote down in 2015, so the video itself is an old idea.
The year
The window is 1 October 2025 to 30 September 2026. I asked NICT for 730 frames, 550 by 550 pixels, true colour. 365 are at 21:00 UTC and 365 at 03:00 UTC for the noon version. 723 came back. The 7 missing are all dawn frames and the server answers 403 on them. NOAA’s copy of the raw Himawari data has nothing at 21:00 on those dates either, so the satellite did not record these frames. In the video the previous frame stays on screen for that day.
At 12 frames per second, 365 frames is 30.4 seconds. ffmpeg 6.1.1 made the video and gifsicle 1.94 the GIF.
When I watched it the first time the edge swung like a pendulum and it also slid sideways, left in autumn and right in winter. I expected the swing. The sideways slide I could not explain at first. It made me ask a different question. If the edge moves in 2 directions over the year, maybe 1 frame is enough to say which day it is.
Reading the date from 1 frame
The analemma is a known photo. Shoot the sun from one place at the same clock time all year and it draws a figure 8 in the sky. Up and down is the season. Sideways it is the equation of time. The sun runs up to 16 minutes ahead of the clock in early November and 14 minutes behind in mid February. Before this run I did not expect to see it in a weather satellite picture.
The method is plain. Python 3.12, numpy 2.5.3, scipy 1.18.1, Pillow 12.3.0, skyfield 1.55 with the DE421 ephemeris. On every row of the frame I find the most western lit pixel. Lit means brightness 3 or more of 255 after 5 by 5 smoothing. Rows where this point sits on the rim of the disk are dropped. The geostationary projection turns each edge pixel into latitude and longitude. Then for every one of the 365 dates I compute where the sun was at 21:00 UTC. From that I get how far below the horizon it stands at each edge point. The right date is the one where all the edge points sit at the same sun angle. That angle I took from the other half of the frames. Even days are read with the value from odd days and the other way around.
The first version read most dates 2 to 4 days off, some too early and some too late. Only 20 of 358 frames came within a day.
The frame is 9 minutes long
My first idea was a constant error in the projection. So I let the program fit 2 extra numbers, a time shift and a slope from north to south. The fit wanted the frame to start before 21:00 and ran into the edge of every range I allowed. A satellite cannot take a picture before its schedule starts. Later I saw that the shift only traded against the sun angle at the edge. The slope alone came out close to the real scan.
The answer was in the raw files. NOAA keeps Himawari’s original data, 10 segments per full disk. The header of each segment has its start and end time. I downloaded only the first 300 KB of each one. The northern edge is scanned at 21:00:21, the equator at about 21:05:05, the southern edge at 21:09:40, within a second on all 3 dates I checked. I had taken “the frame at 21:00” as a single moment, while the headers show a scan of 9 minutes and 19 seconds. In 5 minutes the sun moves 1.25 degrees west. At the equator of this picture that is about 7 pixels. The error also grows from north to south, so the edge gets the wrong shape. That is enough for the search to prefer a date 2 or 3 days away.
With the real time of every row the result is this. 241 of 358 frames give the exact date, 335 are within a day, 353 within 3 days. Without the sideways slide, using only the tilt of the edge, it is 191 within a day.
Where it fails
The misses are not random and I like this more than the hits. 4 frames are wrong by months: 13, 14 and 15 April were read as 27 or 28 August and 30 August as 12 April. This is the point where the figure 8 crosses itself. On 14 April and 28 August the sun stands over 9.6 and 9.5 degrees north. Against the clock the 2 dates are less than a minute apart, so the frame does not hold the difference.
The second place is June. In December 30 of 31 frames are within a day, in June only 16 of 30 and the worst is 4 days. At both solstices the tilt stops changing. In December the equation of time still moves about 30 seconds a day and that saves the reading, in June about 13.
When I put the measured tilt against the measured slide for every frame, without any almanac, the figure 8 drew itself. Tilt follows the sun’s declination with correlation 0.9995. The slide follows the equation of time almost as close, 0.998. The slope is about 1.31 pixels per minute.
The cover itself
Then I prepared it for posting. As a GIF the dawn year is 50.6 MB and the noon year 79.7 MB. X caps an animated GIF at 15 MB and recommends at most 350 frames, but a year has 365 days. MP4 with H.264 at CRF 28 is 3.1 MB for dawn and 7.7 MB for noon. The dawn version is smaller, probably because a big part of every disk is dark. I did not check what exactly the encoder saves on.
What I did not check
The threshold of 3 of 255 was the best of the 3 I tried. At 6 the hits fall to 304 of 358, at 12 to 163, so the method depends on reading the very dark edge of twilight. The sun angle at the edge is calibrated on true dates of the other half of the frames, so this is not a blind test. I used one year of one satellite, at 550 pixels. And whether the video makes anyone stop scrolling I cannot say yet, it is not posted.