Model or dataset
tphakala/birdnet-go avatar
tphakala/birdnet-go

BirdNET-Go: a self-hosted bioacoustics analyser you run on your own hardware

Self-hosted realtime soundscape analyser for birds, bats and other wildlife. Multi-model local AI inference, runs 24/7 on a Raspberry Pi.

2,000 stars175 forksGoNOASSERTION

At a glance

What is it?
BirdNET-Go ingests soundcard or RTSP audio, runs several wildlife classifiers locally, and serves detections through a web UI. It is aimed at people who want continuous monitoring without sending audio to someone else's server, and it asks for a Raspberry Pi or equivalent plus some patience with model setup.
Who is it for?
Adopt BirdNET-Go if you want continuous local classification of a fixed audio source, you are comfortable running a Linux box or a Raspberry Pi, and you accept that the project's licence is non-commercial. Do not adopt it if you need a commercial deployment, a hosted service, or a turnkey product with a support contract.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Go, 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

What BirdNET-Go is for, and who it is not for

The problem is continuous, unattended species monitoring. A microphone sits outside, audio arrives around the clock, and something has to decide which of thousands of candidate species each few seconds of sound resembles. Doing that in the cloud means shipping a live audio feed off your network permanently, which many people running a feeder camera or a bat detector will not do. BirdNET-Go is the local answer: it takes soundcard input or RTSP/RTSPS streams, classifies on the same machine, and stores detections in SQLite or MySQL behind a web interface. The README describes it as a realtime soundscape analyser for birds, wildlife and bats, self-hosted and running 24/7.

The intended user is fairly specific. You need a machine that stays on, an audio source you can point at the software, and enough interest to tune thresholds. The project ships an onboarding wizard, an installer script for Debian, Ubuntu and Raspberry Pi OS, and pre-built binaries for Linux, Windows and macOS, so the entry cost is low. What it is not is a service. There is no hosted tier described in the material, no managed offering, and no support contract. If you want someone else to run the classifier and hand you a species list, this is the wrong shape of tool.

Multi-model inference and how detections are combined

The architectural decision that separates BirdNET-Go from a single-model detector is the model gallery. BirdNET v2.4 is embedded and enabled by default, covering the README's stated 6,500+ bird species. Google Perch v2 runs through ONNX and covers 14,795 species across birds, insects, amphibians and mammals. BattyBirdNET adds eleven regional bat classifiers, and BirdNET Geomodel v3.0 supplies location-based range filtering across 12,012 species. Models are installed from inside the application, so adding one does not require a rebuild.

The data flow is: audio source, per-model inference, then a consensus step. The README states that multiple models can run in parallel against separate audio sources, and that cross-model agreement boosts confidence on shared detections while disagreements are flagged for review. That is a sensible design for a domain where a single classifier's confidence score is a weak signal. It also means the confidence number shown in the UI is not simply one model's output; it reflects agreement across whatever models you have enabled, and the README does not specify the arithmetic. Treat the consensus score as a ranking aid rather than a calibrated probability.

False positives get their own machinery. Deep Detection requires repeat confirmation inside a 15-second window. There are per-species dynamic thresholds, a location-based range filter, privacy and dog-bark filters, and per-classifier bat false-positive levels. Each of these is a knob you will end up adjusting, because the defaults cannot fit both a quiet garden and a noisy urban balcony.

Installing it and the configuration surface you inherit

The documented quick path for Debian, Ubuntu and Raspberry Pi OS is two commands: download install.sh from the repository's raw main branch, then run it with bash. Docker images are published for linux/amd64 and linux/arm64, and each release carries pre-built binaries for Linux, Windows and macOS. The README points at a wiki installation guide, a hardware recommendations page and a security guide, which is where the details live rather than in the repository root.

What you configure after install is broad. Audio inputs cover soundcard capture and RTSP or RTSPS streams, with multiple sources in parallel and independent model assignment per source. Sample rates go up to 256 kHz for ultrasonic bat work. There is an audio liveness watchdog with tiered recovery for unreliable streams, stream sample-rate probing, and per-model recommendation banners in the UI. Alerting runs through shoutrrr to Discord, Slack, Telegram, ntfy, Pushover, Gotify, Matrix, Bark and IFTTT, plus webhooks with custom templates, shell-script hooks, browser push, MQTT with Home Assistant auto-discovery, and the BirdWeather.com API. Storage is SQLite by default or MySQL, with retry-aware write paths for contention, automatic backups, and an embedded eBird/Clements taxonomy covering 2,374 genera, 254 families and 11,145 species for offline lookups.

The operational surface is unusually complete for a project of this type: an onboarding wizard, OIDC/SSO, TLS certificate management, hot-reload settings, a system health page, a database doctor and one-click support dumps. The README also mentions a browser terminal implemented with xterm.js over a WebSocket PTY. That is genuinely useful for in-app administration, and it is also a remote shell reachable from a web session, so the security guide is worth reading before you expose the interface beyond localhost.

Where the design strains: hardware, ultrasonic audio and stream reliability

The honest limitation is the hardware envelope. Running several models in parallel against multiple sources on a Raspberry Pi is a different workload from running BirdNET v2.4 alone, and the README does not publish per-model resource figures. It points to a hardware recommendations wiki page instead. If you plan to enable Perch v2 alongside the default model, or to add bat classifiers, check that page before buying anything, because the material here gives no numbers to extrapolate from.

Bat detection has a second constraint that is easy to miss. BattyBirdNET is listed as requiring Linux and an ultrasonic-capable device, and ultrasonic work needs sample rates up to 256 kHz. A standard soundcard will not deliver that. So the bat feature is not a checkbox you enable on an existing bird setup; it is a separate hardware path with its own input chain.

Stream reliability is the third pressure point. The presence of an audio liveness watchdog with tiered recovery, plus stream sample-rate probing and per-model recommendation banners, tells you that flaky RTSP streams are a known failure mode rather than an edge case. If your source drops out, the application will attempt recovery, but a watchdog implies the underlying stream is not trusted to stay up. For a 24/7 deployment, that is the operational reality you are signing up for, not a bug that will be fixed away.

How it differs from BirdNET-Pi and from running BirdNET-Analyzer yourself

The obvious comparison is BirdNET-Pi, which the repository's own topics list alongside this project. BirdNET-Pi is a Raspberry Pi appliance built around a single BirdNET model, with a fixed station-style workflow. BirdNET-Go takes the opposite approach on models: a gallery you install from inside the running application, parallel inference across sources, and a consensus layer over the results. It also adds bat classifiers and the Perch taxonomy, neither of which is part of the single-model design. If you want one model, one station and minimal moving parts, BirdNET-Pi's narrower scope is a feature. If you want to compare classifiers or add ultrasonic monitoring later, BirdNET-Go is built for that.

The other alternative is running BirdNET-Analyzer directly, or writing your own wrapper around the TensorFlow models. That gives you total control and no web UI to maintain, but you also write the scheduler, the storage layer, the alerting, the taxonomy lookups and the recovery logic for dropped streams. BirdNET-Go's value is that those pieces already exist: SQLite with retry-aware writes, automatic backups, the shoutrrr alert fan-out, MQTT with Home Assistant discovery, Prometheus metrics, and a custom classifier path for bringing your own TFLite model and label set. The trade is that you inherit its configuration model and its release cadence rather than your own.

Maintenance, release cadence and the licence question

Release tags follow a date format: 20260823, 20260716, 20260713. The gap between the July releases is three days, and the step to August is roughly five weeks. That pattern suggests active development with occasional rapid patch releases, which cuts both ways. You get fixes quickly, and you also get a moving target if you pin to a specific tag and want to move forward later. Settings hot-reload, which reduces the cost of tuning without a restart, but a major version bump still means reading release notes before upgrading.

The licence is the item to settle before anything else. The repository's licence field reports NOASSERTION, while the README displays a CC-BY-NC-SA 4.0 badge. Those two signals do not agree, and the non-commercial clause in the Creative Commons licence is the one that matters for anyone considering this at work. A conservation group or a university lab is a different case from a company building a product on top of the classifier. This is not legal advice: read the licence text and, if the deployment is commercial, get a proper opinion rather than relying on the badge.

On telemetry, the README states that the application is local-only by default and that optional Sentry reporting is strictly opt-in. That is a clear position, and it is consistent with the self-hosted premise.

Interface, languages and the parts that are not documented here

The front end is a Svelte 5 and TypeScript single-page app, installable as a PWA, with 15 UI languages listed and species names in more than 40. It renders live spectrograms for active streams and detection heatmaps, with the heatmap rendering described as ONNX-accelerated. There is a customizable dashboard, colour schemes, a Currently Hearing card, multiselect and bulk actions on the detections list, and live spectrogram plus realtime log output intended for OBS overlays on feeder streams. Offline analysis of audio files is supported as well, which is the practical way to test a configuration before letting it run unattended.

What the supplied material does not answer: how much CPU or memory each model consumes, how the consensus score is computed from individual model outputs, what the default confidence thresholds are, and how the SQLite write path behaves under heavy detection volume. Those are the questions to resolve from the wiki and the source before you size hardware. The README is a feature inventory, and a thorough one, but it is not a capacity planning document.

Editorial conclusion

Adopt BirdNET-Go if you want continuous local classification of a fixed audio source, you are comfortable running a Linux box or a Raspberry Pi, and you accept that the project's licence is non-commercial. Do not adopt it if you need a commercial deployment, a hosted service, or a turnkey product with a support contract. Before committing, verify three things against the wiki rather than the README: the hardware recommendations for the model set you intend to run, whether your audio input can deliver the sample rates bat classifiers need, and the exact scope of the CC BY-NC-SA 4.0 terms, since the repository's licence field reads NOASSERTION while the README badge points at that Creative Commons licence.

Official sources

  1. Issues
  2. README
  3. Releases
  4. tphakala/birdnet-go on GitHub
Community notes

Community notes