Releases: opensensor/lightNVR
Releases · opensensor/lightNVR
Release 0.34.6
🤖 AI-Generated Changelog
Fixed
- Resolved Docker container issues with go2rtc lifecycle ownership
- Fixed go2rtc source override not reloading correctly on configuration changes
- Fixed go2rtc override startup configuration not being applied properly
- Corrected WebRTC live audio toggle behavior
- Fixed partial downloads when using llhttp fallback
- Fixed MP4 recorder watchdog heartbeats to prevent false timeout triggers
Changed
- Polished remaining UI inconsistencies and visual issues
- Updated Babel plugin for SystemJS module transforms (dependency maintenance)
🔗 Full Changelog: 0.34.5...0.34.6
Release 0.34.5
🤖 AI-Generated Changelog
Fixed
- Resolved Docker/Podman container startup loop caused by stale PID file and PID reuse
- Added missing flag images for newly added locales in internationalization support
Changed
- Updated development dependencies across web packages
🔗 Full Changelog: 0.34.4...0.34.5
Release 0.34.4
🤖 AI-Generated Changelog
Added
- Added new locale catalogs and registry entries to expand internationalization support
Changed
- Normalized locale tone and wording for consistency across the interface
- Completed and normalized locale catalogs for improved translation coverage
- Updated German (de.json) locale translations
- Improved disk usage calculation in system info API using database-level summation for better performance
Fixed
- Fixed timeline scrubber playback behavior and settings helper layout
- Fixed Debian package to properly declare
libyaml-0-2as a runtime dependency
🔗 Full Changelog: 0.34.3...0.34.4
Release 0.34.3
🤖 AI-Generated Changelog
Added
- New API endpoint
POST /api/motion/triggerfor triggering motion events from external sources
Changed
- Thumbnail decoding now uses libav for improved performance, defaults to first frame, and includes a configurable count setting
Fixed
- Fullscreened cells in live view now correctly swap to the main stream instead of the sub-stream
- Detection interval unit label and segment duration minimum value corrected in stream settings
- Single-cell (1x1) live view now fits the desktop viewport without requiring scrolling
🔗 Full Changelog: 0.34.2...0.34.3
Release 0.34.2
🤖 AI-Generated Changelog
Added
- Individual toggles for WebRTC, HLS, and MSE stream views on the dashboard, allowing users to show or hide each player type independently
- Refresh button in the recordings toolbar for manually reloading the recordings list
- go2rtc codec-aware stream registration with live re-registration when the codec changes, improving stream compatibility
Changed
- Renamed
onvif_motion_recordingsetting tocross_stream_motion_triggerto better reflect its purpose; update any configuration referencing the old name - Migrated network-bound action buttons to an async pattern, providing better feedback during operations
- Timeline now preserves playback state across seek operations, preventing unexpected pauses
Fixed
- ONVIF events now work correctly with strict ONVIF servers such as Reolink cameras
- HTTP request handler no longer holds a dangling pointer into a reallocated receive buffer, preventing potential memory corruption
- MQTT settings inputs no longer get incorrectly filled by Firefox's saved-login autofill
- Disconnected camera reconnect loop no longer spins uncontrollably, and suppresses repetitive EOF log spam
Removed
/api/motion/testendpoint has been removed; any integrations using this endpoint should be updated
🔗 Full Changelog: 0.34.1...0.34.2
Release 0.34.1
🤖 AI-Generated Changelog
Fixed
- Reject stream names containing spaces or special characters to prevent invalid stream configurations
- Resolve pipeline override issue in go2rtc integration that could cause stream processing failures
🔗 Full Changelog: 0.34.0...0.34.1
Release 0.34.0
🤖 AI-Generated Changelog
Added
- Settings page redesign: Tabbed layout with URL-hash navigation, live search across all settings, and a sticky save button for easier configuration management
- Streams page card grid: New card-based grid layout for streams with a recording-mode badge displayed on each stream card
- go2rtc config override editor: Full-featured YAML editor in settings with validation, presets, effective-config preview, and quarantine banner for invalid configurations
- go2rtc override safety: Automatic quarantine of invalid or crash-looping override configurations, surfaced in the UI with clear status indicators
- go2rtc effective-config preview: New API endpoint showing the merged configuration with YAML-aware redaction of sensitive values
- go2rtc server-side validation: Duplicate-key detection and structural validation of go2rtc override YAML before it is applied
- go2rtc binary discovery hardening: Searches well-known paths and probes the version to reliably locate the go2rtc binary
- AsyncButton and useAsyncAction: New UI primitive for async operations with built-in loading and error state handling
- Per-stream go2rtc source override: Individual streams can now specify a custom go2rtc source, overriding the default pipeline
Changed
- go2rtc configuration architecture: Base config is now emitted separately; a second
--configargument passes the user override, enabling upgrade-safe customization without losing settings - go2rtc config override size cap: Raised from 4 KB to 64 KB to support larger configurations
- Streams page layout: Displays 4 columns on extra-large screens (
2xl) for better use of wide displays - Theme polish: Custom scrollbar styling and support for the
prefers-reduced-motionaccessibility preference - Mobile navigation: Logo now links to home; toast notifications repositioned; safe-area insets applied for notched devices
Fixed
- Recordings table overflow: Corrected layout overflow issues in the recordings table
- Playback modal fit: Improved sizing and fit of the video playback modal
- Audio stream initialization: Declare audio stream before calling
avformat_write_header()to prevent initialization errors in UDT recordings - go2rtc non-RTSP URL handling: Skip RTSP-only URL fragments when the source scheme is not RTSP
- go2rtc disabled build stubs: Added missing stub implementations for override-pipeline APIs when go2rtc is compiled out
- Video controls visibility: Native video controls are now kept visible in the recordings modal
- Settings config state update: Guarded
setStatecall for effective config behind a mounted-ref check to prevent updates on unmounted components
🔗 Full Changelog: 0.33.2...0.34.0
Release 0.33.2
🤖 AI-Generated Changelog
Added
- Bidirectional cross-stream motion propagation for dual-lens cameras, allowing motion detected on one lens to trigger recording on the paired lens
- Dedicated ONVIF detection thread per stream with motion-storm protection and sticky-flag hysteresis to prevent false triggers and rapid on/off cycling
Changed
- ONVIF motion hold duration constant moved to file scope for better organization alongside related constants
- go2rtc log output path now derived from
config_dirinstead of a hardcoded path - Pre-buffer replay logging rate-limited to keyframes only to reduce log noise
- ONVIF username removed from startup log (replaced with auth enabled/disabled indicator) to avoid leaking credentials in logs
Removed
- Removed
motion_recordingfunctionality
Fixed
- Fixed build errors when compiling with
ENABLE_GO2RTC=OFFby adding missing go2rtc API stubs - Fixed ONVIF detection thread crash when UDT
pthread_createfails — thread is now stopped before context is freed - Fixed double
pthread_joinrace condition in ONVIF thread teardown using atomic compare-exchange - Fixed pre-buffer PTS-based replay detection by only setting
first_video_ptswhen PTS is valid - Fixed audio buffering during go2rtc replay by gating audio on
stream_is_live - Fixed go2rtc false stuck-detection alerts on startup with a warmup guard
- Fixed pre-buffer being incorrectly reset on stream reconnect
- Fixed metrics reporting for stream UDT (unified detection thread)
- Fixed
process_motion_eventsignature to includeis_propagatedparameter, resolving a dead-code guard issue - Removed YAML
log.outputsetting from go2rtc config — stdout/stderr redirection is sufficient and avoids conflicts
🔗 Full Changelog: 0.33.1...0.33.2
Release 0.33.1
🤖 AI-Generated Changelog
Added
- Support go2rtc configuration override and updated go2rtc submodule to dev branch
Fixed
- Resolved .deb package build issue by installing the sqlite3 CLI package when using system libraries
- Stopped bundling system libraries in .deb packages; system libraries are now declared as package dependencies instead, resolving installation conflicts (#387)
🔗 Full Changelog: 0.33.0...0.33.1
Release 0.33.0
🤖 AI-Generated Changelog
Added
- Add web server bind address configuration, allowing the server to listen on a specific IP address
- Add milliseconds to logging output for improved timestamp precision
Changed
- Standardize string copy functions across the codebase for consistency and safety
- Replace trivial
snprintfcalls withsafe_strcpyfor cleaner string handling - Standardize directory creation and permission functions (
mkdir/chmod) across the codebase - Refactor HLS directory creation for improved reliability
- Refactor and simplify PID file management, removing unused code
Fixed
- Fix retention cleanup to loop until the full backlog is cleared, preventing accumulation of old recordings (#369)
- Fix orphan detection performance issue (#369)
- Fix recursive
chown/chmodoperations on large recording directories causing performance problems (#368) - Fix missing bundled libraries in Debian package (#362)
- Fix detection of go2rtc process death
- Fix missing build dependency for rebuild-recordings
- Fix
start_timecorrection and external motion trigger handling in unified detection thread - Fix
mp4_writer_closesequence - Fix use of
%lluformat specifier foruint64_trecording IDs
Security
- Upgrade
brace-expansionandfollow-redirectsdependencies to resolve moderate security advisories - Bump
axiosand other npm dependencies to patched versions
🔗 Full Changelog: 0.32.4...0.33.0