The main highlights of this release are camera tuning in the frontend, manual recordings, and improved MQTT support. Additionally, there are various performance optimizations and fixes.
Breaking changes
CUDA has been upgraded to 12.9.1.
If you run the roflcoopter/amd64-cuda-viseron image, it may cause compatibility issues if you are using an older version on your system. Please make sure to update your host if you experience any issues.
New features
Camera tuning
Camera tuning allows you to adjust various settings of a camera directly in the frontend.
Not all options are available yet but that is the long-term plan.
Another welcome change to this feature is that you can now draw masks directly in the frontend, instead of having to use external tools to generate the masks and then pasting it into the config.yaml. This makes it much easier to set up motion detection areas and ignore areas.
Note that you still need to restart Viseron after changing the settings for the changes to take effect.
The next release will include hot reloading of all settings to make this process more seamless.
Most code is already in place for this but it has not been exposed to the frontend properly yet.
Documentation on this feature can be found here
A big shoutout to @kaburagisec who contributed the camera tuning!
Manual recordings
You can now start and stop recordings manually from the frontend, via MQTT and through Telegram.
Visual feedback is provided when a recording is ongoing as well.
Documentation on this feature can be found here
Camera toggle in frontend
There is now a camera toggle in the frontend to stop/start cameras on-demand:
Profile page
A new profile page has been added to the frontend where users can set their preferences for the frontend.
This currently only supports setting the users display name and timezone but will be expanded in the future to include more settings like language and date format.
Other notable features
- External DB support for PostgreSQL. Documentation is available here
- New config option
base_topicformqttto set the base topic for all MQTT messages. Still defaults to the valueclient_idif not set. - New config option
publish_states_on_reconnect(default: true) formqttto control if MQTT state messages should be re-published on reconnect. This is useful to not miss state updates that happened during downtime or if using an MQTT broker that does not persist messages. - New config option
publish_ha_config_on_reconnect(default: false) formqttto control if Home Assistant MQTT discovery config messages should be re-published on reconnect. This is useful if using an MQTT broker that does not persist messages. - MJPEG camera sources are now automatically transcoded to be compatible with HLS streaming.
Changes
- Ruamel YAML is now used for parsing the configuration file instead of PyYAML. This allows for preserving comments and formatting in the config file.
- Recordings on the Recordings pages are now using HLS.js for playback instead of Video.js. This improves compatibility across browsers and devices, and provides a more uniform playback experience.
- Uses
default_entity_idinmqttinstead ofobject_idwhen publishing Home Assistant MQTT discovery messages, since the latter is deprecated.
Fixes
- Fixes an issue where multiple API calls were re-fetching the same data unnecessarily, improving performance.
- Camera segment fragmenter no longer runs for stopped cameras, reducing CPU usage.
- Fixes a problem where cameras that were disconnected never properly reconnected. Closes #1164
- Fixes a problem where the segment process that is spawned when using a substream was not monitored correctly, leading to missing recordings in case of crashes. Closes #1215
- Upgrades HLS.js to version 1.6.15, which includes a fix to #1106
- Fixes segmentation faults on some models for the YOLO component
mog2motion detector no longer triggers motion during startup.
Developer experience
- Framework for generating screenshots for documentation added, using Playwright
- Slight changes to the developer environment setup instructions for VS Code
Docker images will be on Docker Hub shortly
All changes
- YOLO component documentation now indicates model_path is required by @john- in #1170
- Manual recordings by @roflcoopter in #1172
- Master by @roflcoopter in #1183
- Feature/dev container install docs by @roflcoopter in #1186
- use ruamel instead of PyYAML by @roflcoopter in #1187
- Add Camera Tuning Implementation (Tuning Interface, Zone/Mask Drawer Tool, Labels Editor, OSD Texts, and Miscellaneous UI) by @kaburagisec in #1165
- Playwright screenshot updater by @roflcoopter in #1189
- fix syntax in mqtt docs by @roflcoopter in #1190
- Start manual recording via live player by @roflcoopter in #1193
- set max-old-space-size in azure builds to avoid out of memory issues by @roflcoopter in #1195
- Frontend performance improvements (session expiry, onboarding, useEffect's) by @roflcoopter in #1196
- support using an external postgres database by @roflcoopter in #1197
- Start and stop cameras from frontend by @roflcoopter in #1198
- add manual recording button to MJPEG player by @roflcoopter in #1199
- improve ffmpeg camera stopping mechanism by @roflcoopter in #1200
- ignore fragmenting commands when camera is stopped by @roflcoopter in #1201
- add docs on live player context menu by @roflcoopter in #1203
- add recreate_db script by @roflcoopter in #1204
- replace object_id with default_entity_id for home assistant MQTT entities by @roflcoopter in #1208
- User profile page by @roflcoopter in #1211
- Several Frontend Refactoring by @kaburagisec in #1212
- Feature/ffmpeg segments monitor by @roflcoopter in #1215
- feat(mqtt): publish states on broker reconnect by @roflcoopter in #1216
- feat(mqtt): allow setting base_topic directly by @roflcoopter in #1217
- Remove VideoJS by @roflcoopter in #1219
- feat(ui): upgrade hls.js to 1.6.15 by @roflcoopter in #1221
- refactor(ui): fix all circular dependencies by @roflcoopter in #1222
- fix(api/hls): track target duration for hls client by @roflcoopter in #1223
- Support iOS Fullscreen for new recordings player by @roflcoopter in #1224
- refator(backend): remove all direct usage of DataStream by @roflcoopter in #1230
- Update YOLO component Ultralytics library to v8.4.2 by @john- in #1229
- feat(motion_detector): add unload support by @roflcoopter in #1232
- refactor(backend): add domain registry by @roflcoopter in #1233
- refactor(backend): keep track of entity owner component/domain by @roflcoopter in #1234
- refactor(backend): start using DomainRegistry by @roflcoopter in #1237
- refactor(backend): prepare for full typing of vis.data by @roflcoopter in #1239
- fix(domains): make registered domain event publish EventData by @roflcoopter in #1240
- Domain unload functionality by @roflcoopter in #1241
- feat(domains): add method to reload domains and dependencies by @roflcoopter in #1245
- Test cases for yolo component by @john- in #1243
- Introduce setup_domains for components by @roflcoopter in #1246
- feat(nvr): prepare nvr for config reload by @roflcoopter in #1250
- feat(object_detector): prepare object detector for config reload by @roflcoopter in #1251
- Config diffing by @roflcoopter in #1252
- fix(domains): cancel retries using a threading event by @roflcoopter in #1253
- feat(tests): update pytest to 9.0.2 by @roflcoopter in #1254
- feat(tests): add test suite for component setup by @roflcoopter in #1256
- Config reload orchestrator by @roflcoopter in #1257
- Pylint changes by @roflcoopter in #1260
- Config reload support for camera domain by @roflcoopter in #1266
- fix(reload): make sure failed deps are reloaded when an identifier is added by @roflcoopter in #1267
- Support reloading for all domain base classes by @roflcoopter in #1268
- fix(reload): reload deps of newly added identifiers by @roflcoopter in #1269
- feat(compreface): support config reload by @roflcoopter in #1271
- feat(darknet): support config reload by @roflcoopter in #1272
- Discord reload by @roflcoopter in #1273
- feat(gstreamer): support config reload by @roflcoopter in #1276
- feat(dlib): support config reload by @roflcoopter in #1275
- feat(hailo): support config reload by @roflcoopter in #1279
- feat(go2rtc): support config reload by @roflcoopter in #1281
- feat(gotify): support config reload by @roflcoopter in #1282
- feat(ffmpeg): support config reload by @roflcoopter in #1280
- fix(ffmpeg) auto transcode to h264 for mjpeg sources by @roflcoopter in #1283
- fix(ffmpeg): handle UNDEFINED in encoder_tuning_args by @roflcoopter in #1285
- fix(ffmpeg): add stdin to RestartablePopen calls by @roflcoopter in #1286
- feat(mqtt): support config reload by @roflcoopter in #1287
- fix(mog2): avoid triggering motion on first frame by @roflcoopter in #1288
- fix(nvr): correctly log first frame and typing updates by @roflcoopter in #1289
- fix(yolo): fix segmentation fault for some models by @roflcoopter in #1290
- feat(webhook): support config reload by @roflcoopter in #1292
- feat(reload): changes to default components require restart by @roflcoopter in #1293
- feat(docker): upgrade cuda to 12.9.1 by @roflcoopter in #1294
- feat(docs): add docs on camera arm/disarm toggle by @roflcoopter in #1295
- feat(docs): add profle page screenshot by @roflcoopter in #1296
- feat(docs): add basic camera tuning docs by @roflcoopter in #1298
Full Changelog: v3.4.1...v3.5.0