github tphakala/birdnet-go nightly-20260321
Nightly Build nightly-20260321

latest releases: nightly-20260321-397, nightly-20260321-396
pre-release6 hours ago

This nightly is a large feature release. Highlights include realtime spectrogram visualization with live BirdNET detection labels, graceful binary and container restart, a first-time onboarding wizard, OIDC-secured HLS streaming, taxonomy synonym overrides, and three new locales.

New Features

Realtime Spectrogram with Live Detection Labels

Live waterfall spectrogram visualization for audio streams with real-time BirdNET detection labels overlaid directly on the spectrogram. Labels sync to the HLS playhead using program_date_time timestamps, with repeat hit indicators for continuously detected species. Includes a compact MiniSpectrogram widget for the dashboard and a new SpectrogramPlayer component that replaces the full AudioPlayer in detection rows (#2391, #2430, #2368).

Graceful Binary and Container Restart

Restart BirdNET-Go from the UI without losing data. Supports both native binary restarts and Docker container restarts with a new RestartCard in the system overview. Background migration continues syncing post-completion detections and includes startup reconciliation to catch anything missed during the restart window (#2443).

Onboarding Wizard

A new wizard dialog system for first-time setup and what's-new flows. Guides new users through initial configuration with step-by-step onboarding dialogs (#2418, #2423).

Taxonomy Synonym Overrides

User-configurable taxonomy synonym mappings for species that have been reclassified. Includes a settings UI for managing overrides, validation, and logging. Ships with built-in mappings for recently reclassified species (Streptopelia → Spilopelia, Bubulcus → Ardea, Cooper's Hawk scientific name) (#2427, #2440).

Public Live Audio Access

New option to allow unauthenticated access to live audio streams for public-facing installations. Supports hot-reload — changes take effect immediately without restart (#2356).

Default Audio Gain Setting

Configurable default gain level for audio playback across all views (#2354).

Custom Config File Path

New --config / -c CLI flag to specify a custom configuration file path, useful for running multiple instances or non-standard deployments (#2455).

Alert Rule Validation

EscalationSteps are now validated on alert rule save, preventing misconfigured escalation chains (#2464).

Portainer App Template

Official Portainer app template for one-click deployment with documented UID/GID configuration.

DetectionDetail Hero Redesign

The detection detail page hero section now uses a three-card layout for improved information density.

Settings Forms Redesign

All settings forms redesigned for visual consistency with the system design language (#2336).

New Locales

Security

  • HLS stream authentication — prevent unauthenticated access to HLS audio streams using per-session stream tokens (#2406)
  • Harden HTTP security headers — stricter CSRF cookie handling and security header configuration (#2421)
  • Respect AllowSubnetBypass.Enabled — subnet bypass was always active regardless of the Enabled flag (#2419)
  • Restrict COOP header to secure contexts — Cross-Origin-Opener-Policy now only applied over HTTPS (#2422)

Bug Fixes

Audio & Analysis

  • Prevent analysis buffer overruns under load — fixes ringbuffer-full conditions during sustained high-load periods (#2282)
  • FFprobe singleflight dedup — eliminates redundant FFprobe subprocess spawns (#2344)
  • Retry audio device validation for USB — handles late USB device enumeration on startup (#2360)
  • Audio clip race condition — grace period wait prevents premature clip access (#2358)
  • Restart analysis monitor after watchdog reset — analysis resumes after stream watchdog triggers (#2388)

Frontend & Dashboard

  • Dashboard layout persistence — widget widths and visibility now persist correctly for guests and authenticated users (#2402)
  • Fix empty species/daily response — SummaryLimit correctly read from layout element (#2362)
  • Push notification dispatcher hot-reload — save button and hot-reload now work for notification settings (#2404)
  • Confidence circle dark mode — no longer renders as a pie chart in dark mode
  • Toast notifications on failed actions — DetectionRow now shows error feedback (#2381)
  • Oklch color values — percentage lightness and degree hue for correct color rendering (#2405)
  • Slovak locale persistence — valid UI locales now derived dynamically (#2353)
  • Italian and Slovak in SUPPORTED_LOCALES — both locales now available in language picker (#2367)
  • Sidebar section labels — shortened across all locales for better fit (#2363)

Database & MQTT

  • MQTT TOCTOU race conditions — publish operations now use atomic check-and-set (#2462)
  • Cooldown TOCTOU race — atomic cooldown check prevents duplicate notifications (#2463)
  • Propagate database ID to Notes — v2only Note.Save now returns the assigned ID (#2460)
  • MQTT detectionId validation — defensive ID check prevents empty IDs in MQTT payloads (#2459)
  • Duplicate pending detection SSE — suppresses duplicate SSE broadcasts (#2433)
  • Dynamic threshold merge keys — normalized keys prevent duplicate species entries (#2414)

HLS Streaming

  • HLS session tracking and FIFO cleanup — fixes race condition, stale response, and FIFO leak (#2411)
  • AudioLevelIndicator fixes — resolves HLS-related pre-existing issues (#2416)
  • Stream label updates to MQTT — label changes propagate without restart (#2279)

Notifications & Alerts

  • Prevent alert test from triggering push — test button no longer sends real push notifications (#2348)
  • Reduce notification noise — disk alerts and securefs 404s no longer flood notifications (#2446)
  • Return 404 for missing mark-as-read — correct HTTP status instead of 500 (#2280)

Configuration & Infrastructure

  • Location sentinel replaced — explicit locationConfigured flag instead of (0,0) sentinel (#2350)
  • OAuth provider session lookup — active provider stored directly in session (#2349)
  • Shutdown deadline — prevents hanging past 9-second deadline (#2420)
  • Rebuild name maps on locale change — datastore name maps refresh when BirdNET locale changes (#2436)
  • YAML tags on all settings structs — consistent serialization (#2441)
  • SecureFS base dir for spectrograms — path resolution uses SecureFS (#2387)

Internationalization

  • Restart keys translated for all non-English locales (#2445)
  • Species synonym translations for all locales
  • Hardcoded English strings replaced with i18n keys across multiple components

Don't miss a new birdnet-go release

NewReleases is sending notifications on new releases.