This release fixes stereo RTSP streams that stopped detecting birds after nightly-20260524, and adds per-stream audio channel selection so you can pick which microphone channel (left, right, or both) each stream uses for detection. Support dump submission from Settings > Support works again (the previous timeout was too short for Raspberry Pi and slow connections). Alert rules can now match against species lists and trigger on new or returning species. A round of multi-model stability fixes makes running BirdNET alongside Perch much more reliable.
New Features
Per-Stream Audio Channel Mode Selection
You can now choose which audio channel each stream uses for bird detection: left, right, or downmix (both channels mixed together). This matters because many IP cameras send stereo audio where only one channel carries the actual microphone signal. Mixing both channels together can reduce detection accuracy due to phase interference between the left and right signals.
A new dropdown in stream settings (both when adding and editing streams) lets you pick the mode. An "Analyze Channels" button captures a few seconds of audio and shows a visual comparison of the energy levels on each channel, with a recommendation for which one to use. If a stereo source is still set to downmix, an orange warning banner appears on the stream card suggesting you select a single channel instead (#3286, #3287, #3300).
Alert Rule Enhancements
Alert rules now support "in list" and "not in list" matching, so you can create a single rule like "notify me only if the species is NOT in my common-bird list" instead of creating dozens of separate rules. A new species novelty system also tracks when each species was last seen, letting you create rules that trigger on genuinely new species (never detected before) or returning species (back after a period of absence) (#3267, #3275 by @keithkml).
Smarter Health Diagnostics
The System Health page is now better at distinguishing a brief glitch from a real problem. Instead of simple error counters, health checks evaluate whether issues are transient or sustained, whether they are getting worse or improving, and how many hours in the evaluation window were affected. The detail panel shows these signals visually with trend indicators and pattern badges, making it easier to decide whether something needs attention (#3289, #3290, #3293).
Lower Memory Usage from Audio Resampling
The audio resampler now reuses memory buffers instead of allocating new ones for every audio frame. In practice, this noticeably reduces BirdNET-Go's total memory consumption and garbage collection overhead, especially on low-powered devices like Raspberry Pi where memory is limited (#3285 by @anyasabo).
Bug Fixes
Audio & Streaming
- Stereo RTSP streams stopped detecting birds - a regression in nightly-20260524 caused stereo RTSP streams to skip the mono downmix step when the source sample rate already matched the target (both 48 kHz). The audio pipeline received interleaved stereo samples but treated them as mono, effectively halving the sample rate. Visible symptoms: audio sounds slowed down, upper third of the spectrogram is black, and detection rates drop to zero. Fixes #3278, #3277 (#3283).
- RTSP streams had no connection timeout - the FFmpeg flag for RTSP socket timeouts was incorrect (
-timeoutinstead of-stimeout), so streams had no protection against hanging connections during the TCP connect phase (#3287). - HLS live stream played back at quarter speed for high sample rate sources - when capturing at 192 kHz (bat detection), the HLS pipeline skipped an internal downsampling step, causing the browser audio player to play back at roughly 4x slower than real time (#3347).
Range Filter & Multi-Model
- Perch detections bypassed geographic range filter - with the default range filter setting, Perch species were not filtered by location, allowing out-of-range species to appear in detections and notifications (#3276 by @keithkml).
- Active Species table empty after uninstalling a model - removing Perch v2 or BirdNET v3.0 could leave behind stale config that silently disabled the range filter entirely, causing detections to run unfiltered with no warning in the UI (#3324).
- Species count showed ~14,800 species with multi-model - when running BirdNET alongside Perch, the Active Species / Current Species count ignored the range filter threshold for non-primary model species, displaying every species in the database instead of only those in your geographic area (#3326).
- Stale range filter config persisted after model uninstall - even after the runtime was fixed, the saved config could still show incorrect status in the Species page and heatmap. The config now self-heals on startup (#3327).
- Duplicate species in analytics with multi-model - insights pages (new arrivals, dawn chorus, phantom species, expected species) showed duplicate entries when both BirdNET and Perch detected the same species (#3294).
Model Reload Stability
- Crashes and incorrect results during model reload - several race conditions could cause crashes, panics, or stale data when reloading, uninstalling, or reinstalling models while detection was running. Model metadata is now captured atomically during reload, and settings access is synchronized across all concurrent readers (#3329, #3333, #3340, #2933 by @anyasabo).
Health Diagnostics
- Health status showed "Healthy" when no data was available - the system now correctly reports "Unknown" when diagnostic results are empty, instead of falsely reporting a healthy state (#3308).
Infrastructure & Platform
- Container startup failed on Kubernetes/OpenShift - running under an arbitrary user ID (common in rootless containers and OpenShift) caused startup failures because the system could not look up user information. Container detection now uses a reliable fallback (#3266 by @bo0tzz).
- Let's Encrypt certificates lost on every restart - TLS certificates were stored only in memory, so each restart requested a new certificate from Let's Encrypt. This could hit rate limits and cause temporary HTTPS outages (#3319 by @brycesub).
- Support dump uploads timing out on slow connections - submitting a support dump from Settings > Support could fail on Raspberry Pi or slow networks because the upload exceeded the default 30-second HTTP timeout. The timeout is now 120 seconds (#3301).
- Unnecessary image lookups wasting API calls - the background image refresh was retrying species that were already confirmed to have no image available, and included species from prediction models that had never actually been detected (#3305 by @keithkml).
- Noisy error reports from Wikipedia rate limiting - temporary Wikipedia API throttling was generating unnecessary error reports in Sentry; these are now suppressed since they resolve on their own (#3309).
- "Error opening /proc/self/cgroup" message on macOS - a harmless but confusing error message appeared on non-Linux platforms during container detection (#3193 by @anyasabo).
- Build setup failed on Raspberry Pi - architecture detection in the Taskfile was incorrect for ARM platforms (#3192 by @anyasabo).