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
locationConfiguredflag 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