cleanyourtv-app
Clean Your TV를 위한 커뮤니티 제작 모바일 앱
항상 작동하는 음향 새 식별: 가정용 3개 스테이션·보안 카메라·저가 라벨리어 마이크 각각 AI가 만든 목록에 데이터 제공
Always-on acoustic bird identification at the edge: three family monitoring stations, one riding security-camera audio and two on budget lavalier mics, each feeding a living life list with AI-written
기타GitHub @reclinerhead온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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.