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.
- Background and motivation
- Features
- Repository structure
- Download & install
- Using Feedie
- Model & manifest updates
- Building from source
- Contributing
- License
- Acknowledgements
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.
- 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, andOnzekerso 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.
.
|-- 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: Useseframe/eguifor the desktop UI, handles scanning, manifest fetching, and model download/installation.crates/feeder_core: Library withscan_folder_with,EfficientVitClassifier, and export helpers, reusable in other tools.
- 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.
- Windows (Intel/AMD):
- 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, dragFeedie.appinto/Applicationsand 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. - 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:
- Enable Linux (Crostini) in ChromeOS Settings.
- In Terminal:
sudo apt update && sudo apt -y upgrade - Install runtime libs (if not already satisfied):
sudo apt install -y libgtk-3-0 libx11-6 libxkbcommon0 libxrandr2 libxinerama1 libxcursor1 libxi6 libgl1 - Copy the AppImage from Downloads:
cp /mnt/chromeos/MyFiles/Downloads/Feedie-linux-aarch64-<version>.AppImage ~/ - Run it:
chmod +x ~/Feedie-linux-<architecture>-<version>.AppImage && ~/Feedie-linux-<architecture>-<version>.AppImage
Prefer a portable build? Run
cargo build --release -p app_guiand starttarget\release\Feedie.exe.
- 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).
- Results tab - Review
Present,Empty, andUncertaingalleries. Use the context menu for quick relabels, export of selected images, or double-click to open the preview window. - Export tab - Choose what to export:
- Species with confident detections (creates subfolders per species)
- All
Uncertainsamples (singleUncertainfolder) - All
Emptyframes (singleEmptyfolder) - CSV with date/time/scientific name/lat/lng/path (camera GPS coordinates are prompted once per export)
- 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.
manifest.jsonis 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\modelson Windows), always expecting three files:feeder-efficientvit-m0.safetensorsfeeder-labels.csvmodel_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 updatesmodel_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.
Prerequisites:
- Rust toolchain (
rustupwith 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_guiCI helper scripts:
./scripts/ci.ps1- format + clippy + tests./scripts/spec_check.ps1- ensures every scenario inspecs/scenarios.mdis referenced by tests
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/*.ftltranslations and localized species labels
Before submitting a PR:
- Update specs/tests if your change affects user-facing behavior.
- Run
./scripts/ci.ps1. - Describe which scenario/task you are targeting so we can keep specs aligned.
Questions? Open an issue or start a discussion.
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.
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.
