Skip to content

Releases: opensensor/lightNVR

Release 0.32.0

25 Mar 23:13

Choose a tag to compare

🤖 AI-Generated Changelog

Added

  • Added privacy mode for streams, allowing individual streams to be hidden/masked (#325)
  • Added macro-based per-translation-unit logging context (LOG_COMPONENT) for more precise log filtering and diagnostics

Changed

  • Updated go2rtc to the opensensor fork, rebased onto upstream master
  • Consolidated ONVIF URL generation into a unified helper function for consistency across the codebase
  • Consolidated duplicate ONVIF WS-Security header implementations to reduce code duplication

Fixed

  • Fixed ONVIF motion detection compatibility with Tapo cameras (C545D and similar models)
  • Fixed dynamic ONVIF event service discovery for improved multi-vendor compatibility
  • Fixed RTSP source and WebRTC sessions not being closed when a stream is disabled
  • Fixed recording not stopping correctly when a stream is disabled
  • Fixed URL encoding of stream names in go2rtc API calls, resolving issues with special characters
  • Fixed fullscreen stack buildup during arrow-key grid navigation
  • Fixed recursive draining of the fullscreen stack and added grid-position overlay on arrow-key navigation
  • Fixed timeline poll not removing entries for deleted recordings (#331)
  • Fixed empty segment array handling in TimelineSegments props updates (#331)
  • Fixed camera order key being duplicated across live views; now shared correctly as a single key
  • Fixed Home Assistant MQTT discovery message publishing timing in the MQTT callback
  • Fixed go2rtc quoting issue and improved Docker Compose file resilience

🔗 Full Changelog: 0.31.3...0.32.0

Release 0.31.3

18 Mar 06:02

Choose a tag to compare

🤖 AI-Generated Changelog

Added

  • Share grid layout preference across all live view modes so your chosen layout persists when switching views
  • Stream disable button in WebRTC live view cell for quick per-stream control
  • Privacy quick-disable toggle for streams, allowing fast privacy management without entering settings
  • Per-thread component and stream fields in log output for improved traceability
  • Live view fullscreen to timeline fullscreen handoff, enabling seamless transitions between views

Changed

  • Replaced view-mode buttons with a tab strip in Live View for a cleaner navigation experience
  • Recordings table now highlights selected rows for clearer selection feedback
  • Audio recording changes now take effect on the next segment without requiring a restart
  • Log context wired into remaining worker threads for consistent logging across all components

Fixed

  • Grid layout enforced as square-only across all live views for consistent appearance
  • Stream status improvements and credential update now apply correctly
  • Arrow-key grid navigation in native fullscreen now works as expected in Live View
  • Eliminated spacebar play/pause loop race condition in timeline
  • Recordings layout — tabs, gear icon alignment, and sidebar-proof toolbar
  • Recordings toolbar gear icon stays pinned to the right when action buttons wrap
  • Heading layout improvements for better visual consistency
  • Second horizontal divider removed at large breakpoints to reduce visual noise
  • Language selector, edit profile, and logout now display correctly in a single row
  • WebRTC error message improved when camera source is unreachable
  • Replaced permanent give-up behavior with cooldown-retry logic in the outer recording thread
  • Updated llhttp wget URLs to use the correct release branch format

🔗 Full Changelog: 0.31.2...0.31.3

Release 0.31.2

16 Mar 03:13

Choose a tag to compare

🤖 AI-Generated Changelog

Added

  • Added language selector to the login page
  • Added keyboard-accessible controls to the Full Screen Manager using tinykeys

Changed

  • Improved header responsiveness across varying screen widths
  • Improved language preference selection and pre-selection of default language option
  • Conditionally limit mobile menu items for a cleaner mobile experience
  • Render Edit Profile and Login/Logout consistently with other header items
  • Prevented mobile styles from being applied to desktop header buttons
  • Prevented headers from shifting left/right during initial page load
  • Prevented title/close from appearing left of list on wider screens
  • Simplified language preference handling
  • Cleaned up legacy CSS files (base.css, components.css)

Fixed

  • Fixed active header button color
  • Fixed hiding of the language dropdown and user/logout buttons
  • Fixed header and UI consistency issues
  • Fixed timeline keyboard navigation, focus ring, spacebar control, forward auto-advance, and navigation-preserving coverage
  • Fixed bug #315
  • Resolved CI deprecation warnings

Security

  • Applied Copilot Autofix suggestions to TimelinePlayer.jsx and UsersTable.jsx to address identified findings

🔗 Full Changelog: 0.31.1...0.31.2

Release 0.31.1

14 Mar 11:56

Choose a tag to compare

🤖 AI-Generated Changelog

Added

  • Clone stream feature with user feedback improvements
  • Sortable table on the Users page

Changed

  • Stream credentials are now masked by default in the streams table view, even for administrators
  • Improved backend stream health checking using the same Unified Detection Thread (UDT) state as the frontend
  • Improved stream status reporting using UDT state
  • Updated npm dependencies

Fixed

  • Stabilized timeline playback and keyboard navigation
  • Buffered PCM samples in AVAudioFifo before AAC encoding to fix audio encoding issues
  • Improved playback speed feedback when using keyboard navigation
  • Fixed test runner
  • Trimmed leading/trailing whitespace from stream names on save
  • Added missing common.all i18n translation key
  • Fixed stream status reporting accuracy

Security

  • Applied multiple Copilot Autofix suggestions across C backend and JavaScript frontend components
  • Addressed all clang-tidy warnings from CI report
  • Applied code quality fixes to mp4_writer_utils.c, unified_detection_thread.c, api_handlers_recordings_backend_agnostic.c, and various frontend components

🔗 Full Changelog: 0.31.0...0.31.1

Release 0.31.0

11 Mar 12:05

Choose a tag to compare

🤖 AI-Generated Changelog

Added

  • Added internationalization (i18n) support with translations for German, Spanish, French, Italian, Japanese, and Chinese
  • Added "View in Timeline" button to Live View for quick navigation to recordings
  • Added timeline keyboard navigation modes for improved accessibility and usability
  • Added inline protect and tag actions to the timeline for faster workflow
  • Added AI-generated release notes via GitHub Actions changelog workflow

Changed

  • Improved startup responsiveness and stream loading user experience
  • Improved header consistency and current-user profile editing
  • Improved user login restriction workflows
  • Improved timeline recording navigation
  • Upgraded container dependencies including libuv, llhttp, and SQLite
  • Refreshed container dependency sources
  • Moved capture method settings to a gear/cog menu item in recordings table

Fixed

  • Fixed recordings bulk selection behavior across multiple pages
  • Fixed repeated go2rtc snapshot retry attempts (#265)
  • Fixed timeline recording navigation issues (#268)
  • Fixed ONVIF detection system initialization (#267)
  • Fixed go2rtc detection false positives (#264)
  • Fixed stale version.h issue (#263)
  • Fixed go2rtc config not regenerating from saved settings on Docker restart
  • Fixed recordings table capture method column header display
  • Increased database backup frequency to reduce potential data loss
  • Applied security and stability fixes to database core and recordings table components

🔗 Full Changelog: 0.30.1...0.31.0