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. Processing is fully local, but the app allows uploading manual labels and automatically checks for 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 Platform

Feedie is a native application available for Windows, macOS, and Linux (AppImage) 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 UI is available in Dutch, English, French, German, Spanish, and Swedish with system auto-detect and a manual override. 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. Additionally, 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 much faster on CPU only, and requires substantially 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, background labels, and auto-batched preprocessing.
  • 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 + app updater - Checks manifest.json, shows available app/model versions, and downloads new models automatically. On Windows, Feedie can download and launch the new installer directly.
  • Multilingual UI - Dutch, English, French, German, Spanish, Swedish (system auto-detect with manual override).
  • Recursive scan + cache - Include subfolders when scanning and re-open cached results instantly.
  • Roboflow opt-in uploader - When enabled, manual relabels are uploaded in the background without blocking the UI.

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 desktop 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 the latest release for your platform:
    • Windows (Intel/AMD): FeedieSetup-<version>.exe
    • macOS Apple Silicon: Feedie-mac-arm64-<version>.zip
    • macOS Intel: Feedie-mac-intel-<version>.zip
    • Linux (x86_64 AppImage): Feedie-linux-x86_64-<version>.AppImage
    • Linux (ARM64 AppImage): Feedie-linux-aarch64-<version>.AppImage
    • All downloads are available from the latest release.
  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\Feedie. Henceforth, you can launch Feedie from the Start menu. 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). Linux: Make the AppImage executable (chmod +x Feedie-linux-<architecture>-<version>.AppImage) and run it.
  3. The bundled model is copied to your user data directory on first run so you can work offline immediately. The Settings tab will show your currently installed app/model versions and automatically check for available updates.

Chromebook quick start:

  1. Enable Linux (Crostini) in ChromeOS Settings.
  2. In Terminal: sudo apt update && sudo apt -y upgrade
  3. Install runtime libs (if not already satisfied): sudo apt install -y libgtk-3-0 libx11-6 libxkbcommon0 libxrandr2 libxinerama1 libxcursor1 libxi6 libgl1
  4. Copy the AppImage from Downloads: cp /mnt/chromeos/MyFiles/Downloads/Feedie-linux-aarch64-<version>.AppImage ~/
  5. Run it: chmod +x ~/Feedie-linux-<architecture>-<version>.AppImage && ~/Feedie-linux-<architecture>-<version>.AppImage

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


Using Feedie

  1. Photo folder tab - Point Feedie at your feeder cam SD-card dump folder. It shows how many frames were found and lets you start a scan (with optional recursive scan).
  2. Results tab - Review Present, Empty, and Uncertain galleries. Use the context menu for quick relabels, export of selected images, or double-click to open the preview window.
  3. Export tab - Choose what to export:
    • Species with confident detections (creates subfolders per species)
    • All Uncertain samples (single Uncertain folder)
    • All Empty frames (single Empty folder)
    • CSV with date/time/scientific name/lat/lng/path (camera GPS coordinates are prompted once per export)
  4. Settings tab - Adjust thresholds, background labels, language, and optional Roboflow uploads. The section at the bottom shows app/model versions and exposes download buttons when new versions are published (Windows can install app updates directly).

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 the user data directory (for example %AppData%\Feedie\models on Windows), 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 data directory, refreshes the labels, and updates model_version.txt.
  • On Windows, app updates are downloaded by the updater and launched automatically. macOS and Linux updates remain manual for now.

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 (non-exhaustive and in no particular order):

  • The most important contribution comes from just using the app with "Help improve reconnect" enabled. This will quickly grow the dataset to train improved model versions. Any usage feedback is also greatly appreciated.
  • macOS and Linux testing and PRs that fix issues on these platforms
  • Add a "stats" tab to summarize/analyze scan results
  • Polish UI/UX and expand translations to additional languages by contributing Fluent i18n/*.ftl translations and localized species labels

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 are 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 are 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 would 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. Processing is fully local, but the app allows uploading manual labels and automatically checks for updates.

Topics

Resources

License

Stars

Watchers

Forks