github tphakala/birdnet-go 20261014
BirdNET-Go 20261014

4 hours ago

This is the first regular release since 20260823, and a large one. You can now choose freely which detection models run, for example Perch v2 or BirdNET v3.0 on its own, or several side by side, and a long-standing bug that made the false positive filter discard valid detections is fixed, with automatic protection so the extra analysis cannot overload your device. This is also the first step toward the AGPL-3.0 license, after which BirdNET v2.4 becomes a model you install from the gallery instead of one built into BirdNET-Go. Live audio streaming is now built in and no longer runs FFmpeg, which makes it more reliable and lighter on the system. A new Privacy Guard keeps human speech out of your recordings far more reliably, bat calls can be slowed down so you can actually hear them, bat recordings are stored as FLAC, the setup wizard has been reworked, and you can find your station location by searching for a place. This release also includes every security fix from the 20261010 security release.

Before you upgrade

  • Upgrading from 20260823? Read the 20261010 notes first. All of its security changes are included here, and some need action: if you use the subnet login bypass behind a reverse proxy, list the proxy in security.trustedproxies; outbound integrations no longer use HTTP_PROXY or HTTPS_PROXY; and scripts that call the ntfy server check must use POST.
  • Expect higher CPU use with the false positive filter on. A bug fix makes the filter work as intended, which means more analysis at the stronger settings. See "False Positive Filter Fixed" below; a lower False Positive Filter Strength reduces the load.
  • Plan on staying on this release. It stores dynamic thresholds per species and stamps a version into your config. Older releases (20261010, 20260823) may fail to start on the updated data, so take a backup first if you might want to go back.

New Features

Choose Your Own Detection Models

This is part of the work to move BirdNET-Go to the AGPL-3.0 open source license (#4243). The BirdNET v2.4 model is licensed for non-commercial use only, so it cannot stay built into an AGPL-3.0 program. In a future release BirdNET v2.4 will no longer be embedded in BirdNET-Go and will instead be installed from the model gallery like the other models. In this release it is still built in and works exactly as before.

To get there, BirdNET v2.4 is no longer a required base model. Enable any combination of installed models in any order: a Perch v2 or BirdNET v3.0 station, a bat-only station, or several models side by side. Changes take effect without a restart. A model that fails to load no longer stops BirdNET-Go from starting; the dashboard shows a banner telling you whether no model is installed or one could not load, with a link to fix it. Existing installs keep exactly the models they run today: on first start your config is updated once to list BirdNET v2.4 explicitly, and nothing else changes (#4357, #4368, #4379, #4381, #4385, #4388, #4390, #4392).

False Positive Filter Fixed, With Automatic CPU Protection

The false positive filter confirms a detection by checking that it shows up in several overlapping analysis windows. The False Positive Filter Strength setting (Off, Lenient, Moderate, Balanced, Strict, Maximum) sets how much the windows overlap: a stronger setting means shorter steps between windows and more confirmations. Because of a bug introduced when the audio pipeline was rewritten, the analysis ignored the overlap setting and always moved in fixed 1.5 second steps, while the filter still expected the number of confirmations its strength asked for. At the stronger settings that number could never be reached, so valid detections were quietly thrown away as false positives (#4247, fixes #4096).

The analysis now runs at the step the filter strength calls for, so the filter works as designed. This means you may see noticeably higher CPU use after upgrading if False Positive Filter Strength is set to anything other than Off. At Maximum the analysis step drops from 1.5 seconds to 0.2 seconds, which is up to about 15 times more model runs per audio source and model. With the filter Off, nothing changes. If CPU load is too high, choose a lower False Positive Filter Strength under Settings > Analysis.

To keep a busy system from falling behind, the overlap is now partly dynamic. After each model starts, BirdNET-Go measures how long it takes to analyze audio on your hardware. Models analyze audio one at a time, so BirdNET-Go estimates how much of each second the analysis would be busy across all enabled models and audio sources. If the overlap your filter strength asks for fits within about 75% of that time, it is used unchanged. Only if it does not fit does BirdNET-Go lower the overlap, and only as far as needed to get back under that limit. This is a safety ceiling, not a target: on hardware that keeps up, nothing is reduced. Without this, a Raspberry Pi 4 running two models with a strong filter setting would saturate its CPU, overwrite audio before analyzing it, and stop producing detections. The reduced overlap is used only while needed and is never written to your settings, so it lifts again with fewer models or faster hardware. With the filter Off, overlap is not reduced.

The filter stays active while the overlap is reduced. Each strength setting requires a share of the analysis windows within about 6 seconds to agree (from 20% for Lenient to 70% for Maximum), and that share does not change. A reduced overlap means fewer windows, so the number of confirmations is recalculated from the windows the device actually produces, and some borderline detections may pass. Strict and Maximum always require at least two confirmations. Balanced drops to one only when the device cannot sustain any overlap, which Settings > Analysis reports as a device that cannot keep up. Lenient and Moderate ask for few confirmations to begin with and can drop to one with a smaller reduction. Settings > Analysis always shows the count in effect (#4545).

Settings > Analysis now shows what the filter really does: for each model, how many windows must agree and how often a new window starts. A notice tells you when the overlap has been reduced, and warns when even the smallest overlap is more than the device can handle, suggesting fewer models or audio sources (#4547). Overload warnings in the log are also accurate now: healthy multi-model stations no longer warn, and real audio loss is reported (#4555).

The false positive filter will keep improving in future releases, including new ways of telling real detections from false ones.

Model Health in the Notification Bell

If a model loads but fails on every piece of audio, for example a build that does not suit your hardware, the notification bell, dashboard, status page and health check now say so, naming the model and the cause. The bell also tells you when the model gallery has a better build for your hardware, so you no longer have to open the gallery to find it (#4433, #4435).

Privacy Guard

The privacy filter used to catch speech only when the bird model happened to rank "human" among its top results, which it often did not. Privacy Guard adds a small dedicated speech detector (Silero VAD) that listens for voices on every audio source and discards bird detections that contain speech, so conversations stay out of saved clips. Turn it on with Enable Privacy Guard under Settings > Filters > Privacy Filtering, and tune it with Privacy Guard Threshold (default 0.35). Its activity is shown under System > AI Models (#4181, #4182, #4183, #4185).

Built-In Live Audio Streaming

Live audio on the dashboard is now produced inside BirdNET-Go with a native HLS streamer, so FFmpeg is no longer needed for listening live. The stream is held in memory: no FFmpeg process per listener, no segment files written to disk or SD card, and no RAM disk or volume permissions to set up. Several listeners share one stream. The result is more reliable live streaming that uses fewer resources (#4220, #4222).

Bat Calls You Can Hear

Bat detections get an "Audible bat playback" mode that slows ultrasonic calls down 5x, 10x, 16x or 20x into the human hearing range, in the full audio player and on the detection cards. The original recording is not changed (#3743 by @alexbelgium).

Bat recordings are now stored as FLAC by default: lossless at the full sample rate and much smaller than WAV. A new Ultrasonic Format setting under Settings > Audio lets you keep WAV if you prefer (#4396).

Find Your Station Location by Searching

The Location tab under Settings > General has a "Search for a place" box above the station map. Type a town or address, pick a result, and the pin moves there instead of you zooming and panning from a world view. Searches go to Photon (OpenStreetMap data) and send only what you type, never your coordinates (#4534). A "Use browser location" button fills it in from your browser (#4308 by @sn3p).

Reworked Setup Wizard

The setup wizard now appears on new installs again and is much sturdier. Each step is saved as you go, your sound card and existing streams are kept, stream addresses and the BirdWeather token are checked before you continue, you are asked before leaving setup unfinished, and the whole wizard works with the keyboard and screen readers. It uses the same location map and search as Settings (#4465, #4481, #4483, #4488, #4490, #4491, #4492, #4494, #4495, #4497, #4499, #4525, #4526, #4528, #4529, #4531, #4541, #4544). The BirdWeather token is also checked before saving in Settings (#4502).

Pirate Weather

Pirate Weather is now available as a weather provider (#4360 by @turmacar).

Toward FFmpeg-Free Audio (Opt-In Previews)

Two more steps toward running BirdNET-Go without FFmpeg are ready for testing. Setting BIRDNET_STREAM_INGEST=native captures RTSP streams in BirdNET-Go itself, with AAC, Opus, MP3 and PCM audio and per-stream health metrics (#4274, #4278, #4281, #4285). Setting BIRDNET_MP3_ENCODER=native exports MP3 clips with a built-in encoder (#4266). FFmpeg stays the default for both in this release.

More New Features

  • Regional models for West, Central and East Africa. Stations in these regions now get smaller, faster regional builds of BirdNET v3.0 and Perch v2 instead of the global model (#4473).
  • Detection details travel with FLAC clips. Saved FLAC clips carry the species, date, confidence and model as standard tags, so a clip copied elsewhere still says what it is in players and audio tools. Location and source details are never written (#4560).
  • Settings links that stick. Each settings tab has its own address, so refreshing keeps you on the same tab and you can bookmark or share a link to it (#4309 by @sn3p).
  • Download audio from search results. (#4091 by @ejhnsn)
  • MQTT first and last detection times. Each detection message now says when the species was first and last detected before, so Home Assistant automations can react to returning or first-ever species (#4364 by @romainricard).
  • PKCE for OIDC login. Identity providers that require PKCE now work with OIDC login (#4399 by @growse).
  • .local hostnames work in Docker. Microphones and cameras addressed as something.local now resolve inside the container (#4476, #4477).
  • Host-network container configs. New host-network Compose, Portainer and Unraid configs are the recommended choice for new Linux installs. Existing setups keep working unchanged (#4479).
  • Smaller container updates. The container image now keeps its large runtime libraries in a separate base layer, so most updates download only the BirdNET-Go application itself (#4178).
  • Model add-ons install together. A model's supporting files are installed with it, and a file another model still needs cannot be removed by accident (#4478).
  • Detections API filter by audio source. GET /api/v2/detections accepts a source parameter (#4261 by @auggiesoft), and the dawn chorus insight accepts a window size (#4262 by @auggiesoft).

Security

These fixes were first released in the 20261010 security release and are listed here for anyone upgrading from 20260823.

  • Subnet login bypass checks the real client address (GHSA-wfpc-rhcf-754r, #4549). Reported by @Hama1cco.
  • Range filter rebuild and test require login (GHSA-8668-57p7-rjc9, #4550). Reported by @alex131125.
  • Recent detections request size limited (GHSA-g6wh-4rqg-w7qw, #4551). Reported by @alex131125.
  • Stream test cannot be pointed at local or cloud metadata addresses (GHSA-2vxv-jv48-g3w7, #4552). Reported by @Yanyan-dd.
  • Webhooks and connection tests cannot reach internal addresses, and the ntfy check is CSRF protected (GHSA-85p4-7rfw-572f, GHSA-hj22-g96h-fwvx, #4191, #4302). Reported by @tonghuaroot.
  • Setup wizard state and dismissal require access when login is configured (#4468, #4469).
  • HSTS kept correct behind trusted proxies (#4514).
  • Updated toolchain and libraries. Built with Go 1.27.2. The map library moves to maplibre-gl 6.x, so security scanners no longer flag GHSA-jrc7-96c5-q579 (#4553, #4516).

Bug Fixes

Models & Detection

  • Models recover when their files move. If a model file goes missing, BirdNET-Go falls back to a valid installed copy instead of quietly switching to a different model, the status page shows the model that is really running, and newly installed models start working on running audio sources right away (#4207, #4214, #4215, #4218).
  • The gallery refuses models your hardware cannot run. (#4219)
  • INT8 BirdNET v2.4 builds run correctly with the automatic backend. (#4434)
  • BirdNET v3.0 and Perch v2 detect correctly on Intel GPUs. They produced invalid scores at reduced precision on OpenVINO (#4251 by @auggiesoft, #4289), and unloading a model no longer floods the log with errors (#4290).
  • Invalid scores never become detections. A model output that is not a valid number is dropped before it reaches the detection list, and such clips still get cleaned up (#4252, #4253, #4254 by @auggiesoft).
  • A crashing GPU driver no longer takes BirdNET-Go down. Intel GPUs are checked in a separate process, and on a driver crash detection carries on with ONNX Runtime (#4239 by @beaglemoo).
  • Lower idle CPU use. ONNX Runtime no longer keeps CPU threads spinning between analyses (#4470 by @rexxars).
  • birdnet.threads applies to every model without a restart. (#4255)
  • Dynamic thresholds behave as configured. Each species keeps its own threshold across models, and weak detections no longer keep a lowered threshold from returning to normal (#4198; fixes #4194).
  • Range filter keeps working through model changes. Installing, uninstalling or switching models no longer leaves the range filter pointing at a removed model, and a custom range filter model is kept (#4329, #4331, #4348, #4474).
  • Manually included species keep their real confidence scores. (#3976 by @ejhnsn)
  • Species outside geomodel coverage are reported correctly when the range filter is off (#4355).
  • Perch sound classes show their full names. (#4567)
  • Species taxonomy works without an eBird key. (#4337)
  • Privacy and dog filters catch more. Human and dog classes are no longer lost when the model reports only its top results (#4306).
  • Status pages tell the truth. Model, rarity and database health no longer show as fine when they are not, and partial inference problems are flagged (#4294, #4298, #4303, #4310).

Audio & Streaming

  • RTSP transport setting respected per stream. (#4245)
  • Streams keep their sample rate and channel count after a reconnect, so high sample rate bat streams are no longer downgraded to 48 kHz when a probe fails (#4354).
  • Audio sources that failed to start are retried when settings change. (#4305)
  • Certificate problems on secure streams are reported as such. (#4438)
  • Audio source status is shown correctly however the source started. (#4566)
  • Clip export fixes. The chosen bitrate for lossy formats is saved correctly, and clips from low sample rate sources export natively (#4282).
  • Streams that go silent are restarted and reported correctly, and new Prometheus metrics show the health and data rate of each network stream (#4281).
  • Spectrograms are correct for stereo recordings (#4362 by @alexbelgium) and remain viewable after retention deletes the audio (#4496).
  • The default volume boost is applied in the spectrogram player. (#4188)
  • FFmpeg errors are logged when a stream stops, making stream problems much easier to diagnose (#4263, #4264).

Dashboard & Analytics

  • No more repeat "new species" notifications after seven days. (#4339 by @sn3p)
  • The daily species summary shows the real first-heard time (#4259 by @auggiesoft) and correct counts for new species (#4260 by @auggiesoft).
  • Species filters in time analytics include detections from every model. (#4258 by @auggiesoft)
  • Species charts show common names in your language. (#4467)
  • Analytics fixes. Species auto-selection, ridgeline chart fit and keyboard access to the phenology chart (#4471), and consistent time-of-day grouping across charts (#4325).
  • Dashboard card fixes. Currently Hearing keeps two simultaneous detections of the same species visible, the AI Models view no longer flips to "not analyzing" when only one of a model's sources is down, and New Species Highlights no longer misses a qualifying species (#4304).
  • Dawn chorus chart and time-of-day labels work with the enhanced database. (#4425 by @tefracky)
  • The System > AI Models page no longer crashes. (#4190)

Database & Storage

  • Retention catches up with large backlogs. Old clips are now deleted continuously in gentle batches instead of at most 1000 every 15 minutes, so installs with hundreds of thousands of old clips catch up in hours rather than days (#4519).
  • Deleted detections no longer come back after the upgrade to the enhanced database (#4311).
  • Container memory limits that cannot be read are shown as unknown instead of a wrong value (#4568).

Settings & Integrations

  • Home Assistant shows correct values for every audio source. With several sources, a detection on one source no longer resets the other sources' sensors to unknown. Each source now has its own MQTT topic, set up automatically through discovery (#4417).
  • Custom alert templates kept for new-species alerts. (#4430)
  • Sunrise and sunset follow a changed station location without a restart. (#4431)
  • MQTT TLS certificate verification setting saves correctly. (#4193)
  • BirdWeather uploads keep their connection health checks. (#4401)
  • The models settings page no longer reloads endlessly. (#4493)
  • CPU temperature shown on ARM boards with mixed core types. (#4272)

Web UI & Accessibility

  • Dropdowns and dialogs work with keyboard and screen readers. Focus stays inside open dialogs, every dropdown and dialog is properly named, and species suggestions are announced (#4530, #4532, #4533, #4535, #4536, #4538).
  • Better contrast. Status colors, error text and highlighted content meet WCAG AA in every color scheme (#4537, #4542, #4543).
  • Dialogs no longer block clicks while closing. (#3986 by @dk1)
  • Pages open correctly with a trailing slash in the address, and sidebar login buttons show tooltips on keyboard focus. (#4321)
  • Form and notification fixes. Invalid fields keep their red border on hover, and notifications meant to stay on screen do (#4500, #4527).

System & Platform

  • The server no longer crashes when a live update client disconnects. (#4293)
  • Builds from source show a correct version. (#4461)

Internationalization

  • Norwegian (nb) translation updated and completed. (#4406 by @hanscats)
  • Language switching is consistent. The page language follows the UI language, and cached and plural texts stay in the language you selected (#4484, #4569).

Documentation

  • BirdFeeder Android app added to the README. (#4369 by @KJ7PPK)
  • Local agent override files ignored by git. (#4200 by @maciej)

🛡️ VirusTotal Results:

Don't miss a new birdnet-go release

NewReleases is sending notifications on new releases.