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

5 hours ago

Bug fix release focused on Windows reliability, Home Assistant MQTT discovery, and species tracking accuracy. Windows users get fixes for spectrogram hangs, log rotation breakage, and tool path validation ignoring configured paths. The MQTT HA discovery race that left sensors stuck at "Unknown" is resolved, and a timezone mismatch that caused false "first time this year" badges for users west of UTC is corrected. Detection clip positioning is now accurate across all model types.

Security

  • OAuth host misconfiguration warning - the OAuth settings tab now shows a warning banner and disables saving when neither Host Address nor Base URL is configured, preventing redirect URI mismatches that silently break OAuth flows. The redirect URI display shows the actual configured value instead of the browser's window.location (#2961).

Bug Fixes

MQTT & Home Assistant

  • HA discovery race publishes sourceId='default' - when the MQTT broker connected before audio sources registered, discovery templates were published with a hardcoded default source ID that never matched real detection payloads, leaving HA sensors stuck at "Unknown". Discovery now waits for real sources via a debounced event listener, and stale default entries are cleaned up automatically on first real publish (#2949, fixes #2948).

Species Tracking

  • False "first time this year" badges in western timezones - the species tracker compared DB-loaded dates (UTC midnight) against local-timezone cutoffs, so species first detected on the year boundary were incorrectly pruned every sync cycle for users in UTC-5 through UTC-10. Date comparisons now use year/month/day tuples instead of time.Before/time.After (#2956, fixes #2954).

Audio & Detection

  • Detection offset hardcoded to 10 seconds - the analysis buffer used a fixed 10-second offset regardless of model type, placing bird calls too deep into saved clips. The offset now derives from the model's actual clip length (3s for BirdNET v2.4, 5s for v3.0/Perch), so calls appear at the correct position in captures (#2963, fixes #2823).

Windows

  • Spectrogram and file operations hang - SecureFS.RelativePath called filepath.EvalSymlinks through a parent-directory walker that never terminated on Windows because filepath.Dir("C:\") returns "C:\", not / or .. All SecureFS methods that resolve paths (Exists, Open, ReadFile, Stat, WriteFile, Remove, Rename, and more) hung indefinitely. Added a platform-neutral root detection guard (#2958, #2959, #2960).
  • SoX and FFprobe ignore configured paths - six code paths used exec.LookPath() instead of the user's soxpath/ffmpegpath settings. On Windows systems where tools are installed outside the system PATH, this silently disabled spectrogram generation and version detection (#2957, fixes #2845).
  • Log rotation creates .new.new.new... filenames - when os.Rename failed during rotation (common on Windows due to antivirus file locking), the suffix accumulated on each retry until hitting MAX_PATH and breaking logging entirely. Rotation now derives filenames from an immutable base path (#2964, fixes #2942).

Logging

  • Debug messages flooding console output - the multi-writer log handler dispatched to all sub-handlers if any one accepted the log level, so debug-level file handlers caused debug messages to leak to info-level console handlers (#2939, fixes #2938).

Dashboard & UI

  • Map crashes when WebGL is unavailable - the MapLibre map now shows a fallback message with coordinate input fields when WebGL is missing or fails (e.g., Chrome GPU sandbox). Tab switching retries map initialization (#2962).
  • Missing required-field indicators on audio forms - soundcard and RTSP stream add/edit forms now show red asterisk indicators on mandatory fields (source name, audio device, stream name, stream URL) (#2936).

Build & Development

  • Go version drift across CI and Taskfile - go.mod is now the single source of truth for the Go version, eliminating manual sync across Taskfile, CI workflows, devcontainer, and docs. Also fixes TensorFlow sparse checkout on fresh task setup-dev, adds the missing frontend build step so air realtime works immediately after setup, and installs FFmpeg/SoX so audio tests run out of the box (#2930 by @anyasabo).
  • CI workflow fixes - corrected doubled ghcr.io/ prefix in Docker cache references, exported TEST_IMAGE to GITHUB_ENV, fixed .golangci.yml vs .yaml trigger mismatch, added fetch-depth: 0 to release builds for correct git describe versioning, and several other hygiene fixes (#2932 by @anyasabo).
  • CGO environment variables missing in test tasks - test and test-coverage Taskfile targets now set CGO flags, fixing build failures when running tests that link against TensorFlow (#2931 by @anyasabo).

Don't miss a new birdnet-go release

NewReleases is sending notifications on new releases.