A bird classification system that works with Frigate NVR to identify the birds visiting your feeder.
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!
When Frigate detects a bird at your feeder, YA-WAMF:
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:
frigate/events on your MQTT broker1. 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 datadata/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.
# 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
MQTT connection errors?
DOCKER_NETWORK is set to the right network nameFrontend not loading?
docker compose psdocker compose logs yawamf-frontendNo detections appearing?
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 |
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.
This project is licensed under the MIT License - see the LICENSE file for details.