YetAnother-WhosAtMyFeeder Svelte Themes

Yetanother Whosatmyfeeder

🐦 AI-powered bird identification for Frigate NVR. Classifies birds from your feeder camera using TensorFlow Lite and displays them in a real-time dashboard.

Yet Another WhosAtMyFeeder (YA-WAMF)

A bird classification system that works with Frigate NVR to identify the birds visiting your feeder.

About This Project

This is a personal project I started to experiment with AI-assisted coding. I noticed the original WhosAtMyFeeder wasn't being maintained anymore and thought it would be a fun way to learn while building something useful.

The whole thing has been built with help from AI coding assistants - it's been an interesting way to see what's possible with these tools. If you spot any rough edges, that's probably why!

What It Does

When Frigate detects a bird at your feeder, YA-WAMF:

  1. Grabs the snapshot image
  2. Runs it through a bird classification model
  3. Shows you what species it thinks it is
  4. Keeps track of all your visitors in a nice dashboard

How It Works

Here's the flow from bird to identification:

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”     MQTT Event      ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│   Frigate   │ ─────────────────>  │  YA-WAMF    │
│   (NVR)     │   "bird detected"   │  Backend    │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜                     ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                                           │
                                           v
                                    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
                                    │ Fetch image  │
                                    │ from Frigate │
                                    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                                           │
                                           v
                                    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
                                    │  TFLite ML   │
                                    │  Classifier  │
                                    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                                           │
                                           v
                                    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
                                    │ Save to DB & │
                                    │ Update UI    │
                                    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Step by step:

  1. Frigate spots a bird - Your camera picks up movement, Frigate's object detection identifies it as a bird
  2. MQTT message sent - Frigate publishes an event to frigate/events on your MQTT broker
  3. YA-WAMF receives the event - The backend is subscribed to that MQTT topic and picks up the message
  4. Snapshot fetched - The backend calls Frigate's API to grab a clean snapshot of the bird
  5. Classification runs - The image goes through a TensorFlow Lite model trained on bird species
  6. Results stored - If the confidence is high enough, the detection gets saved to the database
  7. Dashboard updates - The frontend gets a real-time update via Server-Sent Events (SSE)

Getting Started with Docker Compose

What You'll Need

  • Docker and Docker Compose installed
  • Frigate already running with MQTT enabled
  • Your MQTT broker details (usually mosquitto running alongside Frigate)

Setup Steps

1. Create a directory and grab the compose file:

mkdir ya-wamf && cd ya-wamf
curl -O https://raw.githubusercontent.com/Jellman86/YetAnother-WhosAtMyFeeder/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/Jellman86/YetAnother-WhosAtMyFeeder/main/.env.example

2. Create your environment file:

cp .env.example .env

3. Edit the .env file with your settings:

# The Docker network where Frigate and your MQTT broker live
# (check with: docker network ls)
DOCKER_NETWORK=your_frigate_network_name

# Your Frigate instance
FRIGATE_URL=http://frigate:5000

# Your MQTT broker (usually 'mosquitto' if running in Docker)
MQTT_SERVER=mosquitto
MQTT_PORT=1883

# If your MQTT needs authentication
MQTT_AUTH=true
MQTT_USERNAME=your_username
MQTT_PASSWORD=your_password

# Your timezone
TZ=Europe/London

4. Make sure the external network exists:

The containers need to join the same Docker network as your Frigate/MQTT setup. Check your network name:

docker network ls

Look for whatever network your Frigate containers are using.

5. Create the data directories:

mkdir -p config data/models

The directory structure:

  • config/ - Configuration files (config.json)
  • data/ - Persistent data
    • data/models/ - Downloaded ML models (persists across container updates)

6. Start it up:

docker compose up -d

7. Open the dashboard:

Go to http://your-server-ip:9852 in your browser.

8. Download the bird model:

On first run, you'll need to download the classification model. Go to Settings in the web UI and click the download button. The model is saved to data/models/ and will persist across container updates - you only need to download it once.

Checking It's Working

# Check container status
docker compose ps

# Check backend logs
docker compose logs yawamf-backend

# You should see something like:
# MQTT config: auth=True port=1883 server=mosquitto
# Connected to MQTT topic=frigate/events

Troubleshooting

MQTT connection errors?

  • Make sure DOCKER_NETWORK is set to the right network name
  • Check that your MQTT server hostname is correct
  • Verify MQTT credentials if authentication is enabled

Frontend not loading?

  • Check the frontend container is healthy: docker compose ps
  • Look at frontend logs: docker compose logs yawamf-frontend

No detections appearing?

  • Make sure Frigate is detecting birds and publishing to MQTT
  • Check the backend logs for incoming events
  • Verify the classification model was downloaded

Configuration

Most settings can be changed through the web UI under Settings. They get saved to config/config.json.

Setting What it does Default
Frigate URL Where to fetch snapshots from http://frigate:5000
MQTT Server Your MQTT broker hostname mqtt
Classification Threshold How confident the model needs to be (0-1) 0.7

Tech Stack

  • Backend: Python 3.12, FastAPI, SQLite
  • Frontend: Svelte 5, Tailwind CSS
  • ML: TensorFlow Lite bird classifier
  • Messaging: MQTT for Frigate events, SSE for live UI updates

Contributing

Feel free to open issues or PRs if you find bugs or have improvements. Just keep in mind this is a hobby project maintained in spare time.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Thanks To

  • The original WhosAtMyFeeder project for the idea
  • Frigate for being such a great NVR
  • The AI assistants that helped build this thing

Top categories

Loading Svelte Themes