… has too many hobbies.

A pipeline for getting bird videos from an IP webcam

I have an IP webcam pointed at my bird bath. (The exact camera is this one from SV3C, which has a 15x optical zoom. It's one of the most economical choices with nontrivial optical zoom that I could find.)

The camera supports storing motion clips on an onboard microSD card or in a cloud service. Either way requires using an iPhone app; I'd much prefer a solution that works on my desktop. Bonus points if it just works with files on my NAS. (In theory the camera supports storing clips to a NAS via FTP, but despite an hour of experimenting I couldn't get that feature to work.)

The camera also presents a web UI, and part of that UI is a basic directory listing of the files on the SD card:

A screenshot of the SD card directory listing.

This, I figured, is a good starting point.

First, I wrote ipcam-browser, which parses this directory listing and presents a nice UI for browsing the camera's recordings:

The ipcam-browser UI.

ipcam-browser is free and should work with any SV3C webcam that uses this same firmware. It runs on my NAS and is served via Tailscale, allowing secure access to the webcam's recordings from anywhere.

This UI wasn't enough for me, though. It provides a quick way to preview recordings, but what I really want is a tool that filters these videos and gives me only those that contain a bird.

So I wrote ipcam-bird-detection. This tool pulls recordings from the camera, using the REST API provided by ipcam-browser, chooses a couple frames from each recording, and runs YOLOv11 on them to determine whether the recording was triggered by a bird or something else. Bird videos are dumped to a special folder on my NAS.

ipcam-bird-detection is also free. It runs on my NAS every 15 minutes via cron.

The end result of all this work is that I get a folder on my NAS containing only bird videos, like this one:

0:00
/0:24

An Eastern Bluebird sitting on the edge of an icy birdbath

This is an example of the power of LLM coding agents — specifically, Claude Code — for hobby projects like this. I would never have taken the time needed to write specialized software like this manually! But using Claude Code cuts development time down such that it's feasible to write projects like this: projects so tailored to a single use case that they border on throwaway. I'm a fan.

Once birds start using the bird bath this spring, the best videos will be shared to birdbath.tube.