Fog-Bank, the FogCam archive · fog-bank.org
FogCam keeps one picture and overwrites it with the next. Fog-Bank is the backup: every frame the fog cam publishes gets fetched within seconds by four pollers on three networks and kept in four places. This page is the plain description of how, with the numbers it produces (they're live, hover one to see how it was made).
A poller on my server asks fogcam.org for the image every 7 seconds. Each request carries a unique query string and no-cache headers so FogCam's own server cache can't hand back an old copy, plus a conditional header so an unchanged frame costs almost nothing to check. A new frame is named by the camera's own Last-Modified time and hashed with sha-256 before anything else touches it. Every attempt (new, unchanged or failed) goes into a permanent ledger.
fogline runs on Cloudflare's network and polls the camera every 15 seconds over a different path. It keeps the last 30 days of raw frames. Every frame it gets is pushed straight into the archive, and a sweep every 5 minutes and every night pulls anything that was missed, so a reboot, a full disk or a dead link on my side loses nothing fogline saw. It is also the witness: when my side goes quiet and fogline is still getting frames, the fault is mine and I get a Telegram message saying so.
A worker on Cloudflare polls the camera every 20 seconds on its own and writes each new frame straight into permanent storage (R2). A fourth poller runs on my desktop at home, in another state. It saves every frame to its own disk first (30 days) and sends it to the archive and the mirror within a minute, so a Cloudflare or hosting outage costs it nothing (it only runs while the desktop is on).
Every frame from every poller gets copied to Cloudflare R2 with its hash and indexed by day, and the archive checks itself against the mirror every 5 minutes and every night. The older archive, the 2019 rescue included, went up in September 2026, and the database (the ledger, incidents and adoptions) gets copied there every night too. Losing a frame now takes all four pollers missing the same picture at once, on a camera that holds each one for at least 20 seconds.
Frames are converted to lossless JPEG XL within minutes. It converts back bit for bit, the original sha-256 is kept, and a frame served from the site is the original JPEG rebuilt. The 27 damaged files in the 2015 and 2019 rescue ZIPs are kept out of the count, not repaired or passed off as frames.
An off-site check runs every 5 minutes. It reads the archive's status from outside, compares it with what it's catching itself, and checks the other pollers' pulse. A status board (on the net) checks every stage from the camera to YouTube, and a stage that stops gets reported on Telegram while the others keep catching.
When a day has a drop, the record says which side caused it. My poller silent: mine. FogCam answering with the same picture for half an hour or more, or not answering at all: FogCam's. Both are drawn on the calendar and on every chart with a time axis, and a drop of mine pages me. The full story, including the day I found an upstream cache taking frames, is on the net.
drop: my capture was downdrop: FogCam published nothingunsure: connection errors while the camera was quiet
The archive's code and settings get bundled every hour to an off-site server, so the whole thing can be rebuilt on a clean machine.
More: the net, in full · the frames that were lost before · browse the archive by date · why the archive exists