Skip to content

Repository files navigation

Huntcam

Sort a trail camera's pictures into "something there" and "nothing there", then get a plain report of what visited: which species, how many times, day or night, with the best frame of each visit. Runs on your own computer; the only thing that leaves it is a downscaled copy of each picture, sent to the Claude API for identification.

Huntcam folder page: species table and sightings gallery

Watch the 23-second intro (mp4, 5 MB).

What it does

  • Reads a folder of trail-cam JPEGs and sends each one (downscaled) to Claude, once.
  • Marks each frame as empty or as containing people, birds, mammals or vehicles, with species, count, confidence and a one-line caption.
  • Groups frames taken within 90 seconds into one sighting and picks the clearest frame.
  • Shows a species table and a sightings gallery, and exports a markdown report.
  • Moves the empties into an _empty folder so you can check them before deleting.
  • Caches every answer, so re-running a folder costs nothing.

Requirements

  • Node 22 or newer.
  • An Anthropic API key. Pictures are analysed by Claude Opus 5 by default; Sonnet 5 and Haiku 4.5 can be chosen in Settings. Cost is shown per model on that page.
  • exiftool for capture times (Homebrew: brew install exiftool). Without it, frames have no times and every frame becomes its own sighting.
  • An image resizer. macOS has sips built in. On Linux or Windows install ImageMagick (magick) or ffmpeg. Settings shows which one was found.

Install

git clone https://github.com/hurricaneworks/huntcam.git
cd huntcam
npm ci
cp .env.example .env.local     # then put your key in it as ANTHROPIC_API_KEY=...
npm run dev                    # http://localhost:4120

The first visit opens Settings. Choose where Huntcam should keep your pictures (the library, default ~/Pictures/Huntcam), check the camera location and expected species, pick a model, and press Save.

Each time you have new pictures

  1. Copy the pictures from the camera or memory card to a folder on your computer, the way you would for any photos. Wait for the copy to finish.
  2. In Huntcam click Import new pictures, use Browse… to pick that folder, and click Copy. The pictures are copied into the library under today's date and analysed. Your own copy is left untouched.
  3. Open the set to see the species table and sightings. Glance through the "empty frames" fold-out for anything missed.
  4. Click Move empties to _empty. Delete _empty from the same page once you are happy; Restore puts them back.
  5. Download report (.md) saves the summary as a file.

Importing to an existing set name adds only pictures that are not already there. Analyse on a finished set only sends frames that have no result yet.

Cost and speed

Measured on a VOOPEAK TC08 (12800x7200 frames) with Claude Opus 5: about 3,050 input tokens per frame, roughly $0.018 a frame, $6 for 350 frames, at about 4 frames in parallel taking 6 minutes. The page shows the running total from the real usage figures.

How it works

server.js is a dependency-free Node HTTP server serving one HTML page. analyse.js downscales each frame to 1568 px on the long side, reads capture times with one exiftool call per folder, sends the frame to the Claude Messages API with a JSON schema for the answer, and writes results to <set>/results.json. Settings live in config.json (see config.example.json). Thumbnails are cached in .cache/.

Privacy

Downscaled frames are sent to the Anthropic API and nowhere else. The API key is read from .env.local and never shown in the page. Nothing is uploaded from your library except during analysis.

Licence

MIT. See LICENSE.

About

Sort trail-camera pictures with Claude: drop the empties, keep the wildlife, get a plain report

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages