尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
An always-on bird listener for the backyard, and the field guide it keeps for itself.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗An always-on bird listener for the backyard, and the field guide it keeps for itself.
The Aviary listens to the yard around the clock, names every bird it hears, keeps the recordings worth keeping, and turns months of detections into something a person wants to read. It runs in three yards today: the house, plus two self-contained field stations at family members' homes that have been listening since August 2026. The house alone has logged more than a hundred species since July.
Three characters do the work:
listener/) is the ears. He pulls raw audio from every microphone in the yard, screens out human speech, runs Cornell's BirdNET on every three-second window, and keeps the bird record.web/) is the face: a web app that shows the life list, plays the recordings, and charts when each species comes and goes.weatherpost/) is the weatherman: a backyard weather station plus a forecast, so the birds have context.| Layer | Built with |
|---|---|
| Listening | Python 3.11, BirdNET 2.4 (TensorFlow, or LiteRT on CPUs without AVX), YAMNet, ffmpeg and ALSA capture, numpy for the clip DSP |
| Microphones | IP camera audio over RTSP, USB microphones, an ESP32-S3 network mic |
| Messaging and storage | MQTT (Mosquitto, paho-mqtt, and mqtt.js over WebSockets for the live page), SQLite |
| Web app | Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, node:sqlite, pnpm |
| Field notes | Ollama with a local model; Claude through the Vercel AI Gateway, on demand |
| Weather | Ecowitt GW2000B gateway and WH90 sensor array (local API), OpenWeather |
| Stations and ops | systemd, Caddy, Tailscale, git-driven autodeploy with a promotion channel for the field stations, and a front door on Vercel backed by Upstash Redis |
| Tests | pytest and Vitest, run by GitHub Actions on every pull request |
https://github.com/user-attachments/assets/5a01a753-f71f-43d1-9641-45e526c57d93
The community layer (#556) is the big one. Three yards run the same listener in the same region, and none of them knows what the others heard: nobody can see that one yard logged a Pileated Woodpecker the same week another got its first. The plan:
Also on the way:
https://github.com/user-attachments/assets/6105475a-8c8b-46a3-a488-5347b5bb7b35
| Path | What lives there |
|---|---|
listener/ | Earl: capture, the speech and bird gates, visits, clips, the bird record, and the enrichment passes (species profiles, clip enhancement, the repertoire, field notes) |
weatherpost/ | Willard: the weather post and its seasonal archive |
flyway/ | The station network: the liveness watcher and the front-door check-in |
web/ | The Next.js web app: the Aviary and its weather tab |
frontdoor/ | The stations' stable public address (Next.js route handlers on Vercel) |
Servers/ | Caddy and Mosquitto config, and the deploy scripts |
docs/guide/ | The technical guide, one page per area |
| repo root | bus.py (the MQTT topic contract), feeds.py and feeds*.yml (the microphone registry), the model clients, station.env.example, and the pytest suites |
The technical guide in docs/guide/ is the living record of how everything is built and why: Earl, the Aviary, the web app, the weather post and the Flyway. Non-trivial changes start as an issue and land as a pull request that closes it, so the issue history is the design history, back to the first commit in July 2026.