Viseron
Self-hosted, local-only NVR and AI computer vision software
Alternative to: ring, nest, wyze
v3.2.0
2025-07-17Proper live streaming is now available in Viseron, utilizing the great go2rtc application.
Previously Viseron resorted to using the MJPEG stream for live streaming, which results in low quality and high latency.
With the new go2rtc component, Viseron can now stream using WebRTC or MSE, which gives a much better experience.
The new Live page is available at /live and can be accessed from the sidebar.
The Live page is very similar to the Events page, using the same responsiveness so that you can view multiple cameras at once.
In order to use it, you will need to update your configuration to include the new go2rtc component.

Breaking changes
portinwebserveris now deprecated. In order to support the newgo2rtcstreaming server, an NGINX reverse proxy is now included in the container, which listens to the old default port8888
New features
- A new Live Page is now available, which allows for better live streaming and support for more protocols.
- The Live Page is available at
/liveand can be accessed from the main menu. It utilizes the newgo2rtccomponent to support WebRTC/MSE streaming. - The MJPEG stream can now be accessed at the Live page by using the toggle in the extra options menu of the video player.
- The Live Page is available at
- A new
go2rtcstreaming server is now included in the container. This allows for better live streaming and support for more protocols. - NGINX reverse proxy - A reverse proxy is now included in the container to enhance performance and provide live streaming through
go2rtc. - A new
YOLOcomponent which uses Ultralytics YOLOv8 for object detection is now available. - You can now directly go to a specific timestamp on Events Page by using query parameters. More information on this can be found in the documentation.
- The EdgeTPU component can now utilize multiple EdgeTPU devices for better performance. See the updated documentation for more information.
- Fullscreen button is now available on the Events Page (and the new Live Page) to allow for a better viewing experience. Does not work in iOS, because Apple.
- New way to calculate which files to move or delete in the tiered storage system.
The new implementation uses numpy instead of pure SQL queries, which should improve performance at the cost of slightly (temporary) increased memory usage.
You can limit the CPU usage of this calculation by setting the new
tier_check_cpu_limitconfig option. You can further tune the workload using the config optionstier_check_batch_size,tier_check_sleep_between_batchesandtier_check_workers.
Changes
- HLS.js upgraded to 1.6.2
- If you have a substream with different resolution than the main stream, the video player now gets the correct resolution from the main stream
- EdgeTPU devices will now be restarted in case of multiple errors, helping to recover from temporary issues.
- Segment processing is now done in a separate process, for better performance and stability of the main process.
- Some unusual circumstances may cause the size based cleanup to fail. If thats the case and the first tier is full, a tier check as well as a cleanup job will be scheduled to remedy that.
Fixes
- Camera name overlapping the video stream controls on the Events Page
- PTZ component failing to initialize due to missing devicemgmt.wsdl file
- Fix for DeepStack face recognition not working
- Includes
coco.namesfile in the RPI3 build, which is required for the Darknet object detection model. - Properly resubscribe to MQTT topics when the connection is lost.
Developer experience
- Fixes a long standing issue with the Devcontaner failing to start due to a missing config folder.
When cloning using the instructions in the Developer docs, the config folder was not present on the host since
cloneInVolumewas used. The config folder is now dynamically set to the correct path in the Devcontainer using the env variableVISERON_CONFIG_PATH.
Docker images will be on Docker Hub shortly
All Changes
- pin gpac version to 2.4.0 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/983
- set requested timestamp from query parameter by @roflcoopter in https://github.com/roflcoopter/viseron/pull/984
- expose main stream resolution to get correct aspect ratio for streams by @roflcoopter in https://github.com/roflcoopter/viseron/pull/988
- ptz: find location of .wsdl file by @roflcoopter in https://github.com/roflcoopter/viseron/pull/989
- Go2rtc and NGINX by @roflcoopter in https://github.com/roflcoopter/viseron/pull/991
- implement EdgeTPU support for multiple devices by @roflcoopter in https://github.com/roflcoopter/viseron/pull/992
- add title to config.yaml code blocks by @roflcoopter in https://github.com/roflcoopter/viseron/pull/993
- edgetpu restart on failure by @roflcoopter in https://github.com/roflcoopter/viseron/pull/994
- read frames in subprocess by @roflcoopter in https://github.com/roflcoopter/viseron/pull/995
- merge master back into dev by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1002
- Live page by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1007
- run fragmenter in subprocess by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1008
- trigger tier check when fragmenter cant move file to first tier by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1014
- remove config bind mount and change its location in devcontainer by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1015
- upgrade to hls.js 1.6.5 by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1017
- camera snapshot auth using cookies by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1016
- add ssh to devcontainer by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1022
- properly close queues in ChildProcessWorker by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1023
- wrap start of queue manager server in a lock by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1024
- include logo as png by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1025
- catch TypeError in duplicate log filter by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1026
- update throttling mechanism with unique throttle key by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1028
- add index to Files table to improve tier check performance by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1029
- make sure only one cleanup job can be started at a time by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1032
- delete unneeded binaries and docker images in ci by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1037
- fix timing issue with _concatenate_fragements by @john- in https://github.com/roflcoopter/viseron/pull/1039
- Tier check file processing by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1040
- copy coco.names to rpi image by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1042
- fix: update deepstack face detection coordinates to use correct keys by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1041
- yolo component by @john- in https://github.com/roflcoopter/viseron/pull/1033
- extract tag from docker compose file before tagging by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1043
- resub on mqtt reconnection by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1046
- make mjpeg stream viewable from Live page by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1047
- force pytorch CPU install in CI by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1048
- cap HLS error to max 200 chars by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1051
- enable react query retries by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1052
- fix cleanup jobs to run on all tier paths by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1053
- add live view documentation by @roflcoopter in https://github.com/roflcoopter/viseron/pull/1054
New Contributors
- @john- made their first contribution in https://github.com/roflcoopter/viseron/pull/1039
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.1.2…v3.2.0