Viseron
Self-hosted, local-only NVR and AI computer vision software
Alternative to: ring, nest, wyze
v3.6.0
2026-08-10A 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 https://github.com/roflcoopter/viseron/pull/1302
- feat(logger): support config reload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1301
- merge master to dev by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1310
- feat(core): track setup status of components on start/reload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1312
- feat(webserver): add websocket command to trigger reload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1313
- feat(frontend): add config reload support to the frontend by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1317
- fix(frontend): make pages adapt to header banner heights by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1318
- feat(frontend): guide user to setup cameras if none are configured by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1319
- feat(ui/live): show camera selector when none is selected by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1320
- fix: X-Client-UTC-Offset header and respect timezone for local folder by @neagix in https://github.com/roflcoopter/viseron/pull/1321
- fix(reload): default components should not reload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1322
- fix(reload): properly reload domain level changes by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1323
- fix(reload): an unloaded domains component should not be marked as affected by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1324
- fix(compreface): add domain level unload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1325
- fix(darknet): add domain level unload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1326
- feat(edgetpu): add config reload support by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1328
- feat(telegram): add config reload support by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1330
- feat(webserver/auth): add backend support for PAT by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1346
- feat(frontend): allow user to manage PAT in frontend by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1347
- feat(webserver/auth): add rate limiting to sensitive endpoints by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1348
- Ubuntu Noble 24.04 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1340
- feat(auth): revoke refresh tokens on user delete/logout by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1349
- fix(ffmpeg): use -stimeout on Jetson Nano for RTSP streams (#617) by @mvanhorn in https://github.com/roflcoopter/viseron/pull/1350
- test cases for AbstractObjectDetector by @john- in https://github.com/roflcoopter/viseron/pull/1261
- fix(tests): refactor tests to use new filter enum by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1354
- Merge master to dev by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1339
- fix(api): enhance XSRF protection for cookie-authenticated requests by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1353
- feat(ci): cache docker images for faster pytest runs by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1357
- fix: use curl for the migration to Postgres 16 by @neagix in https://github.com/roflcoopter/viseron/pull/1356
- feat(auth): rotate refresh token after use by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1355
- feat(auth): uniform timing for jwt verification by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1360
- fix(docker): explicitly install libwebpdemux2 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1369
- feat(ci): add container smoke tests by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1379
- fix(webhook): fix StringKey validator for webhook header config by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1382
- feat(storage): implement fast-path check for tier processing by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1381
- refactor(core): use dedicated ViseronData type for data attribute by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1383
- fix(webhook): encode payload as UTF-8 bytes to prevent encoding errors by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1388
- fix: save user_token when saving PATs by @neagix in https://github.com/roflcoopter/viseron/pull/1389
- feat(motion): add support for external motion detectors by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1390
- feat: add confirmation dialog when deleting by @neagix in https://github.com/roflcoopter/viseron/pull/1393
- Revert “fix: save user_token when saving PATs” by @neagix in https://github.com/roflcoopter/viseron/pull/1397
- feat: support custom CA certificate for webhook component TLS verification by @mvanhorn in https://github.com/roflcoopter/viseron/pull/1400
- fix(storage): warn at init when last tier has no retention configured by @fluffyspace in https://github.com/roflcoopter/viseron/pull/1401
- Home Assistant App (add-on) changes by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1396
- fix(storage): bound check_tier queue and pending callbacks to stop subprocess RSS leak by @fluffyspace in https://github.com/roflcoopter/viseron/pull/1364
- fix: disable Ultralytics telemetry, always enabled by default by @neagix in https://github.com/roflcoopter/viseron/pull/1398
- feat: add download button to recordings page cards by @neagix in https://github.com/roflcoopter/viseron/pull/1392
- fix: do not attempt ps if viseron already exited by @neagix in https://github.com/roflcoopter/viseron/pull/1403
- fix: path traversal in publicimage token lookup; missing return after finish() by @neagix in https://github.com/roflcoopter/viseron/pull/1405
- fix(storage): drop stuck DB row when move target equals source by @fluffyspace in https://github.com/roflcoopter/viseron/pull/1399
- fix: apply restrictions per recording/camera and user/camera by @neagix in https://github.com/roflcoopter/viseron/pull/1406
- fix(telegram): send notifications for CONFIG_DETECTION_LABEL only by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1407
- feat(face_recognition): dispatch events for unknown faces by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1408
- feat(camera): add clear selection button to camera picker dialog by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1409
- feat(discord): add configurable detection_labels filtering by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1411
- docs: document the most common system events and their payloads by @mvanhorn in https://github.com/roflcoopter/viseron/pull/1410
- fix(webserver): prevent RCE via render_template by @neagix in https://github.com/roflcoopter/viseron/pull/1412
- fix(webserver): remove wildcard CORS from HLS playlists by @neagix in https://github.com/roflcoopter/viseron/pull/1413
- build: bump urllib3 and requests for CVE fixes by @neagix in https://github.com/roflcoopter/viseron/pull/1414
- fix(webserver): scope recording/snapshot export to the camera by @neagix in https://github.com/roflcoopter/viseron/pull/1415
- build(deps): bump pyjwt from 2.8.0 to 2.13.0 by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1423
- fix(frontend): prevent infinite loading spinner in events player by @willian-rosa in https://github.com/roflcoopter/viseron/pull/1421
- docs(config): add docs on config reload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1426
- feat(reload): implement SIGHUP handling for config reload by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1427
- feat(deps): update vulnerable python deps by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1428
- fix(storage): prevent callback leak in tier check command path by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1430
New Contributors
- @mvanhorn made their first contribution in https://github.com/roflcoopter/viseron/pull/1350
- @fluffyspace made their first contribution in https://github.com/roflcoopter/viseron/pull/1401
- @dependabot[bot] made their first contribution in https://github.com/roflcoopter/viseron/pull/1423
- @willian-rosa made their first contribution in https://github.com/roflcoopter/viseron/pull/1421
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.5.3…v3.6.0