Skip to content
/ feedie Public

GUI app to manage imagery from a (bird) feeder camera, including species classification, sorting images into folders and export to Observation.org-compatible CSV. Allows uploading manual labels and offers automatic updates.

License

Notifications You must be signed in to change notification settings

kpauly/feedie

Repository files navigation

Feedie banner

Feedie – Efficient species detection for backyard feeder cameras

Release Downloads Built with Rust License Platform Platform

Feedie is a native application available for Windows and macOS that scans SD-card dump folders from your wildlife feeder camera, detects visitors with an EfficientViT model, and helps you export curated images and CSV reports. Everything runs fast on CPU only and locally — no cloud upload unless you explicitly opt in to sharing samples with Roboflow. The entire app is targeted to non-tech savvy users, and only available in Dutch for the moment. Additional languages (starting with English) are planned. The embedded model currently targets common garden species in Belgium and the Netherlands.


Table of contents

  1. Background and motivation
  2. Features
  3. Repository structure
  4. Download & install
  5. Using Feedie
  6. Model & manifest updates
  7. Building from source
  8. Contributing
  9. License
  10. Acknowledgements

Background and motivation

Feedie was born out of a need for a simple, efficient, and user-friendly tool to manage low-end bird feeder camera data such as the Denver bird feeder camera that typically come without software. Hence, the initial motivation was to create a solution that could identify and sort the large volumes of images generated by these cameras on a simple laptop with CPU only, originally targeted to non-technical users in Belgium and The Netherlands. Existing open-source tools like AddaxAI are not available in Dutch, make model selection too technical, and do not have adequate models that deal with the characteristic species and close-up front view perspective of bird feeder cameras. Aditionally, APIs that connect to potentially capable classification models such as Naturalis AI Nature, the model behind observation.org (waarnemingen.be/waarneming.nl), do not yet offer plans that are affordable for private end users to allow occasional bulk inference, and would still take a considerable time to run inference. In line with lean requirements, compared to AddaxAI Feedie uses 10 times less RAM memory both in idle and during processing, processes images 75 times faster on CPU only (and 15 times faster compared to the AI Nature API), and requires 400 times less model storage and runtime space. In developing a solution to deal with these issues, this project was also meant to learn something about recent programming languages, concepts and frameworks, native solutions, and release and maintenance best practices.


Features

  • EfficientViT inference – Runs the bundled EfficientViT-M0 weights on CPU with configurable thresholds and background classes.
  • Smart galleries – Tabs for Aanwezig, Leeg, and Onzeker so you can triage detections quickly.
  • Context menu actions – Assign species, mark background, or create new labels on batches of thumbnails.
  • Export workflows – Per-selection export via context menu or batch export from the dedicated tab (species folders, Onzeker bundle, Leeg bundle, CSV with metadata). The CSV file format is compatible with Observation.org (waarnemingen.be/waarneming.nl) for bulk import.
  • Model updater – Checks manifest.json, shows available app/model versions, and can download/install new models automatically into %AppData%\Feedie\models.
  • Roboflow opt-in uploader – When enabled, manual relabels are uploaded in the background without blocking the UI. This enables regular model improvements through community contributions.

Repository structure

.
├── assets/                # Branding and installer imagery
├── manifest.json          # App + model version manifest consumed by the updater
├── models/                # Bundled EfficientViT weights, labels, and version file
├── crates/
│   ├── app_gui/           # egui desktop application (“Feedie”)
│   └── feeder_core/       # Core inference, scanning, and CSV utilities
├── scripts/               # CI helper scripts (fmt, clippy, tests, spec checks)
└── specs/                 # Product spec, tasks, and acceptance scenarios
  • crates/app_gui: Uses eframe/egui for the Windows UI, handles scanning, manifest fetching, and model download/installation.
  • crates/feeder_core: Library with scan_folder_with, EfficientVitClassifier, and export helpers, reusable in other tools.

Download & install

  1. Download for your platform:
  2. Windows: Run the installer. You may be warned a couple of times that you are about to install an app from an unknown publisher, but you can just accept. Feedie is installed to C:\Program Files (x86)\Feedie. macOS: Open the downloaded zip file, drag Feedie.app into /Applications and run Feedie from there (right-click to accept the warning on first run).
  3. Launch Feedie from the Start menu. The bundled model is copied to %AppData%\Feedie\models on first run so you can work offline immediately. The Instellingen tab will show your currently installed app/model versions and automatically check for available updates.

Prefer a portable build? Run cargo build --release -p app_gui and start target\release\Feedie.exe.


Using Feedie

  1. Fotomap tab – Point Feedie at your feeder cam SD-card dump folder. It shows how many frames were found and lets you start a scan.
  2. Scanresultaat tab – Review Aanwezig, Leeg, and Onzeker galleries. Use the context menu for quick relabels, export of selected images, or double-click to open the preview window.
  3. Exporteren tab – Choose what to export:
    • Species with confident detections (creates subfolders per species)
    • All Onzeker samples (single Onzeker folder)
    • All Leeg frames (single Leeg folder)
    • CSV with date/time/scientific name/lat/lng/path (camera GPS coordinates are prompted once per export).
  4. Instellingen tab – Adjust thresholds, enable Roboflow uploads, and manage updates. The section at the bottom shows app/model versions and exposes the “Download en installeren” button when a new model is published.

Documentation in specs/ covers the product spec, tasks, and test scenarios if you want a deeper dive.


Model & manifest updates

  • manifest.json is the lightweight descriptor hosted via GitHub raw. It contains the latest app tag and model release.
  • Feedie stores active models in %AppData%\Feedie\models, always expecting three files:
    • feeder-efficientvit-m0.safetensors
    • feeder-labels.csv
    • model_version.txt
  • When the manifest reports a newer model version, the UI offers a download button. Feedie fetches the ZIP (Feedie_EfficientViT-m0_vX.Y.Z.zip), validates the contents, installs them into the AppData directory, refreshes the labels, and updates model_version.txt.
  • You can also unzip releases manually into %AppData%\Feedie\models if you prefer fully offline installs.

If you launch without network access, Feedie keeps using the installed model. Click “Opnieuw controleren” once you reconnect.


Building from source

Prerequisites:

  • Rust toolchain (rustup with the MSVC target on Windows)
  • Windows 11 build tools (Visual Studio Build Tools or Desktop Development with C++)

Steps:

git clone https://github.com/kpauly/feedie.git
cd feedie
./scripts/ci.ps1       # fmt + clippy + tests
cargo run -p app_gui   # debug build
cargo run --release -p app_gui

CI helper scripts:

  • ./scripts/ci.ps1 – format + clippy + tests
  • ./scripts/spec_check.ps1 – ensures every scenario in specs/scenarios.md is referenced by tests

Contributing

We welcome contributions and feedback! Ideas (in no particular order):

  • The most important contribution comes from just using the app with "Help het model te verbeteren" enabled. This will quickly grow the dataset to train improved model versions. Any usage feedback is also greatly appreciated.
  • macOS testing and PRs that fix issues on Mac
  • Add a "stats" tab to summarize/analyze scan results
  • Polish UI/UX and add translations
  • Further optimizing CPU-based inference speed: enabling BLAS backend (mkl/accelerate), batch-level parallelism, batch size auto-tuning.

Before submitting a PR:

  1. Update specs/tests if your change affects user-facing behavior.
  2. Run ./scripts/ci.ps1.
  3. Describe which scenario/task you’re targeting so we can keep specs aligned.

Questions? Open an issue or start a discussion.


License

Feedie is distributed under the PolyForm Noncommercial License 1.0.0. You’re welcome to use and modify the app for noncommercial purposes. For commercial licensing, please reach out to the maintainers.


Acknowledgements

The entire app and documentation is built using Zed with the OpenAI Codex via ACP. The openly available classification model training dataset is maintained, labeled and versioned on Roboflow. Labeling for the initial model version was entirely done by Lia Pauly. The dataset has an associated proprietary trained model available for inference on Roboflow, but a model for local in-app use was based on EfficientViT-M0 pretrained on Imagenet-1k, available from Hugging Face and fine-tuned using the Roboflow dataset on Google Colab. It was implemented for inference natively (without requiring an external runtime) using Candle and exposed through egui/eframe. The Feedie icon was designed from ChatGPT. App binaries and Windows installer are built through GitHub Actions and Inno Setup.


Happy feeding! 🐦📸 If you build something on top of Feedie—new models, workflows, or accessories—we’d love to hear about it.

About

GUI app to manage imagery from a (bird) feeder camera, including species classification, sorting images into folders and export to Observation.org-compatible CSV. Allows uploading manual labels and offers automatic updates.

Topics

Resources

License

Stars

Watchers

Forks