Viseron
Self-hosted, local-only NVR and AI computer vision software
Alternative to: ring, nest, wyze
v3.7.0
2026-09-17The main highlight of this release is the new ONVIF component which is a big leap forward for the project. There are some other goodies as well so keep reading.
There is now a dedicated Discord channel for Viseron that I encourage you to join! Here you can ask questions and get help from fellow users. The community is very small at the moment but I hope we can grow it together. You can join at this link
Breaking changes
- RPi3 support is no longer included in Viseron and new versions (this one included) will not publish the
roflcoopter/rpi3-viseronimage. I decided to do this because it is an older platform which is very hard to maintain and I believe that not many are using it anymore. If this causes trouble for you, please reach out through an issue on GitHub and we can discuss solutions. - The old
ptzcomponent has been removed in favor of the newonvifcomponent. You can read more about the ONVIF component further down in these release notes.
New features
ONVIF!
Viseron finally has ONVIF support! A huge thanks to @kaburagisec who has been working on this for a long time. The implementation is quite extensive so I won’t go into detail here, but it allows you to set a multitude of options in a camera’s configuration, basically turning Viseron into a central configuration hub of all your ONVIF cameras. The settings can be controlled directly from the frontend via the Camera Tuning interface, and can be applied without restarting Viseron.
The documentation is quite extensive and I encourage you to read it. You can find it here
PTZ in frontend
With the new ONVIF component comes the possibility to control your PTZ cameras from the frontend as well. Manual control as well as setting/recalling presets is supported.
FastALPR
@kilodelta1 added support for running FastALPR for license plate recognition. This is the only component that provides LPR locally in Viseron and does not require an external server like CodeProject.AI does.
You can find the documentation here
Logs in UI
The logs can now be read from the frontend by going to Settings > Logs
You can filter on specific log levels or search for text, as well as tailing the log file live.
Recording schedule
You can now set a schedule for recordings. The schedule can be configured independently for event and continuous recordings. Each camera has its own schedule and is configured via cron expressions.
You can find the documentation here
Other notable features
- New config option
require_motion_overlap, contributed by @mvanhorn. Motion overlap helps to reduce false positives by making sure detected objects overlap with a region that also has motion detected. Without it, if a tree blowing in the wind triggers motion in one region, and an object is detected in another region, a recording will start. - Docker images are published to GHCR as well as Docker Hub
- Object detectors and post processors now save a
latest_snapshot.jpg, similar to thelatest_thumbnail.jpg. The snapshots are exposed over MQTT and to Home Assistant for use in notifications. - New PWA configuration
- Option to disable chown during startup, for faster restarts of the container. You can find the documentation here
Changes
- Event DB persistence moved away from the main thread, which provides a slight performance improvement in terms of speed and CPU usage.
- More specific icons for events on the Events page
Fixes
- Fix YOLO component to run as non-root
- Resolved over 200 vulnerabilities by updating most NPM and Python dependencies
- RAM usage reductions by freeing old frames in a smarter way
- RAM usage reductions by using
forkserverfor multiprocessing - Memory leaks related to camera disconnects fixed
- Automatically transcode more streams to fix playback issues
- Numerous security issues fixed related to assigned cameras, path traversal and onboarding
Docker images will be on Docker Hub and GHCR shortly
All changes
- feat(docker): allow disabling chown at startup by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1436
- feat(nvr): add recording schedule by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1438
- feat(object_detector): add require_motion_overlap to gate recordings on object/motion overlap by @mvanhorn in https://github.com/roflcoopter/viseron/pull/1402
- Master to dev by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1442
- fix(yolo): specify runs-dir so yolo can run as non-root by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1444
- feat(domains): store image classification snapshots by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1441
- feat(fastalpr): add local license plate recognition component by @kilodelta1 in https://github.com/roflcoopter/viseron/pull/1431
- feat(ci): mirror images to ghcr by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1443
- build(deps): bump the npm_and_yarn group across 2 directories with 18 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1437
- build(deps): bump the npm_and_yarn group across 2 directories with 12 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1446
- fix(fastalpr): pin onnxruntime-gpu to a CUDA 12-compatible release by @kilodelta1 in https://github.com/roflcoopter/viseron/pull/1451
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1447
- build(deps): bump the python group across 1 directory with 53 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1449
- build(deps): bump the pre-commit group across 1 directory with 12 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1448
- build(deps): bump the python group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1456
- build(deps): bump the docs group across 1 directory with 35 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1452
- build(deps): bump @carbon/icons-react from 11.85.0 to 11.86.0 in /docs in the docs group by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1458
- feat(helper): enhance pop_if_full to use iterative approach for better performance by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1460
- build(deps): bump the frontend group across 1 directory with 68 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1453
- Run
pre-commiton Project by @kaburagisec in https://github.com/roflcoopter/viseron/pull/1469 - build(deps): upgrade node to 24 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1470
- fix(ruff): disable PLR0917 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1472
- build(deps): bump https://github.com/astral-sh/ruff-pre-commit from v0.16.2 to 0.16.3 in the pre-commit group across 1 directory by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1462
- build(deps): bump dompurify from 3.4.13 to 3.4.14 in /frontend by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1459
- build(deps): bump the python group across 1 directory with 4 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1468
- fix(telegram): resolve ruff lint errors by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1475
- feat(post_proc): store latest_snapshot.jpg by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1471
- build(deps): bump the frontend group in /frontend with 6 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1476
- fix(license_plate_recognition): plate_expired() signature mismatch by @kilodelta1 in https://github.com/roflcoopter/viseron/pull/1454
- feat(docs): announce discord link across docs and frontend by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1477
- feat(ci): disable rpi3 builds by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1478
- fix(nvr): pass SharedFrame to stream handler instead of numpy array by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1480
- feat(core): move event db persisting off main thraid by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1481
- fix: transcode browser-incompatible recording codecs by @mvanhorn in https://github.com/roflcoopter/viseron/pull/1483
- feat(data_stream): refactor data stream bus by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1482
- fix(ffmpeg): fix ffmpeg filter drawtext by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1484
- Fix memory leak during reconnects by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1488
- fix(camera): store bytes on SharedFrame to avoid leaks by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1489
- build(deps): bump the python group with 2 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1494
- build(deps): bump https://github.com/astral-sh/ruff-pre-commit from v0.16.3 to 0.16.4 in the pre-commit group by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1492
- build(deps): bump the frontend group in /frontend with 11 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1493
- ONVIF Profile S, Actions API, and PTZ Controls Implementation by @kaburagisec in https://github.com/roflcoopter/viseron/pull/1205
- Memory optimizations using forkserver by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1496
- Better Events icon by @kaburagisec in https://github.com/roflcoopter/viseron/pull/1491
- build(deps): bump fast-uri from 3.1.5 to 3.1.7 in /frontend by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1504
- build(deps): bump fast-uri from 3.1.5 to 3.1.7 in /docs by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1505
- fix(core): validate entity owner by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1507
- build(deps): bump the python group with 5 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1511
- build(deps): bump the docs group in /docs with 6 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1509
- build(deps): bump the frontend group in /frontend with 11 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1510
- build(deps): bump https://github.com/PyCQA/autoflake from v2.3.3 to 2.4.0 in the pre-commit group by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1508
- build(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 in /frontend by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1506
- Systems Logs in Frontend Implementation by @kaburagisec in https://github.com/roflcoopter/viseron/pull/1503
- build(deps-dev): bump the frontend-security group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1512
- Fix timezone-dependent failures in tokens.test.ts by @lbellows in https://github.com/roflcoopter/viseron/pull/1501
- Show a loading indicator for the first camera snapshot by @lbellows in https://github.com/roflcoopter/viseron/pull/1499
- feat(ci): run amd64 container smoke tests in github actions by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1513
- fix(recordings): make sure startLoad is called in HlsVodPlayer by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1521
- feat(demo): add frontend demo setup by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1520
- docs(logging): add frontend docs and screenshot by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1523
- Screenshot CI job by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1526
- fix: quote environment and Postgres paths in Docker init by @lbellows in https://github.com/roflcoopter/viseron/pull/1486
- build(deps): bump https://github.com/astral-sh/ruff-pre-commit from v0.16.4 to 0.16.5 in the pre-commit group by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1514
- build(deps): bump the docs group in /docs with 3 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1515
- build(deps): bump the python group across 1 directory with 5 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1518
- build(deps): bump the frontend-security group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1524
- build(deps): bump the docs-security group across 1 directory with 7 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1525
- build(deps): bump the frontend group across 1 directory with 18 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1528
- fix: do not let /files query params rewrite into arbitrary directories by @lbellows in https://github.com/roflcoopter/viseron/pull/1487
- Fix frontend vitest suite on Node >= 22 (web storage globals) by @lbellows in https://github.com/roflcoopter/viseron/pull/1500
- Better PWA configurations by @kaburagisec in https://github.com/roflcoopter/viseron/pull/1527
- build(deps): bump the docs-security group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1530
- feat(demo): mock users endpoint by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1529
- fix(build): improve agent cleanup by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1533
- fix(auth): make sure hashed passwords are not exposed over the api by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1534
- fix(fragmenter): stop/start fragmenter along with camera by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1540
- fix(auth): close ws connections on revocation by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1543
- build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1536
- build(deps-dev): bump the docs group in /docs with 5 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1537
- build(deps): bump the frontend group in /frontend with 11 updates by @dependabot[bot] in https://github.com/roflcoopter/viseron/pull/1538
- fix(hls): get init.mp4 path from lowest tier by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1544
- fix(onboarding): harden onboarding flow by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1545
- merge master to dev by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1546
- Revert “fix(hls): get init.mp4 path from lowest tier” by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1547
- Revert “fix(hls): get init.mp4 path from lowest tier” by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1548
- fix(hls): get init.mp4 from lowest tier by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1549
- merge master to dev by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1550
- feat(object_detector): store latest snapshot by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1552
- docs(ptz): add PTZ controls screenshot by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1553
- 3.7.0 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1554
New Contributors
- @kilodelta1 made their first contribution in https://github.com/roflcoopter/viseron/pull/1431
- @lbellows made their first contribution in https://github.com/roflcoopter/viseron/pull/1501
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.6.2…v3.7.0