[!IMPORTANT] Upcoming Breaking Change (v2.5.0): Container security is being improved. Containers now run as non-root (UID 1000) by default. This may require you to update your
docker-compose.ymlwith a specificuser:ID or adjust folder permissions. See MIGRATION.md for the full migration guide.
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:
Advanced Features:
For detailed guides on setup, integrations, and troubleshooting, please see the Full Documentation Suite.
Here's the flow from bird to identification:
โโโโโโโโโโโโโโโ MQTT Event โโโโโโโโโโโโโโโ
โ Frigate โ โโโโโโโโโโโโโโโโโ> โ YA-WAMF โ
โ (NVR) โ "bird detected" โ Backend โ
โโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโโ
โ
v
โโโโโโโโโโโโโโโโ
โ Fast Path: โ
โ Use Frigate โ
โ Sublabels? โ
โโโโโโโโฌโโโโโโโโ
โ
(No) v (Yes)
โโโโโโโโโโโโโโโโ
โ AI Engine โ
โ (TFLite/ONNX)โ
โโโโโโโโฌโโโโโโโโ
โ
v
โโโโโโโโโโโโโโโโ
โ Save to DB & โ
โ Notify User โ
โโโโโโโโฌโโโโโโโโ
โ
v
โโโโโโโโโโโโโโโโ
โ Auto Video โ
โ Analysis โ
โ (Background) โ
โโโโโโโโโโโโโโโโ
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=frigate
# 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=mqtt_user
MQTT_PASSWORD=secret_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://localhost:9852 in your browser (or your server's IP address).
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 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 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 |
| Min Confidence Floor | Discard detections below this score (unless Frigate verified) | 0.4 |
| Trust Frigate Sublabels | Skip local AI if Frigate has an identification | Enabled |
| Auto Video Analysis | Automatically classify clips for higher accuracy | Disabled |
| BirdWeather Token | Station token for uploading detections to BirdWeather | (none) |
| BirdNET-Go Topic | MQTT topic for audio detections | birdnet/text |
| AI Model | Choose between MobileNet (Fast), ConvNeXt (High), or EVA-02 (Elite) | MobileNet |
By default, YA-WAMF does not require authentication. It assumes it is running on a trusted local network.
Enabling Authentication:
To protect your dashboard and API with a password (API Key), set the YA_WAMF_API_KEY environment variable in your .env or docker-compose.yml file:
environment:
- YA_WAMF_API_KEY=your-super-secret-password
When enabled:
X-API-Key: your-super-secret-password.YA-WAMF includes a robust video proxy that streams clips directly from Frigate. This supports:
YA-WAMF includes a custom component for Home Assistant to bring your bird sightings into your smart home.
Features:
Setup:
custom_components/yawamf folder to your Home Assistant custom_components directory.http://192.168.1.50:9852).This project is in active development, and your feedback is incredibly valuable! If you are using YA-WAMF, please help the project by:
Feel free to open PRs if you have improvements to share. 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.