BirdNET-Analyzer: Scripted Bird Sound Classification for Large Audio Archives
BirdNET analyzer for scientific audio data processing.
At a glance
- What is it?
- BirdNET-Analyzer is the Python command line layer around Cornell's BirdNET acoustic classifier, aimed at researchers processing hours of field recordings rather than single clips. The code is MIT, the models are not, and that split is the first thing to settle before you plan a deployment.
- Who is it for?
- Adopt BirdNET-Analyzer if you have long field recordings, a Linux, Windows or macOS machine, and a non-commercial research context that matches the CC BY-NC-SA model terms; the pip install of birdnet_analyzer and the birdnet-analyze command are the whole entry cost.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 8 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap BirdNET-Analyzer fills: batch audio instead of one clip at a time
Acoustic monitoring projects accumulate audio faster than anyone can listen to it. A recorder left on a wetland for a season produces more hours than a field team can review by ear, and the useful events inside those hours are sparse. BirdNET-Analyzer exists to run a classifier over that pile without a human in the loop for every file. The README describes the repository as containing "BirdNET scripts for processing large amounts of audio data or single audio files," and states that this is the most advanced version of BirdNET for acoustic analyses, kept up to date with new models and improved interfaces so that scientists without a computer science background can run the analysis. That last clause is the design brief. The audience is an ecologist or conservation biologist who can open a terminal and type a command, not a machine learning engineer who wants to fine-tune a network from scratch. The project is developed by the K. Lisa Yang Center for Conservation Bioacoustics at the Cornell Lab of Ornithology together with Chemnitz University of Technology, and the README asks that published work cite the 2021 Ecological Informatics paper by Kahl, Wood, Eibl and Klinck. If your problem is "I have 400 hours of WAV files and I need a species list per recording," this is the tool the material describes. If your problem is "I want to build a new bioacoustic classifier," the training commands exist but the framing is still analysis-first.
Five commands, and what each one actually does
Installing the base package puts five command line tools on your path: birdnet-analyze, birdnet-segments, birdnet-species, birdnet-train and birdnet-evaluate. The naming is descriptive rather than clever, which is a point in its favour for a tool aimed at non-programmers. birdnet-analyze is the workhorse that runs the classifier over audio. birdnet-segments handles segmentation, the step that decides which slices of a long recording get scored. birdnet-species deals with species list handling, which matters because the model covers thousands of taxa and you usually care about a subset. birdnet-train and birdnet-evaluate cover custom classifier work, and the README notes that hyperparameter autotuning during training is not in the base install but arrives with the train extra. Optional feature sets are declared as pip extras. The embeddings extra adds embedding extraction and similarity search through two more commands, birdnet-embeddings and birdnet-search. The gui extra adds a graphical interface and pulls in both embeddings and train. The all extra is documented as currently the same set as gui, which is worth reading twice: if you install all expecting something beyond the GUI bundle, the table says you get the same thing. That is a small documentation trap rather than a defect, but it means the extras table is the authoritative list and the word all is not a superset promise.
Getting it running: pip, Python version, and the model download
The installation path in the README is one line: pip install birdnet_analyzer, with Python 3.11 or newer required. Note the underscore in the package name on PyPI versus the hyphen in the repository name, since that trips people up when copying from the GitHub title. For the full feature set the README gives pip install "birdnet_analyzer[all]". The extras are declared individually as embeddings, train, gui and all, so a minimal embeddings-only setup is pip install "birdnet_analyzer[embeddings]" and would give you birdnet-embeddings and birdnet-search without the GUI dependency tree. Models are not bundled with the pip package as far as the README describes; it points to Zenodo record 15050749 for model downloads, and separately offers standalone installers for Windows and macOS from the releases page. That means a first run involves a network fetch of model weights in addition to the package install, and the README does not state the download size, so plan the disk and the network window yourself rather than assuming the pip step is the whole cost. The README also links an installation documentation page for the standalone installers, the Docker image and a source installation, so there are four documented routes: PyPI, installer, Docker, source. If you are deploying on a headless Linux box, the Docker route is the one the README treats as a first-class alternative rather than an afterthought, given the dedicated docker-build workflow badge.
The licence split is the real deployment constraint
The README is unusually explicit here, and it is the section most likely to decide whether you can use the project at all. Source code is MIT. Models are CC BY-NC-SA 4.0, which is a non-commercial, share-alike licence. The README adds that educational and research purposes are considered non-commercial, so using the models in research is permitted freely. Read that as two separate grants attached to two separate artefacts. Forking, modifying and redistributing the Python scripts is permissive under MIT. Running the pretrained weights is governed by the model licence, and NonCommercial plus ShareAlike are the two clauses that matter operationally. ShareAlike in particular is the clause people overlook: if you build a derivative model artefact, the licence terms on that derivative are not yours to choose freely. Commercial deployment is the case where this project is the wrong tool, not because the code forbids it but because the weights do. The README directs you to review the specific licence terms provided with each model, and that is the correct instruction: the repository-level MIT badge does not describe the whole stack. This is not legal advice, and the boundary between research and commercial use is exactly the kind of question to put to whoever handles licensing at your institution before you build a pipeline on top of these weights.
Species coverage, and the case where you are outside it
The README badge advertises 6512 species. That is a large number and it is also a hard boundary. Nothing in the supplied material describes a supported workflow for extending the pretrained classifier to taxa it does not cover. birdnet-train exists, and the train extra adds hyperparameter autotuning, which suggests the intended path for custom classifiers is training your own on top of the existing feature extraction rather than editing the pretrained model. But the README does not spell out that workflow, does not state what data format custom training expects, and does not say how a custom classifier interacts with the species list command. If your study organism is a bat, a frog, an insect, or a bird outside the covered set, the material here does not tell you whether BirdNET-Analyzer is viable. That is a genuine documentation gap rather than a flaw in the software, and it is the first thing to resolve before committing to the tool. The same gap applies to geography: the README does not describe how species lists are filtered by region, even though birdnet-species exists as a command, so anyone assuming the classifier is region-aware should check the documentation site rather than infer it from the command name.
Where it sits against a hosted classifier API
The nearest alternative approach is a hosted bioacoustic classification API, where you upload audio and receive detections over HTTP. The architectural difference is where the compute and the data live. BirdNET-Analyzer runs locally: the models come down from Zenodo, the audio stays on your disk, and the classification runs on your CPU or GPU. For field recordings of sensitive species or recordings collected under permits that restrict data movement, local processing removes an entire class of compliance question, and it also means a season-long batch job does not incur per-minute API charges or depend on someone else's uptime. The trade is that you own the environment. Python version, model download, disk space for intermediate outputs and the compute time for a large archive are all yours. A hosted API typically absorbs that operational load and returns results in a schema you can pipe straight into a database. BirdNET-Analyzer's outputs are files on disk that you then have to ingest yourself. Neither approach is categorically better. If you have a few hundred recordings and no local compute, an API is less work. If you have tens of thousands of files, a fixed local pipeline is easier to reason about and easier to reproduce, which matters when a reviewer asks how a species list was generated. The MIT code plus non-commercial weights combination also means the local route is the only one where you can inspect exactly which model version produced a given result.
Maintenance, versioning and what an upgrade actually costs
The release cadence visible in the material is roughly monthly: v2.2.0 in September 2025, v2.3.0 in October 2025, v2.4.0 in November 2025, with the repository's last push timestamped September 2026. That is an actively maintained project rather than a frozen research artefact, and the README states the intent plainly: the repository will be kept up to date with new models and improved interfaces. For an operator, monthly minor releases mean the upgrade cost is mostly about two things. First, model versions: the README points to a single Zenodo record, and if a release ships new weights, results from an old run are not directly comparable to results from a new run unless you record which model version produced which output. Second, the extras: because gui pulls in embeddings and train, and all is documented as currently equal to gui, the dependency surface of a full install is larger than the command list suggests, so a pip upgrade can move more than you expect. The practical mitigation is pinning the package version in whatever environment file you use and treating model downloads as versioned artefacts alongside the code. The README does not describe a model versioning scheme, so that bookkeeping is on you. Docker is the other lever: if you build an image at a known tag, the monthly release cadence stops being a surprise and becomes a deliberate rebuild.
Editorial conclusion
Adopt BirdNET-Analyzer if you have long field recordings, a Linux, Windows or macOS machine, and a non-commercial research context that matches the CC BY-NC-SA model terms; the pip install of birdnet_analyzer and the birdnet-analyze command are the whole entry cost. Do not adopt it if your pipeline is commercial, if you need a hosted endpoint with an SLA, or if your target taxa sit outside the roughly 6512 species the badge advertises, since nothing in the README describes a supported path for adding new species to the pretrained model. Verify first that your Python is 3.11 or newer, that you have budgeted disk for the Zenodo model download, and that you can cite kahl2021birdnet in whatever you publish.
Community notes