Skip to content

Releases: spupuz/VibeNVR

v1.30.3

10 Jun 15:47

Choose a tag to compare

What's Changed

  • fix(engine): honor "Motion Triggered" picture mode in the AI detection path by @Lion-killer in #49

Full Changelog: v1.30.2...v1.30.3

🚀 Release v1.30.3

📝 Summary

This patch release resolves a critical issue with the AI detection engine where the "Motion Triggered" snapshot configuration was not being respected, causing users with Passthrough recording to lose visibility into AI bounding boxes.

🛠️ Key Improvements

  • 🛡️ Engine: Fixed a bug where the AI path ignored the picture_recording_mode setting, always falling back to temporary snapshots. The AI engine now strictly honors the "Motion Triggered" setting, ensuring permanent snapshots are saved to the database with the AI bounding boxes clearly drawn.

🙌 Contributors

  • @Lion-killer: Identified and fixed the AI motion snapshot bug, restoring feature parity with the OpenCV path.

v1.30.2

10 Jun 13:53

Choose a tag to compare

🚀 Release v1.30.2

📝 Summary

This release resolves a critical issue affecting transcoding loops. By importing a missing dependency, the backend ensures rock-solid stability during non-passthrough recordings and dynamic video frame resizing, providing a seamless experience even when hardware acceleration is unavailable.

🛠️ Key Improvements

  • 🚀 Engine: Fixed a NameError crash related to cv2 when the recording_manager falls back to software transcoding and needs to accurately resize frames.

v1.30.1

10 Jun 11:51

Choose a tag to compare

🚀 Release v1.30.1

📝 Summary

This release introduces the highly anticipated native go2rtc integration directly within the VibeNVR engine. It acts as an internal gateway to transparently proxy RTSP streams, effectively bypassing connection limits and IP bans on consumer-grade cameras (like Tapo/TP-Link). We've also polished the UI localization and updated all documentation to reflect this architectural leap.

🛠️ Key Improvements

  • 🚀 Engine & Architecture: Fully integrated go2rtc lifecycle management within the Engine. VibeNVR now auto-generates the go2rtc.yaml configuration and gracefully routes RTSP connections through the local proxy.
  • 🛡️ Resilience: Implemented robust proxy detection and enhanced logging in stream_reader.py to seamlessly distinguish between direct and proxy connections, avoiding hardware rate-limits.
  • 🎨 Aesthetics & UI: Added clear, localized UI terminology ("Network Proxy (go2rtc Gateway)") across all 8 supported languages to ensure users understand the gateway's function.

🙌 Contributors

  • Юрій Білоус (Yurii Bilous): Original go2rtc stream gateway implementation.
  • @spupuz: Core architecture review, integration refinements, and UI localization.

v1.30.0

09 Jun 17:40

Choose a tag to compare

Full Changelog: v1.29.8...v1.30.0

🚀 Release v1.30.0

📝 Summary

VibeNVR v1.30.0 is a milestone release that introduces our highly anticipated Granular Role-Based Access Control (RBAC). System administrators now have the precision to fine-tune Viewer accounts, explicitly granting or revoking the ability to view live feeds, replay historical events, or control PTZ cameras on a per-user and per-camera basis. This release also includes a beautiful redesign of the User Settings interface to support these powerful new capabilities intuitively.

🛠️ Key Improvements

  • 🚀 Granular RBAC: Viewers can now be assigned specific VIEW, REPLAY, and CONTROL permissions via a flexible camera_accesses model.
  • 🛡️ Security: Stricter endpoint validation ensures viewers can only access streams, frames, and events for cameras they are explicitly authorized for, strengthening the core security posture.
  • 🎨 Aesthetics: The User Settings modal has been completely redesigned with a modern sticky layout, intuitive toggles, and responsive checkboxes tailored for mobile and desktop experiences.

VibeNVR v1.29.8

08 Jun 16:55

Choose a tag to compare

🚀 Release v1.29.8

📝 Summary

This patch introduces a critical stability fix for the AI engine (AI queue contention resolution), resolving a lock that occurred when multiple cameras made simultaneous inference requests. Additionally, it introduces Dynamic Resolution Scaling for the AI Overlay (OSD) to ensure bounding boxes and labels are always perfectly proportioned, regardless of the video stream resolution.

🛠️ Key Improvements

  • 🚀 AI Queue Contention Resolution: Added a 200ms timeout to the AI queue submit lock to prevent watchdog loops and ensure safe frame dropping under extreme load.
  • 🎨 Aesthetics: Implemented Dynamic Resolution Scaling for the AI OSD. Box thickness and font size now scale proportionally to the native frame resolution, eliminating the 'giant text' effect on low-resolution sub-streams.
  • 🛡️ Stability: Fixed a backend crash during webhook processing caused by N/A strings returned by ffprobe on incomplete video chunks.

v1.29.7

05 Jun 16:46

Choose a tag to compare

🚀 Release v1.29.7

📝 Summary

This patch release brings significant stability improvements to the recording engine, enhanced security for stream management, and polished dark-mode aesthetics for the frontend. We've introduced robust fallback mechanisms for AI passthrough and transcoder processes, ensuring continuous recording even under high-load or failure conditions. Additionally, new visual indicators and improved RTSP timeouts make managing cameras on slow networks more intuitive than ever.

🛠️ Key Improvements

  • 🚀 Engine & Recording: Automatically restart recordings if the transcoder fallback crashes, and introduced AI Passthrough fallback safety with dynamic bounding boxes.
  • 🚀 Streaming: Bumped RTSP connection timeouts to 30s to better support slow networks and VPN setups, while optimizing stream routing by removing the legacy stream_url schema.
  • 🛡️ Security: Masked RTSP passwords in stream connection error notifications to prevent credential leakage in logs, and fixed PostgreSQL array parsing for AI motion detection with pinned secure dependencies.
  • 🎨 Aesthetics & UI: Display a distinct DISABLED status badge for inactive cameras, and cleared the internal health cache on camera stop to prevent stale green badges. Fully adapted Timeline and Live View dropdowns for dark-mode.
  • 📚 Documentation: Added comprehensive support and configuration instructions for Coral M.2 (PCIe) accelerators to the Wiki.
  • 📦 Dependencies: Bumped react-router to v7.16.0.

🙌 Contributors

  • @Lion-killer: Fixed UI dark-mode adaptation for overlay/transparent select dropdowns across the Timeline and Live View (#40).
  • @app/dependabot: Bumped react-router dependency and resolved package-lock conflicts (#42).

Full Changelog: v1.29.6...v1.29.7

v1.29.6

30 May 23:02

Choose a tag to compare

🚀 VibeNVR v1.29.6

📝 Summary

This release delivers a set of focused but impactful improvements to the reliability and clarity of the live monitoring experience. The motion detection pipeline has been hardened against stale state bugs, the UI now communicates the full recording lifecycle with precision, and timezone handling has been made universally correct across all services.

🛠️ What's Changed

🕐 Timezone Consistency — All Docker Services

Previously, the backend and engine services had a hardcoded TZ=Europe/Rome environment variable, silently ignoring any custom timezone set via .env. This caused frame overlays, timeline event entries, and recording filenames to be stamped in the wrong local time for any user outside Italy.

Fix: All four Docker services (backend, engine, frontend, db) now use the dynamic form TZ=${TZ:-Europe/Rome}, which respects the value in .env while keeping Europe/Rome as the safe default. Existing setups are unaffected.


🛡️ Motion Badge Reliability — No More Stuck Badges

A stale-state bug caused the AI: PERSON or MOTION badge on the live camera card to persist indefinitely after disabling and re-enabling a camera while a motion event was still active. The root cause was entries being added to the backend's in-memory LIVE_MOTION dict on motion_on events but never cleaned up on camera stop.

Three independent fixes have been applied to make the system resilient at every layer:

  • TTL Guard (Backend — routers/events.py): Every motion_on event now stores a _updated_at timestamp. The /events/status route checks this on every poll and automatically evicts any LIVE_MOTION entry older than 60 seconds. This acts as a safety net if the motion_end event is ever missed (e.g., due to a container crash).

  • Instant Cleanup on Camera Stop (Backend — motion_service.py): The stop_camera() function now immediately removes the camera's entry from LIVE_MOTION after sending the stop signal to the engine. The badge disappears the instant you toggle the camera off, with no delay.

  • Engine State Reset on Detection Switch (Engine — camera_thread.py): When the active detection engine is changed at runtime (e.g., switching from OpenCV to AI Engine in camera settings), if a motion event was already in progress, the engine now fires a synthetic motion_end event before handing off to the new engine. This prevents the new engine from inheriting stale motion state and ensures a clean transition.


🎨 Live View — Three-State Recording Badge

The live camera tile previously used a single red pulsing badge for all active states. This made it impossible to distinguish between an active detection event and the post-capture recording cooldown (where the motion has ended but the video file is still being written to disk).

The UI now exposes three distinct visual states:

State Visual Badge Text Meaning
Active Motion (OpenCV) 🔴 Pulsing red border + badge MOTION Background subtraction has detected movement
Active Motion (AI Engine) 🔴 Pulsing red border + badge AI: PERSON (or detected label) YOLO model has identified an object
Finalizing Recording 🟠 Solid orange border + badge SAVING REC Motion ended, post-capture buffer writing to disk
Continuous Mode 🔵 Solid blue border + badge CONTINUOUS Always-on recording, no motion trigger required

The transition is now: AI: PERSON → (you leave frame) → SAVING REC → (file finalized) → badge disappears.


🌍 Localization

The new SAVING REC badge string has been fully localized. The extract_t.py and auto_translate.py scripts were run to propagate the translation key timeline.saving_rec to all 10 supported locale files:

EN · IT · FR · DE · ES · PT · ZH · JA · UK · RU


🙌 Contributors

A big thank you to the following community contributors whose work is included in this release:

  • @Lion-killer (Yuriy Bilous)
    • PR #34 — Fixed a runtime crash caused by a missing t() translation wrapper in LogSettingsModal, which would cause the Logs settings panel to fail to render in non-English locales. @Lion-killer in #34
    • PR #29 — Contributed the complete Ukrainian (uk) locale translation, adding full language support for Ukrainian-speaking users. @Lion-killer in #29

⬆️ Upgrade Notes

No database migrations or configuration changes are required for this release.

If you have set a custom TZ value in your .env file, it will now be correctly applied to all services automatically after the next rebuild.

docker compose down && docker compose up -d --build (only for dev environment)

## New Contributors
* @Lion-killer made their first contribution in https://github.com/spupuz/VibeNVR/pull/29

**Full Changelog**: https://github.com/spupuz/VibeNVR/compare/v1.29.5...v1.29.6

v1.29.5

29 May 16:43

Choose a tag to compare

Full Changelog: v1.29.4...v1.29.5

🚀 Release v1.29.5

📝 Summary

This release introduces native SOCKS/HTTPS Proxy support for Telegram notifications. We've engineered a resilient, asynchronous background system that allows your NVR to bypass network restrictions and deliver critical alerts reliably. To combat the instability of public proxies, the system includes a robust auto-retry mechanism that protects the core recording engine from timeouts.

🛠️ Key Improvements

  • 🚀 Telegram Proxy Support: Full support for routing Telegram API requests through SOCKS5 or HTTPS proxies, ensuring notifications reach you even in strictly firewalled or regionally blocked environments.
  • ⚙️ Intelligent Auto-Retry: Built-in background resilience. Users now have granular UI control over Max Retries and Retry Delay, allowing VibeNVR to silently retry failed proxy connections without dropping alerts or freezing the video engine.
  • 🛡️ Security & Stability: Hardened the Settings frontend against state-desync crashes, implemented strictly typed validation for proxy parameters, and passed all extensive RBAC isolation and Deep Roundtrip audits.
  • 🌍 Internationalization (i18n): Automatically extracted and translated all new proxy configuration strings across 9 supported UI languages for global accessibility.
  • 📚 Documentation Sync: Updated the integration guides with precise instructions for deploying notifications via proxy in restricted network environments.

v1.29.4

28 May 20:34

Choose a tag to compare

Full Changelog: v1.29.3...v1.29.4

🚀 Release v1.29.4

📝 Summary

This release focuses on bolstering our security posture and enhancing system resilience. We've introduced strict verification capabilities for SMTP connections, tightened the auditing mechanisms surrounding our backup infrastructure, and polished the internationalization (i18n) across the platform for a more seamless global experience.

🛠️ Key Improvements

  • 🛡️ Security: Introduced smtp_verify_cert setting to allow strict certificate validation during email transmissions, significantly reducing the risk of Man-in-the-Middle (MitM) attacks.
  • 🛡️ Security: Tightened the security and auditing protocols surrounding system backups to ensure data integrity and trackability.
  • 🎨 Aesthetics: Polished internationalization (i18n) translations, ensuring a seamless and fully localized user interface.

v1.29.3

28 May 16:36

Choose a tag to compare

Full Changelog: v1.29.2...v1.29.3

🚀 Release v1.29.3

📝 Summary

This release introduces a highly requested quality-of-life feature: customizable drag-and-drop sorting for cameras! Users can now manually arrange the order of their cameras in both the Live View grid and the Settings manager, with the layout securely persisting in the database. Alongside this, the "Copy Settings" feature has been updated to protect your carefully arranged layouts from being unintentionally overwritten during bulk operations.

🛠️ Key Improvements

  • 🚀 UI/UX: Drag-and-Drop Sorting. Visually arrange your camera feeds with a sleek new grab handle (GripHorizontal).
  • 🛡️ Security: Admin-Only Reordering. The new /api/cameras/reorder endpoint is strictly protected by RBAC to ensure Viewers cannot alter the master layout.
  • 🎨 Aesthetics: Polished the interaction states for the grab handles to ensure they don't overlap or distract from the video feed or selection checkboxes.
  • ⚙️ Integrity: Excluded the sort_order attribute from the global "Copy Settings" logic to prevent layout corruption when cloning configurations across groups.