# whoBIRD: on-device bird sound recognition on Android

> whoBIRD listens through the phone microphone and names birds as they call, using the BirdNET model for more than 6,000 species, with everything computed on the device and no connection required. It is a good fit for field recording, and its future on certified Android devices is uncertain because of a policy disagreement over developer identity.

**woheller69/whoBIRD** — Identify bird sounds in real time with this Android version of BirdNET. Bird sound recognition for more than 6,000 species worldwide. 

- Repository: https://github.com/woheller69/whoBIRD
- Stars: 925 · Forks: 47
- Language: Kotlin
- License: GPL-3.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/woheller69-whobird

## Recognition of more than 6,000 species, entirely on the phone

whoBIRD is an Android application that identifies birds by their sounds in real time. The project describes it as an Android version of BirdNET, built on the BirdNET framework by the author kahst, and it carries a database of over 6,000 bird species worldwide.

The architectural point is stated in one sentence: the app performs its magic in real time entirely on the device, without requiring an internet connection. That is what makes it usable in a forest or at the edge of a remote lake, and it is also what separates it from a service that streams audio to a server.

The implementation is Kotlin in an Android project, with the usual Gradle build files, an app module, a fastlane directory holding store metadata and screenshots, and a misc directory. The upstream model arrives at first start, when the app downloads the required BirdNET model files, so the first launch needs a connection and everything after that does not.

The codebase is deliberately thin in terms of what it does not contain. There is no account, no server component and no cloud processing, so the privacy story is simple by construction: the audio never has to leave the device.

## Detections appear as notifications and accumulate in an observation database

The interaction model is short. Once the app is installed and opened, it begins listening and analysing. When a bird is detected, its name is briefly displayed, and for the full list you move to the View tab.

That tab is also where you manage the data. You can back up, share or delete the database that contains your observations. The fact that the database is a thing you can back up and share matters for anyone building a personal archive, because the observations are the only lasting output of the app apart from the on-screen names.

Two additional outputs are optional and worth understanding. With the Show Images option enabled, an image of the detected bird is downloaded when the detection probability is high, so the app can fetch an illustration for a confident call. And with Save .wav files enabled, a wav file is written for each detection into the Music directory, where recordings are not deleted by the app, so you have to clean them up yourself. That option needs Android 12 or later and carries a warning that it may consume a lot of storage, which is fair: a full day of recording a busy wetland produces a lot of audio.

## The meta model decides whether a bird could even be there

The most interesting setting is the meta model, which is the layer that uses location and season to judge a detection. The Ignore Date and Place option disables the meta model that checks whether a bird can be present at your location at the current time, and the documentation gives the reason: it is useful when analysing recordings from other locations, such as a file you recorded somewhere else or one you are reviewing later.

The Weighted Meta Model option goes further and changes the maths. In addition to running the meta model for the current week and location, this version computes the meta model predictions for all weeks of the year at the same location, and the final result is a 50/50 weighted average of two things: the prediction for the current week, and the maximum prediction across all weeks.

The stated purpose is migratory birds. Taking the maximum across the year means a species that arrives a week earlier or leaves a week later than the typical migration period is still recognised, because the season check is relaxed by the best matching week rather than being strict about the current one. The trade-off is implied rather than stated: the seasonal filter becomes more permissive, so false positives become more likely in a location where the same species could plausibly appear at some point in the year.

## Signal conditioning settings decide how many false positives you get

Several settings exist purely to make the detection usable in real conditions.

Audio Source lets you select the input that works best for the device, and the recommendation is Unprocessed, with Microphone to be selected when using a USB microphone. That default is worth understanding: an unprocessed input means the phone's own noise suppression is not shaping the audio before the model sees it.

The High Pass Filter removes low frequencies to reduce background noise such as traffic, and the documentation gives 200Hz as an example that can help minimise low-frequency noise.

The Threshold sets the minimum probability required for a detection to be displayed, and the documentation warns to be cautious when lowering it, because it may lead to an increase in false detections. In practice this is the dial you will move first: a forest at dawn and a road in summer need different thresholds, and the app does not adapt it for you.

There is one more piece of housekeeping. On Android 13 and later you can set the app language in the Android app settings, so the interface language follows the system rather than a setting inside the app. Translations are contributed through an external translation platform, listed in the project as toolate.thing.xyz for the whobird project.

## The app is leaving certified Android devices over identity disclosure

The most consequential paragraph in the project is at the very top of the README, above the screenshots. It states that Google has announced that, starting in 2026/2027, all apps on certified Android devices will require the developer to submit personal identity details directly to Google, and that since the developers of this app do not agree to this requirement, the app will no longer work on certified Android devices after that time.

That is a distribution problem, not a code problem, and it changes how you should think about adopting the app. The code is GPLv3 and the model is downloadable, so the work continues regardless. What may stop is the ordinary path of installing it from a store on a certified phone.

The route the project points at is F-Droid, and the badge in the README links to the listing for the package identifier below.

```bash
org.woheller69.whobird
```

F-Droid builds from the source in the repository, which is a meaningful difference for an app whose model and runtime library are downloaded separately at first start.

For an adopter this is the first thing to check, and it is checkable: the F-Droid listing tells you which release is packaged and when it was built.

## GPLv3 for the app, non-commercial terms for the model it downloads

The licence section is a stack rather than a single line, and reading it as a stack matters.

The application itself is licensed under GPLv3, copyright woheller69. The app is built on the BirdNET framework by kahst, published under CC BY NC SA 4.0. At first start it downloads the BirdNet TFLite library from the separate whoBIRD-TFlite repository, which is also published under CC BY NC SA 4.0. Label files from BirdNET are used under GPL 3.0 with permission from the author, which is granted through an issue on this repository.

On top of that, the project uses code from the Tensorflow Lite examples under Apache 2.0, Zip4j under Apache 2.0, and iirj under Apache 2.0.

The NC in CC BY NC SA 4.0 is the term to pay attention to, because it covers the framework the model comes from and the runtime library the app downloads, while the app shell itself is GPLv3. Those are different permission sets stacked on one product, and what they mean for a particular use is a question for a reader who is prepared to read the licences rather than for a review. Anyone shipping whoBIRD inside a commercial product, or relying on it for a paid service, should read the CC BY NC SA 4.0 text and the GPLv3 text directly and take their own advice.

## Regular tagged releases, and a project that ships its own store metadata

The release history is steady and recent. The tags are V5.4 from 2026-07-20, V5.3 from 2026-06-23 and V5.2 from 2026-04-20, and the last push was on 2026-08-02. The repository is not archived, and the version tags are the kind a user can pin an F-Droid build to.

Two details in the repository show how the project is organised for release. The fastlane directory holds the metadata and the store screenshots, which means the app is packaged with the metadata a store listing needs rather than with a separate marketing repository. And the gradle files at the root, including the wrapper scripts for Linux and Windows and a local.properties file, show an ordinary Android Studio project layout, so a developer can open it and build it.

There is also a demo.mp4 and a preview.jpeg at the root, and the README links a video embedding a demonstration, which together with the screenshots is the usual way this author presents an Android app.

Overall the picture is a small, actively maintained GPLv3 application whose unusual characteristic is that it is heading out of the mainstream app stores by choice, with F-Droid as the intended home.

## Conclusion

Adopt whoBIRD if you want automatic species identification while walking, if you are willing to spend storage on saved wav files, and if you accept a GPLv3 application that pulls a non-commercial licensed model on first start. Do not adopt it if you need it on a certified Android device in the 2026 and 2027 timeframe, because the developers state the app will stop working on certified devices once Google requires developer identity details they do not agree to provide, and check the F-Droid listing before anything else since that is the distribution route the project points at. Before the first recording, set the audio source to Unprocessed unless you use a USB microphone, raise the detection threshold above the default if false positives dominate, and decide whether the weighted meta model is appropriate for your data, because it deliberately departs from the strict date and place filter.

## FAQ

### Does whoBIRD need an internet connection to identify birds?

Not for recognition, since the analysis runs in real time entirely on the device. The exception is the first start, when the app downloads the required BirdNET model files. Afterwards the app can be used anywhere, including in places with no coverage.

### How does the Weighted Meta Model option change detections?

It computes the meta model predictions for all weeks of the year at the same location, and the final result is a 50/50 weighted average of the current week prediction and the maximum across all weeks. The stated benefit is better detection of migratory birds that arrive or leave outside the typical period.

### Where can I get whoBIRD now that it will leave certified Android devices?

The project links the F-Droid listing for the package org.woheller69.whobird. The app is GPLv3 and its source and build files are in the repository, so the F-Droid build path is the one the project points at after the identity requirement takes effect.

### What licences apply to whoBIRD and its model?

The app itself is licensed under GPLv3, while the BirdNET framework it is built on and the TFLite library it downloads at first start are published under CC BY NC SA 4.0. The BirdNET label files are used under GPL 3.0 with permission from the author, and parts of Tensorflow Lite examples, Zip4j and iirj are under Apache 2.0.

### How do I reduce false detections in whoBIRD?

Raise the Threshold setting, which sets the minimum probability required for a detection to be shown, since lowering it increases false detections. The audio source should usually be Unprocessed unless you use a USB microphone, and the High Pass Filter can suppress low frequency background noise such as traffic.

## Sources

- [Issues](https://github.com/woheller69/whoBIRD/issues)
- [License: GPL-3.0](https://github.com/woheller69/whoBIRD/blob/master/LICENSE)
- [README](https://github.com/woheller69/whoBIRD/blob/master/README.md)
- [Releases](https://github.com/woheller69/whoBIRD/releases)
- [woheller69/whoBIRD on GitHub](https://github.com/woheller69/whoBIRD)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/woheller69-whobird
