A special thanks to @neagix, @vanhorn and @fluffyspace for their contributions to this release.
Breaking changes
The Viseron Docker container images uses Ubuntu as its base, and with this version it has been upgraded to 24.04.
This should not necessarily break anything, but since a lot of drivers and other packages are upgraded as well, there is a possibility that some custom setups may be affected.
PostgreSQL 16
With the Ubuntu upgrade, PostgreSQL has been updated to version 16, which will require a database migration when upgrading from a previous version. This migration will be done automatically on first startup, so please be patient and avoid restarting the container during this process.
FFmpeg 8.1
FFmpeg has been upgraded to 8.1 from 5, which has some breaking changes that may affect some users. Please see the FFmpeg 8.1 release notes for more information.
New features
Reloading config without restarting
This release introduces the ability to reload the config without restarting the Viseron container.
Every component has been updated and tested to support this, but reloading should still be considered experimental until it has been tested in the wild.
If you encounter any issues, please report them on GitHub.
For information on how to reload the config, please see the documentation.
External motion detector
Support for external motion detectors has been added, and the MQTT component has been updated to support this. This allows you to use any MQTT enabled device as a motion detector, and have it trigger recordings or object detection in Viseron, just like any other frame based motion detector.
For more information on how to set this up, visit the documentation.
Date and time format
The date and time format used in the web interface can now be configured per user from the Profile page. Previously the browsers locale was used to determine the format, but this was not always accurate and could lead to confusion.
Other notable features
- Personal access tokens for API access. How to use a token is described here
- Viseron can now finally run as a Home Assistant App. Documentation on how to set this up can be found here.
Changes
- OpenCV has been upgraded to 4.13
- FFmpeg has been upgraded to 8.1
- Dlib has been upgraded to 20.0.1
- When no cameras are configured, properly guide users to the config page instead of showing "Waiting for cameras to register"
- Harden the API by introducing rate limiting for sensitive endpoints.
- Revoke refresh token after use.
- Storage tier check performance improvements for continuous recordings.
- Deleting recordings now has a confirmation dialog to avoid accidental deletion of recordings.
- Disable Ultralytics telemetry
- You can now download a recording directly from the Recording page in the web interface.
- Deprecate
detection_labelin favor ofdetection_labelsin the config for thediscordandtelegramcomponents. - Dispatch events and entities in Home Assistant for unknown faces during face recognition.
- Camera picker dialog now has a
Clear Selectionbutton to clear all selected cameras.
Fixes
- Fix timezone issues with local folders for recordings
- Use
-stimeouton Jetson Nano for RTSP streams - Fix headers not working in webhook component
- Encode payload in utf-8 for webhook component to avoid issues with special characters
- Allow a custom CA certificate to be used for webhook component
- Properly respect configured labels for the
discordandtelegramcomponents.
Docker images will be on Docker Hub shortly
All changes
- Frontend: date and time format by @roflcoopter in #1302
- feat(logger): support config reload by @roflcoopter in #1301
- merge master to dev by @roflcoopter in #1310
- feat(core): track setup status of components on start/reload by @roflcoopter in #1312
- feat(webserver): add websocket command to trigger reload by @roflcoopter in #1313
- feat(frontend): add config reload support to the frontend by @roflcoopter in #1317
- fix(frontend): make pages adapt to header banner heights by @roflcoopter in #1318
- feat(frontend): guide user to setup cameras if none are configured by @roflcoopter in #1319
- feat(ui/live): show camera selector when none is selected by @roflcoopter in #1320
- fix: X-Client-UTC-Offset header and respect timezone for local folder by @neagix in #1321
- fix(reload): default components should not reload by @roflcoopter in #1322
- fix(reload): properly reload domain level changes by @roflcoopter in #1323
- fix(reload): an unloaded domains component should not be marked as affected by @roflcoopter in #1324
- fix(compreface): add domain level unload by @roflcoopter in #1325
- fix(darknet): add domain level unload by @roflcoopter in #1326
- feat(edgetpu): add config reload support by @roflcoopter in #1328
- feat(telegram): add config reload support by @roflcoopter in #1330
- feat(webserver/auth): add backend support for PAT by @roflcoopter in #1346
- feat(frontend): allow user to manage PAT in frontend by @roflcoopter in #1347
- feat(webserver/auth): add rate limiting to sensitive endpoints by @roflcoopter in #1348
- Ubuntu Noble 24.04 by @roflcoopter in #1340
- feat(auth): revoke refresh tokens on user delete/logout by @roflcoopter in #1349
- fix(ffmpeg): use -stimeout on Jetson Nano for RTSP streams (#617) by @mvanhorn in #1350
- test cases for AbstractObjectDetector by @john- in #1261
- fix(tests): refactor tests to use new filter enum by @roflcoopter in #1354
- Merge master to dev by @roflcoopter in #1339
- fix(api): enhance XSRF protection for cookie-authenticated requests by @roflcoopter in #1353
- feat(ci): cache docker images for faster pytest runs by @roflcoopter in #1357
- fix: use curl for the migration to Postgres 16 by @neagix in #1356
- feat(auth): rotate refresh token after use by @roflcoopter in #1355
- feat(auth): uniform timing for jwt verification by @roflcoopter in #1360
- fix(docker): explicitly install libwebpdemux2 by @roflcoopter in #1369
- feat(ci): add container smoke tests by @roflcoopter in #1379
- fix(webhook): fix StringKey validator for webhook header config by @roflcoopter in #1382
- feat(storage): implement fast-path check for tier processing by @roflcoopter in #1381
- refactor(core): use dedicated ViseronData type for data attribute by @roflcoopter in #1383
- fix(webhook): encode payload as UTF-8 bytes to prevent encoding errors by @roflcoopter in #1388
- fix: save user_token when saving PATs by @neagix in #1389
- feat(motion): add support for external motion detectors by @roflcoopter in #1390
- feat: add confirmation dialog when deleting by @neagix in #1393
- Revert "fix: save user_token when saving PATs" by @neagix in #1397
- feat: support custom CA certificate for webhook component TLS verification by @mvanhorn in #1400
- fix(storage): warn at init when last tier has no retention configured by @fluffyspace in #1401
- Home Assistant App (add-on) changes by @roflcoopter in #1396
- fix(storage): bound check_tier queue and pending callbacks to stop subprocess RSS leak by @fluffyspace in #1364
- fix: disable Ultralytics telemetry, always enabled by default by @neagix in #1398
- feat: add download button to recordings page cards by @neagix in #1392
- fix: do not attempt ps if viseron already exited by @neagix in #1403
- fix: path traversal in publicimage token lookup; missing return after finish() by @neagix in #1405
- fix(storage): drop stuck DB row when move target equals source by @fluffyspace in #1399
- fix: apply restrictions per recording/camera and user/camera by @neagix in #1406
- fix(telegram): send notifications for CONFIG_DETECTION_LABEL only by @roflcoopter in #1407
- feat(face_recognition): dispatch events for unknown faces by @roflcoopter in #1408
- feat(camera): add clear selection button to camera picker dialog by @roflcoopter in #1409
- feat(discord): add configurable detection_labels filtering by @roflcoopter in #1411
- docs: document the most common system events and their payloads by @mvanhorn in #1410
- fix(webserver): prevent RCE via render_template by @neagix in #1412
- fix(webserver): remove wildcard CORS from HLS playlists by @neagix in #1413
- build: bump urllib3 and requests for CVE fixes by @neagix in #1414
- fix(webserver): scope recording/snapshot export to the camera by @neagix in #1415
- build(deps): bump pyjwt from 2.8.0 to 2.13.0 by @dependabot[bot] in #1423
- fix(frontend): prevent infinite loading spinner in events player by @willian-rosa in #1421
- docs(config): add docs on config reload by @roflcoopter in #1426
- feat(reload): implement SIGHUP handling for config reload by @roflcoopter in #1427
- feat(deps): update vulnerable python deps by @roflcoopter in #1428
- fix(storage): prevent callback leak in tier check command path by @roflcoopter in #1430
New Contributors
- @mvanhorn made their first contribution in #1350
- @fluffyspace made their first contribution in #1401
- @dependabot[bot] made their first contribution in #1423
- @willian-rosa made their first contribution in #1421
Full Changelog: v3.5.3...v3.6.0