Lee Hardy Dydo

A Time-Lapse Camera from Spare Parts

October 5–11, 2026 · Time-Lapse Camera

The record library left me with a Raspberry Pi, a webcam and a button on my dad's workbench, and nothing left to scan. The next morning it was a time-lapse camera. Over the following week it rode in the car, ran unattended at a cabin, and picked up more features than I'd planned, most of them because something broke.

1One button

Tap to start, tap to stop. While it records, the Pi saves a frame every ten seconds and feeds each one into a video encoder as it goes, so there's always a video of the session so far. The Pi's own green light blinks slowly while it's recording. A session picks up where it left off after a restart. Everything else happens on a web page the Pi serves itself, which works from a laptop or a phone.

2Watching it live, like a video site

The first viewer just played the growing video file, reloading it every few seconds. That got old fast. I wanted it to behave like a live stream on a video site: open at the live edge with a LIVE button, scrub anywhere instantly with a thumbnail and the clock time under your finger, and keep playing as new footage arrives.

To get there, the Pi indexes the video file in small fragments as it grows, and the page fetches only the few seconds around wherever you are. Jumping to any point plays right away, and a full day of footage never piles up in the browser's memory.

Two problems surfaced along the way:

The station's frame browser: 7,558 frames grouped into hour buttons
Browse frames: 7,558 frames from one day, grouped by hour. Thumbnails load only as you scroll to them.

3Graphs, and a lesson about naming them

Every frame gets measured as it's taken: brightness of the sky, the ground and the whole frame, color, edge detail, how much it changed from the frame before, plus the Pi's own temperature, power warnings and free space. A graphs page shows them all on one time axis; touch anywhere and you get that moment's thumbnail and numbers. No internet needed, which mattered at the cabin.

The station's graphs page: a time window control and a brightness chart for sky, ground and whole frame across a day
A full day, Oct 6: brightness of the sky, the ground and the whole frame. You can see dawn, the afternoon, and the evening's lights.

The first morning, the graph I'd called "Motion" spiked four times. I went looking for what moved. Nothing had, except the dog once. The spikes were the camera adjusting its exposure. The graph wasn't measuring motion; it was measuring frame change, and calling it motion was a guess about the cause. So it got renamed, and a rule came out of it: keep measurement and analysis separate. The Pi records raw measurements and never reinterprets them. Anything that interprets them ("a dog walked by," "sunrise was at 7:12") is a separate layer that can be recomputed or thrown away.

One cheap signal fell out of the car rides: whenever we drove under an overpass, the top of the frame got darker than the bottom. "Sky darker than ground" turns out to be a decent detector for overhead cover.

4Working away from home

5Power, the boring hard part

The car's own USB-C port ran it fine. A 2.4-amp power bank didn't: a Pi 4 needs a solid 5 volts at 3 amps, and that bank couldn't deliver it. A 20,000 mAh bank that can runs it for roughly eight to ten hours. At ten-second intervals a day of footage takes about 95 MB an hour, so storage was never the limit; power was.

6What it cost

PartCost
Raspberry Pi 4 (2 GB)~$45
Aluminum case$12.95
Momentary button$7.95
1080p USB webcam~$25
microSD card, USB-C power supply, jumper wires~$16
Station~$107
Power bank, for portable use$20

Built with Claude Code, Anthropic's LLM coding tool, from my terminal. I decided what it should do and when something looked wrong; it generated the code.

7Next

The idea I like most: always capture densely, every two seconds, and decide the pacing afterward. The finished video would use every frame where something is happening and only a few where nothing is, picked by that frame-change measurement. Then, once a session is built, drop the frames the video didn't need. That, a better Wi-Fi antenna, and figuring out what the graphs are really for are the next round.