The 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 #1436
- feat(nvr): add recording schedule by @roflcoopter in #1438
- feat(object_detector): add require_motion_overlap to gate recordings on object/motion overlap by @mvanhorn in #1402
- Master to dev by @roflcoopter in #1442
- fix(yolo): specify runs-dir so yolo can run as non-root by @roflcoopter in #1444
- feat(domains): store image classification snapshots by @roflcoopter in #1441
- feat(fastalpr): add local license plate recognition component by @kilodelta1 in #1431
- feat(ci): mirror images to ghcr by @roflcoopter in #1443
- build(deps): bump the npm_and_yarn group across 2 directories with 18 updates by @dependabot[bot] in #1437
- build(deps): bump the npm_and_yarn group across 2 directories with 12 updates by @dependabot[bot] in #1446
- fix(fastalpr): pin onnxruntime-gpu to a CUDA 12-compatible release by @kilodelta1 in #1451
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #1447
- build(deps): bump the python group across 1 directory with 53 updates by @dependabot[bot] in #1449
- build(deps): bump the pre-commit group across 1 directory with 12 updates by @dependabot[bot] in #1448
- build(deps): bump the python group across 1 directory with 2 updates by @dependabot[bot] in #1456
- build(deps): bump the docs group across 1 directory with 35 updates by @dependabot[bot] in #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 #1458
- feat(helper): enhance pop_if_full to use iterative approach for better performance by @roflcoopter in #1460
- build(deps): bump the frontend group across 1 directory with 68 updates by @dependabot[bot] in #1453
- Run
pre-commiton Project by @kaburagisec in #1469 - build(deps): upgrade node to 24 by @roflcoopter in #1470
- fix(ruff): disable PLR0917 by @roflcoopter in #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 #1462
- build(deps): bump dompurify from 3.4.13 to 3.4.14 in /frontend by @dependabot[bot] in #1459
- build(deps): bump the python group across 1 directory with 4 updates by @dependabot[bot] in #1468
- fix(telegram): resolve ruff lint errors by @roflcoopter in #1475
- feat(post_proc): store latest_snapshot.jpg by @roflcoopter in #1471
- build(deps): bump the frontend group in /frontend with 6 updates by @dependabot[bot] in #1476
- fix(license_plate_recognition): plate_expired() signature mismatch by @kilodelta1 in #1454
- feat(docs): announce discord link across docs and frontend by @roflcoopter in #1477
- feat(ci): disable rpi3 builds by @roflcoopter in #1478
- fix(nvr): pass SharedFrame to stream handler instead of numpy array by @roflcoopter in #1480
- feat(core): move event db persisting off main thraid by @roflcoopter in #1481
- fix: transcode browser-incompatible recording codecs by @mvanhorn in #1483
- feat(data_stream): refactor data stream bus by @roflcoopter in #1482
- fix(ffmpeg): fix ffmpeg filter drawtext by @roflcoopter in #1484
- Fix memory leak during reconnects by @roflcoopter in #1488
- fix(camera): store bytes on SharedFrame to avoid leaks by @roflcoopter in #1489
- build(deps): bump the python group with 2 updates by @dependabot[bot] in #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 #1492
- build(deps): bump the frontend group in /frontend with 11 updates by @dependabot[bot] in #1493
- ONVIF Profile S, Actions API, and PTZ Controls Implementation by @kaburagisec in #1205
- Memory optimizations using forkserver by @roflcoopter in #1496
- Better Events icon by @kaburagisec in #1491
- build(deps): bump fast-uri from 3.1.5 to 3.1.7 in /frontend by @dependabot[bot] in #1504
- build(deps): bump fast-uri from 3.1.5 to 3.1.7 in /docs by @dependabot[bot] in #1505
- fix(core): validate entity owner by @roflcoopter in #1507
- build(deps): bump the python group with 5 updates by @dependabot[bot] in #1511
- build(deps): bump the docs group in /docs with 6 updates by @dependabot[bot] in #1509
- build(deps): bump the frontend group in /frontend with 11 updates by @dependabot[bot] in #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 #1508
- build(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 in /frontend by @dependabot[bot] in #1506
- Systems Logs in Frontend Implementation by @kaburagisec in #1503
- build(deps-dev): bump the frontend-security group across 1 directory with 2 updates by @dependabot[bot] in #1512
- Fix timezone-dependent failures in tokens.test.ts by @lbellows in #1501
- Show a loading indicator for the first camera snapshot by @lbellows in #1499
- feat(ci): run amd64 container smoke tests in github actions by @roflcoopter in #1513
- fix(recordings): make sure startLoad is called in HlsVodPlayer by @roflcoopter in #1521
- feat(demo): add frontend demo setup by @roflcoopter in #1520
- docs(logging): add frontend docs and screenshot by @roflcoopter in #1523
- Screenshot CI job by @roflcoopter in #1526
- fix: quote environment and Postgres paths in Docker init by @lbellows in #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 #1514
- build(deps): bump the docs group in /docs with 3 updates by @dependabot[bot] in #1515
- build(deps): bump the python group across 1 directory with 5 updates by @dependabot[bot] in #1518
- build(deps): bump the frontend-security group across 1 directory with 3 updates by @dependabot[bot] in #1524
- build(deps): bump the docs-security group across 1 directory with 7 updates by @dependabot[bot] in #1525
- build(deps): bump the frontend group across 1 directory with 18 updates by @dependabot[bot] in #1528
- fix: do not let /files query params rewrite into arbitrary directories by @lbellows in #1487
- Fix frontend vitest suite on Node >= 22 (web storage globals) by @lbellows in #1500
- Better PWA configurations by @kaburagisec in #1527
- build(deps): bump the docs-security group across 1 directory with 2 updates by @dependabot[bot] in #1530
- feat(demo): mock users endpoint by @roflcoopter in #1529
- fix(build): improve agent cleanup by @roflcoopter in #1533
- fix(auth): make sure hashed passwords are not exposed over the api by @roflcoopter in #1534
- fix(fragmenter): stop/start fragmenter along with camera by @roflcoopter in #1540
- fix(auth): close ws connections on revocation by @roflcoopter in #1543
- build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #1536
- build(deps-dev): bump the docs group in /docs with 5 updates by @dependabot[bot] in #1537
- build(deps): bump the frontend group in /frontend with 11 updates by @dependabot[bot] in #1538
- fix(hls): get init.mp4 path from lowest tier by @roflcoopter in #1544
- fix(onboarding): harden onboarding flow by @roflcoopter in #1545
- merge master to dev by @roflcoopter in #1546
- Revert "fix(hls): get init.mp4 path from lowest tier" by @roflcoopter in #1547
- Revert "fix(hls): get init.mp4 path from lowest tier" by @roflcoopter in #1548
- fix(hls): get init.mp4 from lowest tier by @roflcoopter in #1549
- merge master to dev by @roflcoopter in #1550
- feat(object_detector): store latest snapshot by @roflcoopter in #1552
- docs(ptz): add PTZ controls screenshot by @roflcoopter in #1553
- 3.7.0 by @roflcoopter in #1554
New Contributors
- @kilodelta1 made their first contribution in #1431
- @lbellows made their first contribution in #1501
Full Changelog: v3.6.2...v3.7.0