tag:github.com,2008:https://github.com/roflcoopter/viseron/releasesRelease notes from viseron2025-08-25T06:29:49Ztag:github.com,2008:Repository/291498455/v3.2.32025-08-25T06:33:33Z3.2.3 - Hotfix for camera disconnections<p>This release adresses the issues <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3304176550" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1075" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1075/hovercard" href="https://github.com/roflcoopter/viseron/issues/1075">#1075</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3304395969" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1076" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1076/hovercard" href="https://github.com/roflcoopter/viseron/issues/1076">#1076</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3349426158" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1096" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1096/hovercard" href="https://github.com/roflcoopter/viseron/issues/1096">#1096</a></p>
<p>When a camera disconnected, the retry loop would sometimes get stuck, leaving cameras disconnected</p>
<p>Note: This is a re-release to trigger new builds due to failures of the previous one</p>
<h2>What's Changed</h2>
<ul>
<li>fix race condition when stopping and starting a camera rapidly by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3349871043" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1097" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1097/hovercard" href="https://github.com/roflcoopter/viseron/pull/1097">#1097</a></li>
<li>attempt to free up space on azure agent by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3350613941" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1098" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1098/hovercard" href="https://github.com/roflcoopter/viseron/pull/1098">#1098</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.2.1...v3.2.3"><tt>v3.2.1...v3.2.3</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.2.22025-08-24T20:41:10Z3.2.2 - Hotfix for camera disconnections<p>This release adresses the issues <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3304176550" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1075" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1075/hovercard" href="https://github.com/roflcoopter/viseron/issues/1075">#1075</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3304395969" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1076" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1076/hovercard" href="https://github.com/roflcoopter/viseron/issues/1076">#1076</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3349426158" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1096" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1096/hovercard" href="https://github.com/roflcoopter/viseron/issues/1096">#1096</a></p>
<p>When a camera disconnected, the retry loop would sometimes get stuck, leaving cameras disconnected</p>
<h2>What's Changed</h2>
<ul>
<li>fix race condition when stopping and starting a camera rapidly by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3349871043" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1097" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1097/hovercard" href="https://github.com/roflcoopter/viseron/pull/1097">#1097</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.2.1...v3.2.2"><tt>v3.2.1...v3.2.2</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.2.12025-08-03T22:07:19Z3.2.1 - Hotfix for tier check exception<p>This release addresses the issue with the uncaught exception in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3285843489" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1068" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1068/hovercard" href="https://github.com/roflcoopter/viseron/issues/1068">#1068</a>, which also caused object detection to stop working in some circumstances</p>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.2.0...v3.2.1"><tt>v3.2.0...v3.2.1</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.2.02025-07-17T18:26:30Z3.2.0 - Proper live streaming<p>Proper live streaming is now available in Viseron, utilizing the great <a href="https://github.com/AlexxIT/go2rtc">go2rtc</a> application.<br>
Previously Viseron resorted to using the MJPEG stream for live streaming, which results in low quality and high latency.<br>
With the new <a href="https://viseron.netlify.app/components-explorer/components/go2rtc" rel="nofollow"><code>go2rtc</code> component</a>, Viseron can now stream using WebRTC or MSE, which gives a much better experience.<br>
The new Live page is available at <code>/live</code> and can be accessed from the sidebar.<br>
The Live page is very similar to the Events page, using the same responsiveness so that you can view multiple cameras at once.</p>
<p>In order to use it, you will need to update your configuration to include the new <a href="https://viseron.netlify.app/components-explorer/components/go2rtc" rel="nofollow"><code>go2rtc</code> component</a>.</p>
<p><a target="_blank" rel="noopener noreferrer" href="https://github.com/roflcoopter/viseron/blob/dev/docs/static/img/screenshots/Viseron-screenshot-live.png"><img src="https://github.com/roflcoopter/viseron/raw/dev/docs/static/img/screenshots/Viseron-screenshot-live.png" alt="" style="max-width: 100%;"></a></p>
<h2>Breaking changes</h2>
<ul>
<li><code>port</code> in <code>webserver</code> is now deprecated. In order to support the new <code>go2rtc</code> streaming server, an NGINX reverse proxy is now included in the container, which listens to the old default port <code>8888</code></li>
</ul>
<h2>New features</h2>
<ul>
<li>A new Live Page is now available, which allows for better live streaming and support for more protocols.
<ul>
<li>The Live Page is available at <code>/live</code> and can be accessed from the main menu. It utilizes the new <a href="https://viseron.netlify.app/components-explorer/components/go2rtc" rel="nofollow"><code>go2rtc</code> component</a> to support WebRTC/MSE streaming.</li>
<li>The MJPEG stream can now be accessed at the Live page by using the toggle in the extra options menu of the video player.</li>
</ul>
</li>
<li>A new <code>go2rtc</code> streaming server is now included in the container. This allows for better live streaming and support for more protocols.</li>
<li>NGINX reverse proxy - A reverse proxy is now included in the container to enhance performance and provide live streaming through <code>go2rtc</code>.</li>
<li>A new <code>YOLO</code>component which uses Ultralytics YOLOv8 for object detection is now available.</li>
<li>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 <a href="https://viseron.netlify.app/docs/documentation/configuration/recordings#events-page-query-parameters" rel="nofollow">documentation</a>.</li>
<li>The EdgeTPU component can now utilize multiple EdgeTPU devices for better performance. See the updated <a href="https://viseron.netlify.app/components-explorer/components/edgetpu#using-multiple-coral-edgetpu-devices" rel="nofollow">documentation</a> for more information.</li>
<li>Fullscreen button is now available on the Events Page (and the new Live Page) to allow for a better viewing experience.<br>
Does not work in iOS, because Apple.</li>
<li>New way to calculate which files to move or delete in the tiered storage system.<br>
The new implementation uses numpy instead of pure SQL queries, which should improve performance at the cost of slightly (temporary) increased memory usage.<br>
You can limit the CPU usage of this calculation by setting the new <code>tier_check_cpu_limit</code> config option.<br>
You can further tune the workload using the config options <code>tier_check_batch_size</code>, <code>tier_check_sleep_between_batches</code> and <code>tier_check_workers</code>.</li>
</ul>
<h2>Changes</h2>
<ul>
<li>HLS.js upgraded to 1.6.2</li>
<li>If you have a substream with different resolution than the main stream, the video player now gets the correct resolution from the main stream</li>
<li>EdgeTPU devices will now be restarted in case of multiple errors, helping to recover from temporary issues.</li>
<li>Segment processing is now done in a separate process, for better performance and stability of the main process.</li>
<li>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.</li>
</ul>
<h2>Fixes</h2>
<ul>
<li>Camera name overlapping the video stream controls on the Events Page</li>
<li>PTZ component failing to initialize due to missing devicemgmt.wsdl file</li>
<li>Fix for DeepStack face recognition not working</li>
<li>Includes <code>coco.names</code> file in the RPI3 build, which is required for the Darknet object detection model.</li>
<li>Properly resubscribe to MQTT topics when the connection is lost.</li>
</ul>
<h2>Developer experience</h2>
<ul>
<li>Fixes a long standing issue with the Devcontaner failing to start due to a missing config folder.<br>
When cloning using the instructions in the Developer docs, the config folder was not present on the host since <code>cloneInVolume</code> was used.<br>
The config folder is now dynamically set to the correct path in the Devcontainer using the env variable <code>VISERON_CONFIG_PATH</code>.</li>
</ul>
<p>Docker images will be on Docker Hub shortly</p>
<h2>All Changes</h2>
<ul>
<li>pin gpac version to 2.4.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3005591534" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/983" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/983/hovercard" href="https://github.com/roflcoopter/viseron/pull/983">#983</a></li>
<li>set requested timestamp from query parameter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3005607176" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/984" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/984/hovercard" href="https://github.com/roflcoopter/viseron/pull/984">#984</a></li>
<li>expose main stream resolution to get correct aspect ratio for streams by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3012103471" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/988" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/988/hovercard" href="https://github.com/roflcoopter/viseron/pull/988">#988</a></li>
<li>ptz: find location of .wsdl file by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3014320894" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/989" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/989/hovercard" href="https://github.com/roflcoopter/viseron/pull/989">#989</a></li>
<li>Go2rtc and NGINX by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3036605928" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/991" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/991/hovercard" href="https://github.com/roflcoopter/viseron/pull/991">#991</a></li>
<li>implement EdgeTPU support for multiple devices by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3036818410" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/992" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/992/hovercard" href="https://github.com/roflcoopter/viseron/pull/992">#992</a></li>
<li>add title to config.yaml code blocks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3036831367" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/993" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/993/hovercard" href="https://github.com/roflcoopter/viseron/pull/993">#993</a></li>
<li>edgetpu restart on failure by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3036840644" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/994" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/994/hovercard" href="https://github.com/roflcoopter/viseron/pull/994">#994</a></li>
<li>read frames in subprocess by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3037577960" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/995" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/995/hovercard" href="https://github.com/roflcoopter/viseron/pull/995">#995</a></li>
<li>merge master back into dev by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3065197332" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1002" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1002/hovercard" href="https://github.com/roflcoopter/viseron/pull/1002">#1002</a></li>
<li>Live page by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3083179851" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1007" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1007/hovercard" href="https://github.com/roflcoopter/viseron/pull/1007">#1007</a></li>
<li>run fragmenter in subprocess by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3086521313" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1008" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1008/hovercard" href="https://github.com/roflcoopter/viseron/pull/1008">#1008</a></li>
<li>trigger tier check when fragmenter cant move file to first tier by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3136625060" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1014" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1014/hovercard" href="https://github.com/roflcoopter/viseron/pull/1014">#1014</a></li>
<li>remove config bind mount and change its location in devcontainer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3142565685" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1015" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1015/hovercard" href="https://github.com/roflcoopter/viseron/pull/1015">#1015</a></li>
<li>upgrade to hls.js 1.6.5 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3143214395" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1017" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1017/hovercard" href="https://github.com/roflcoopter/viseron/pull/1017">#1017</a></li>
<li>camera snapshot auth using cookies by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3143192641" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1016" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1016/hovercard" href="https://github.com/roflcoopter/viseron/pull/1016">#1016</a></li>
<li>add ssh to devcontainer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3153271701" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1022" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1022/hovercard" href="https://github.com/roflcoopter/viseron/pull/1022">#1022</a></li>
<li>properly close queues in ChildProcessWorker by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3153297198" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1023" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1023/hovercard" href="https://github.com/roflcoopter/viseron/pull/1023">#1023</a></li>
<li>wrap start of queue manager server in a lock by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3153310032" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1024" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1024/hovercard" href="https://github.com/roflcoopter/viseron/pull/1024">#1024</a></li>
<li>include logo as png by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3153383026" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1025" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1025/hovercard" href="https://github.com/roflcoopter/viseron/pull/1025">#1025</a></li>
<li>catch TypeError in duplicate log filter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3155551011" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1026" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1026/hovercard" href="https://github.com/roflcoopter/viseron/pull/1026">#1026</a></li>
<li>update throttling mechanism with unique throttle key by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3159134153" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1028" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1028/hovercard" href="https://github.com/roflcoopter/viseron/pull/1028">#1028</a></li>
<li>add index to Files table to improve tier check performance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3160203301" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1029" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1029/hovercard" href="https://github.com/roflcoopter/viseron/pull/1029">#1029</a></li>
<li>make sure only one cleanup job can be started at a time by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3164927201" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1032" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1032/hovercard" href="https://github.com/roflcoopter/viseron/pull/1032">#1032</a></li>
<li>delete unneeded binaries and docker images in ci by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3168329796" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1037" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1037/hovercard" href="https://github.com/roflcoopter/viseron/pull/1037">#1037</a></li>
<li>fix timing issue with _concatenate_fragements by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/john-/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/john-">@john-</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186667534" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1039" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1039/hovercard" href="https://github.com/roflcoopter/viseron/pull/1039">#1039</a></li>
<li>Tier check file processing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187798631" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1040" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1040/hovercard" href="https://github.com/roflcoopter/viseron/pull/1040">#1040</a></li>
<li>copy coco.names to rpi image by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3188273999" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1042" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1042/hovercard" href="https://github.com/roflcoopter/viseron/pull/1042">#1042</a></li>
<li>fix: update deepstack face detection coordinates to use correct keys by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3188260267" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1041" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1041/hovercard" href="https://github.com/roflcoopter/viseron/pull/1041">#1041</a></li>
<li>yolo component by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/john-/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/john-">@john-</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3166125416" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1033" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1033/hovercard" href="https://github.com/roflcoopter/viseron/pull/1033">#1033</a></li>
<li>extract tag from docker compose file before tagging by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3191177491" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1043" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1043/hovercard" href="https://github.com/roflcoopter/viseron/pull/1043">#1043</a></li>
<li>resub on mqtt reconnection by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3206440336" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1046" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1046/hovercard" href="https://github.com/roflcoopter/viseron/pull/1046">#1046</a></li>
<li>make mjpeg stream viewable from Live page by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3218937531" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1047" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1047/hovercard" href="https://github.com/roflcoopter/viseron/pull/1047">#1047</a></li>
<li>force pytorch CPU install in CI by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3220409898" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1048" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1048/hovercard" href="https://github.com/roflcoopter/viseron/pull/1048">#1048</a></li>
<li>cap HLS error to max 200 chars by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3223008003" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1051" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1051/hovercard" href="https://github.com/roflcoopter/viseron/pull/1051">#1051</a></li>
<li>enable react query retries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3223011879" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1052" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1052/hovercard" href="https://github.com/roflcoopter/viseron/pull/1052">#1052</a></li>
<li>fix cleanup jobs to run on all tier paths by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3225138795" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1053" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1053/hovercard" href="https://github.com/roflcoopter/viseron/pull/1053">#1053</a></li>
<li>add live view documentation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3225275834" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1054" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1054/hovercard" href="https://github.com/roflcoopter/viseron/pull/1054">#1054</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/john-/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/john-">@john-</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186667534" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1039" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/1039/hovercard" href="https://github.com/roflcoopter/viseron/pull/1039">#1039</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.1.2...v3.2.0"><tt>v3.1.2...v3.2.0</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.1.22025-05-15T06:45:03Z3.1.2 - EdgeTPU Image classification fix<p>Resolves an issue with EdgeTPU image classification which caused it to not function at all. Closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3057716278" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/1000" data-hovercard-type="issue" data-hovercard-url="/roflcoopter/viseron/issues/1000/hovercard" href="https://github.com/roflcoopter/viseron/issues/1000">#1000</a></p>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.1.1...v3.1.2"><tt>v3.1.1...v3.1.2</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.1.12025-04-17T20:49:01Z3.1.1 - Camera storage config fix<p>Hotfix release to resolve an issue where you couldnt specify <code>recorder</code> or <code>snapshots</code> without also specifying the other under a cameras <code>storage</code> config</p>
<h2>What's Changed</h2>
<ul>
<li>fix undefined check for recorder and snapshot tiers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3002400865" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/981" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/981/hovercard" href="https://github.com/roflcoopter/viseron/pull/981">#981</a></li>
<li>3.1.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3003412854" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/982" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/982/hovercard" href="https://github.com/roflcoopter/viseron/pull/982">#982</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.1.0...v3.1.1"><tt>v3.1.0...v3.1.1</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.1.02025-04-16T10:01:51Z3.1.0 - User and Role Management<p>Multiple users, finally! Viseron has had authentication for quite some time, but you could only create one initial admin user during the onboarding.</p>
<p>This release brings a new <code>User mangement</code> page to the frontend, and with it a new <code>Settings</code> page.<br>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/26493864/434166910-9e9652a8-e8fd-4ba9-b281-3254a76d05bf.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQxNjY5MTAtOWU5NjUyYTgtZThmZC00YmE5LWIyODEtMzI1NGE3NmQwNWJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBmZTc5MjcxNjcxZTEwNTMyM2E0MmRhODQ1OTZhODNhMGEzN2Q4OTdjNDI1OGE1YTQzNGYxOTgxNzQyYzYzOWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.C3NFknSkzivuvOgxKyD8BYF9NeGJU4bvdpCpp9kAGmY"><img src="https://private-user-images.githubusercontent.com/26493864/434166910-9e9652a8-e8fd-4ba9-b281-3254a76d05bf.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQxNjY5MTAtOWU5NjUyYTgtZThmZC00YmE5LWIyODEtMzI1NGE3NmQwNWJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBmZTc5MjcxNjcxZTEwNTMyM2E0MmRhODQ1OTZhODNhMGEzN2Q4OTdjNDI1OGE1YTQzNGYxOTgxNzQyYzYzOWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.C3NFknSkzivuvOgxKyD8BYF9NeGJU4bvdpCpp9kAGmY" alt="settings-page" content-type-secured-asset="image/png" style="max-width: 100%;"></a></p>
<h3>Roles</h3>
<p>Users can be assigned different roles: admin, write or read.<br>
See the updated documentation: <a href="https://viseron.netlify.app/docs/documentation/configuration/authentication#roles" rel="nofollow">https://viseron.netlify.app/docs/documentation/configuration/authentication#roles</a></p>
<h3>Assign cameras</h3>
<p>If you want to restrict what cameras each user can see, you can do so by assigning specific ones to each user.<br>
See the updated documentation: <a href="https://viseron.netlify.app/docs/documentation/configuration/authentication#assigning-cameras" rel="nofollow">https://viseron.netlify.app/docs/documentation/configuration/authentication#assigning-cameras</a><br>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/26493864/434231989-4694cacd-c08e-4b9d-9989-f0511b1e43a0.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQyMzE5ODktNDY5NGNhY2QtYzA4ZS00YjlkLTk5ODktZjA1MTFiMWU0M2EwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQzNTFkODczNWQ2ZWFlNWE5NjM0Nzk1ZGY5YmNlNDA0M2E4ZTFmOWQ2NmUxNDk5OWRjZWFiMDI0NjhlZDk2MjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.umzoIMHHtI9hwbVuYgtU49nIc207dX1_SUFIyHJFzC8"><img src="https://private-user-images.githubusercontent.com/26493864/434231989-4694cacd-c08e-4b9d-9989-f0511b1e43a0.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQyMzE5ODktNDY5NGNhY2QtYzA4ZS00YjlkLTk5ODktZjA1MTFiMWU0M2EwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQzNTFkODczNWQ2ZWFlNWE5NjM0Nzk1ZGY5YmNlNDA0M2E4ZTFmOWQ2NmUxNDk5OWRjZWFiMDI0NjhlZDk2MjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.umzoIMHHtI9hwbVuYgtU49nIc207dX1_SUFIyHJFzC8" alt="image" content-type-secured-asset="image/png" style="max-width: 100%;"></a></p>
<h2>New features</h2>
<ul>
<li>Masks can now be configured for <code>Post processor</code>. They are configured the same way as masks for object/motion detection. A new config option <code>draw_post_processor_mask</code> is also available for the MJPEG streams in order to debug the masks</li>
<li>Discord notifications component, provided by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InterN0te/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InterN0te">@InterN0te</a></li>
<li>Gotify notifications component, provided by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InterN0te/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InterN0te">@InterN0te</a></li>
<li>New config option <code>use_last_snapshot_on_error</code> for FFmpeg/GStreamer. It allows for returning the previously retrieved snapshot for a camera incase of a flaky connection</li>
<li>New filter option on Events page to group cameras.<br>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/26493864/434232586-9dd853dc-3665-43d9-93c8-7652c00f5877.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQyMzI1ODYtOWRkODUzZGMtMzY2NS00M2Q5LTkzYzgtNzY1MmMwMGY1ODc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM1OTE0ZjhiZTYyNjMwMjFhMjQxYzk0MmE1ZDA2Y2JkYzVhYTA4YWVlNDQxYjI4ZmNkMTkwYzc0OTEzYjM0MDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.nKGDyXbcZ6jC0paCLQMnaL2mQmPoiuylG3BI2YO9vaA"><img src="https://private-user-images.githubusercontent.com/26493864/434232586-9dd853dc-3665-43d9-93c8-7652c00f5877.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQyMzI1ODYtOWRkODUzZGMtMzY2NS00M2Q5LTkzYzgtNzY1MmMwMGY1ODc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM1OTE0ZjhiZTYyNjMwMjFhMjQxYzk0MmE1ZDA2Y2JkYzVhYTA4YWVlNDQxYjI4ZmNkMTkwYzc0OTEzYjM0MDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.nKGDyXbcZ6jC0paCLQMnaL2mQmPoiuylG3BI2YO9vaA" alt="image" content-type-secured-asset="image/png" style="max-width: 100%;"></a></li>
<li>New filter option on Events page to adjust the requested timestamp with the configured lookback.<br>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/26493864/434232840-419a4cef-c847-4b3b-904a-3b9859b2becb.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQyMzI4NDAtNDE5YTRjZWYtYzg0Ny00YjNiLTkwNGEtM2I5ODU5YjJiZWNiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMwNzFlMDEzYzk0Zjk4Mzc5NTY0MjU2ZWJkZWQ1ZTc5MTBiMWQ2MmJmNmIxNTMwNTdlMTlmZmRhNjVmYjRhYWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IwLlHQsbTLqIQ9titCZjd1-9Q5M-SCN-IJYoSwzk7t4"><img src="https://private-user-images.githubusercontent.com/26493864/434232840-419a4cef-c847-4b3b-904a-3b9859b2becb.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTY4NDQ5ODEsIm5iZiI6MTc1Njg0NDY4MSwicGF0aCI6Ii8yNjQ5Mzg2NC80MzQyMzI4NDAtNDE5YTRjZWYtYzg0Ny00YjNiLTkwNGEtM2I5ODU5YjJiZWNiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTAyVDIwMjQ0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMwNzFlMDEzYzk0Zjk4Mzc5NTY0MjU2ZWJkZWQ1ZTc5MTBiMWQ2MmJmNmIxNTMwNTdlMTlmZmRhNjVmYjRhYWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IwLlHQsbTLqIQ9titCZjd1-9Q5M-SCN-IJYoSwzk7t4" alt="image" content-type-secured-asset="image/png" style="max-width: 100%;"></a></li>
</ul>
<h2>Fixes</h2>
<ul>
<li>Wait for file updates when shutting down and using <code>move_on_shutdown: true</code></li>
<li>Fix Docker compose documentation examples</li>
<li>Fix Codeproject AI Face recognition training. Previously faces were never recognized when training</li>
<li>Fix Compreface failing to start when <code>use_subjects</code> was set to <code>false</code></li>
<li>Avoid reloading page when submitting login form. This caused some issues where you sometimes had to login twice</li>
<li>Events are now properly sorted by timestamp in the details popup on the Events page</li>
<li>When clicking on an event in the Events page, a snapshots is shown instead of video if its not available.<br>
This calculation is now more forgiving and now has a 10 seconds grace period</li>
</ul>
<p>Docker images will be on Docker Hub shortly</p>
<h2>All Changes</h2>
<ul>
<li>fix typos in docker compose examples by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2922013448" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/930" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/930/hovercard" href="https://github.com/roflcoopter/viseron/pull/930">#930</a></li>
<li>catch OSError when closing ffmpeg pipe by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2922979647" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/935" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/935/hovercard" href="https://github.com/roflcoopter/viseron/pull/935">#935</a></li>
<li>make sure we wait for file size update timers on shutdown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2922979016" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/934" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/934/hovercard" href="https://github.com/roflcoopter/viseron/pull/934">#934</a></li>
<li>fix cpai face recognition training by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2924656851" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/939" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/939/hovercard" href="https://github.com/roflcoopter/viseron/pull/939">#939</a></li>
<li>new config option use_last_snapshot_on_error for still_image by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2924772607" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/940" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/940/hovercard" href="https://github.com/roflcoopter/viseron/pull/940">#940</a></li>
<li>fix mask image coordinates being reversed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2928586329" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/943" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/943/hovercard" href="https://github.com/roflcoopter/viseron/pull/943">#943</a></li>
<li>Add Notification Category to Components Explorer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InterN0te/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InterN0te">@InterN0te</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2933370993" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/947" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/947/hovercard" href="https://github.com/roflcoopter/viseron/pull/947">#947</a></li>
<li>Discord component for notifications by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InterN0te/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InterN0te">@InterN0te</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2929660104" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/944" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/944/hovercard" href="https://github.com/roflcoopter/viseron/pull/944">#944</a></li>
<li>Add Gotify notification component by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InterN0te/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InterN0te">@InterN0te</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2926857449" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/941" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/941/hovercard" href="https://github.com/roflcoopter/viseron/pull/941">#941</a></li>
<li>Post processor masks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2952837282" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/953" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/953/hovercard" href="https://github.com/roflcoopter/viseron/pull/953">#953</a></li>
<li>update docs on how to add timestamp to recorded video by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2952930098" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/954" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/954/hovercard" href="https://github.com/roflcoopter/viseron/pull/954">#954</a></li>
<li>allow for grouping events for different cameras by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2952993306" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/955" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/955/hovercard" href="https://github.com/roflcoopter/viseron/pull/955">#955</a></li>
<li>better handling of compreface initialization by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2962700041" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/962" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/962/hovercard" href="https://github.com/roflcoopter/viseron/pull/962">#962</a></li>
<li>User management by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2970356127" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/965" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/965/hovercard" href="https://github.com/roflcoopter/viseron/pull/965">#965</a></li>
<li>Feature/auth improvements by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2978643941" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/968" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/968/hovercard" href="https://github.com/roflcoopter/viseron/pull/968">#968</a></li>
<li>assign cameras to users by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2985312354" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/969" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/969/hovercard" href="https://github.com/roflcoopter/viseron/pull/969">#969</a></li>
<li>properly cleanup axios interceptor and add tests for AuthContext by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2985508457" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/970" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/970/hovercard" href="https://github.com/roflcoopter/viseron/pull/970">#970</a></li>
<li>updated required roles for some endpoints by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2992360106" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/972" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/972/hovercard" href="https://github.com/roflcoopter/viseron/pull/972">#972</a></li>
<li>docs: clarification on events and timeline by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2993978973" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/973" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/973/hovercard" href="https://github.com/roflcoopter/viseron/pull/973">#973</a></li>
<li>add lookback adjustment when clicking on an event by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2996079415" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/974" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/974/hovercard" href="https://github.com/roflcoopter/viseron/pull/974">#974</a></li>
<li>Fix event sorting on the Events page by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2996141347" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/975" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/975/hovercard" href="https://github.com/roflcoopter/viseron/pull/975">#975</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/InterN0te/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/InterN0te">@InterN0te</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2933370993" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/947" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/947/hovercard" href="https://github.com/roflcoopter/viseron/pull/947">#947</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.0.0...v3.1.0"><tt>v3.0.0...v3.1.0</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.0.02025-03-15T08:04:29Z3.0.0 - Continuous Recordings<p>This release is a big one. It mainly focuses on continuous recordings, but also includes a lot of other features and fixes.</p>
<p>I have been working on this release for a long time and I am very happy with the result. I hope you will enjoy it as much as I do.<br>
The release cadence has been very slow lately and for that I am sorry. I will try to make smaller releases more often in the future.</p>
<h2>Breaking changes</h2>
<ul>
<li>New docker volumes are required. Please see the updated <a href="https://viseron.netlify.app/docs/documentation/installation#running-viseron" rel="nofollow">docker documentation</a></li>
<li>Old recordings will not be compatible with the new version and wont be viewable in the UI</li>
<li>Files will no longer be stored in the <code>/recordings</code> folder, and should be removed from your docker volumes</li>
<li>Recordings are now in HLS format. If you need to have the recordings saved as full MP4 files you can use the new config option <code>create_event_clip</code>, or use the new <code>Export</code> feature in the UI.</li>
<li><code>mp4</code> file extension is now forced and <code>extension</code> is removed</li>
<li><code>segments_folder</code> is removed in favor of tier paths from the new <a href="https://viseron.netlify.app/components-explorer/components/storage" rel="nofollow"><code>storage</code> component</a></li>
<li>Thumbnails are now stored in <code>/thumbnails</code> folder (depending on the tier config)</li>
<li><code>filename_pattern</code> in <code>thumbnail</code> is removed, stored as ID of the recording</li>
<li><code>audio_codec</code> behavior changed. It is now only used as stream information. To transcode Audio, set <code>audio_codec</code> under <code>recorder</code></li>
<li><code>trigger_recorder</code> is removed in favor of <code>trigger_event_recording</code></li>
<li>The FFmpeg command has been changed, so if you use <code>raw_command</code> you need to update it</li>
</ul>
<h2>New features</h2>
<h3>24/7 recordings</h3>
<p>The main feature included in this release is the option of having 24/7 recordings.<br>
With this comes a new component, <code>storage</code> which will allow you to retain data based on time (like it is today) and based one consumed space.<br>
This allows you to use your storage to its maximum.</p>
<p>Documentation for how the recordings work can be found <a href="https://viseron.netlify.app/docs/documentation/configuration/recordings" rel="nofollow">here</a></p>
<p>Updated screenshots for the frontend can be found <a href="https://viseron.netlify.app/docs/documentation#screenshots" rel="nofollow">here</a></p>
<h3>Storage Tiers</h3>
<p>Another feature of the <code>storage</code> component are <code>tiers</code>.<br>
They allow you to store recordings on multiple media.<br>
Say you have one 256GB SSD and a 1TB HDD, you can keep the most recent recordings on the SSD for fast access while offloading the older recordings to the HDD for archiving.</p>
<h3>Timeline</h3>
<p>To easily view 24/7 recordings, a new Timeline view is available.<br>
It currently shows continuous recordings and different events such as motion, detected objects, face recognition etc.</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/88984f7da550dd389d3c684873adf57db77717b36b8d00ea38f6eb9e51b6e524/68747470733a2f2f76697365726f6e2e6e65746c6966792e6170702f696d672f73637265656e73686f74732f56697365726f6e2d73637265656e73686f742d6576656e74732d74696d656c696e652e706e67"><img src="https://camo.githubusercontent.com/88984f7da550dd389d3c684873adf57db77717b36b8d00ea38f6eb9e51b6e524/68747470733a2f2f76697365726f6e2e6e65746c6966792e6170702f696d672f73637265656e73686f74732f56697365726f6e2d73637265656e73686f742d6576656e74732d74696d656c696e652e706e67" alt="Timelineview" data-canonical-src="https://viseron.netlify.app/img/screenshots/Viseron-screenshot-events-timeline.png" style="max-width: 100%;"></a></p>
<h3>Events</h3>
<p>The Events view is a more concise view than the Timeline.<br>
Here you can scroll through and view all the Events.</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/fb1653d039c82285c9946269c9d650290f6972efb1fb5dbc90a23f35c07e0a8b/68747470733a2f2f76697365726f6e2e6e65746c6966792e6170702f696d672f73637265656e73686f74732f56697365726f6e2d73637265656e73686f742d6576656e74732d6576656e74732e706e67"><img src="https://camo.githubusercontent.com/fb1653d039c82285c9946269c9d650290f6972efb1fb5dbc90a23f35c07e0a8b/68747470733a2f2f76697365726f6e2e6e65746c6966792e6170702f696d672f73637265656e73686f74732f56697365726f6e2d73637265656e73686f742d6576656e74732d6576656e74732e706e67" alt="Events view" data-canonical-src="https://viseron.netlify.app/img/screenshots/Viseron-screenshot-events-events.png" style="max-width: 100%;"></a></p>
<h3>Other new features</h3>
<ul>
<li>A new safe mode has been added. If Viseron cant startup due to config errors, it will restore the last known good config and start up with a minimum amount of components. This will allow you to fix the config in the UI and restart Viseron without having to manually restore the config.</li>
<li>Allow empty password for cameras</li>
<li>A logfile is now created in the <code>/config</code> folder. This will allow you to see the logs without having to enter the container.</li>
<li>New telegram component provided by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smelis/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smelis">@smelis</a>, which allows sending of clips and thumbnails using Telegram.</li>
<li>New ptz component provided by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smelis/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smelis">@smelis</a>, which can be used by the Telegram component to control a camera.<br>
The PTZ functionality will be ported to the web UI as well at some point.</li>
<li><code>max_recording_time</code> has been added to the <code>recorder</code> component. This will allow you to set a maximum recording time for each recording. This is useful if you have a lot of motion events and want to keep the recordings short.</li>
<li><code>record_only</code> has been added to the <code>recorder</code> component. This will allow you to record without running any detectors.</li>
<li><code>still_image_width</code> and <code>still_image_height</code> has been added to the <code>camera</code> component. This will allow you to set the resolution of the still images.</li>
</ul>
<h2>Changes</h2>
<ul>
<li>A PostgreSQL database is now running inside the container. It is not possible to use an external database at the moment.</li>
<li>Upgraded to Ubuntu 22.04 which gives updated drivers to support newer hardware</li>
<li>Updated to React 18</li>
<li>Updated to Python 3.10</li>
<li>Updated to OpenCV 4.10.0</li>
<li>Updated to FFmpeg 5.1.2</li>
<li>Updated CUDA</li>
<li>Updated DLIB</li>
<li>Updated OpenCL</li>
<li>Updated VA-API</li>
<li>Updated all Python dependencies</li>
<li>The documentation has been updated with a lot of new chapters</li>
</ul>
<h2>Fixes</h2>
<ul>
<li>Camera passwords are now escaped, meaning that passwords with special characters are now supported.<br>
This has been a long standing issue which caused FFProbe to fail when trying to connect to the camera.</li>
<li>Properly redact sensitive information in logs</li>
<li>Reduce the occurence of <code>KeyError: UUID</code> in the logs</li>
<li>Fix a long standing bug where frames with drawn items (like bounding boxes, masks etc) would bleed through to other frames.</li>
</ul>
<p>Docker images will be on Docker Hub shortly</p>roflcooptertag:github.com,2008:Repository/291498455/v3.0.0b132025-03-10T20:49:20Zv3.0.0b13 - Final beta<p>This beta will be the last one before the release of 3.0.0, unless some big error is found.<br>
The release focuses on stability improvements and polishing of existing features.<br>
Some new features are also included.</p>
<p>New documentation chapters have also been added which aims to explain how recordings and Viseron in general is working.<br>
New sections will be added in the future to highlight common usecases.<br>
<a href="https://dev--viseron.netlify.app/docs/documentation/configuration" rel="nofollow">https://dev--viseron.netlify.app/docs/documentation/configuration</a></p>
<h1>Breaking changes</h1>
<ul>
<li>The <code>/recordings</code> folder is no longer used, and should be replaced with the <code>/event_clips</code> folder.<br>
This namechange was made in order to clear up some confusion on what this folder is storing in v3.<br>
Docker instructions have been updated: <a href="https://dev--viseron.netlify.app/docs/documentation/installation#running-viseron" rel="nofollow">https://dev--viseron.netlify.app/docs/documentation/installation#running-viseron</a></li>
<li><code>trigger_recorder</code> has been deprecated in favor of <code>trigger_event_recording</code></li>
</ul>
<h1>New features</h1>
<ul>
<li>Faces to recognize can now be pulled from Compreface directly</li>
<li>A logfile is now created in the config directory. Docs have been updated accordingly: <a href="https://dev--viseron.netlify.app/components-explorer/components/logger#view-logs" rel="nofollow">https://dev--viseron.netlify.app/components-explorer/components/logger#view-logs</a></li>
<li>You can now download events and snapshots from the Events page.<br>
You can also specify a timespan for 24/7 recordings which will be downloaded as an MP4 file.<br>
Documentation can be found here: <a href="https://dev--viseron.netlify.app/docs/documentation/configuration/recordings#downloading-recordings" rel="nofollow">https://dev--viseron.netlify.app/docs/documentation/configuration/recordings#downloading-recordings</a></li>
<li>New config option <code>record_only</code> which makes it possible to create continuous recordings without running any type of detectors.</li>
<li>New config option <code>width</code> and <code>height</code> for <code>still_image</code> which allows setting the resolution of the still image</li>
<li>You can now click individual events in the popup windows on the Events/timeline view to seek to the event</li>
<li>New <code>telegram</code> component provided by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smelis/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smelis">@smelis</a>, which allows sending of clips and thumbnails using Telegram.</li>
<li>New <code>ptz</code> component provided by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smelis/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smelis">@smelis</a>, which can be used by the Telegram component to control a camera.<br>
The PTZ functionality will be ported to the web UI as well at some point.</li>
<li></li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>add empty config folder to allow devcontainer to start by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2705368668" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/843" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/843/hovercard" href="https://github.com/roflcoopter/viseron/pull/843">#843</a></li>
<li>remove devcontainer config mount by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2711756057" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/846" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/846/hovercard" href="https://github.com/roflcoopter/viseron/pull/846">#846</a></li>
<li>pin types-requests to 2.31.0.6 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2716785185" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/847" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/847/hovercard" href="https://github.com/roflcoopter/viseron/pull/847">#847</a></li>
<li>added new functionality to use compreface subjects for facial recognition by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tantonj/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tantonj">@tantonj</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2708105642" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/845" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/845/hovercard" href="https://github.com/roflcoopter/viseron/pull/845">#845</a></li>
<li>Documentation updates by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2727523143" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/850" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/850/hovercard" href="https://github.com/roflcoopter/viseron/pull/850">#850</a></li>
<li>add logging to file by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2732571416" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/852" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/852/hovercard" href="https://github.com/roflcoopter/viseron/pull/852">#852</a></li>
<li>wait for move_on_shutdown to complete by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2732835997" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/853" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/853/hovercard" href="https://github.com/roflcoopter/viseron/pull/853">#853</a></li>
<li>allow dates with only recorded video to be selected by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2735169517" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/854" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/854/hovercard" href="https://github.com/roflcoopter/viseron/pull/854">#854</a></li>
<li>use yield_per to avoid cursor closing in _check_tier by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2736082087" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/856" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/856/hovercard" href="https://github.com/roflcoopter/viseron/pull/856">#856</a></li>
<li>dont materialize when using yield_per by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2736330998" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/857" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/857/hovercard" href="https://github.com/roflcoopter/viseron/pull/857">#857</a></li>
<li>fetch all rows to avoid cursor closing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2737021599" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/858" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/858/hovercard" href="https://github.com/roflcoopter/viseron/pull/858">#858</a></li>
<li>Avoid importing dlib when it is not used by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2754390596" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/865" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/865/hovercard" href="https://github.com/roflcoopter/viseron/pull/865">#865</a></li>
<li>Allow download of events and snapshots by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2763729135" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/869" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/869/hovercard" href="https://github.com/roflcoopter/viseron/pull/869">#869</a></li>
<li>check for nan value when clicking the LIVE button by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2764590599" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/870" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/870/hovercard" href="https://github.com/roflcoopter/viseron/pull/870">#870</a></li>
<li>reload hls every 5 seconds on fatal errors by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2764593598" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/871" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/871/hovercard" href="https://github.com/roflcoopter/viseron/pull/871">#871</a></li>
<li>reload page when getting a vite preloadError by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2764594436" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/872" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/872/hovercard" href="https://github.com/roflcoopter/viseron/pull/872">#872</a></li>
<li>use getCameraNameFromQueryCache in Breadcrumbs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2764595386" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/873" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/873/hovercard" href="https://github.com/roflcoopter/viseron/pull/873">#873</a></li>
<li>apply object detection mask the same way as motion detection by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2765097270" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/874" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/874/hovercard" href="https://github.com/roflcoopter/viseron/pull/874">#874</a></li>
<li>properly cleanup after test_setup_components by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2765704162" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/875" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/875/hovercard" href="https://github.com/roflcoopter/viseron/pull/875">#875</a></li>
<li>add category and subcategory to OrphanedRecordingsCleanup query by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2765714035" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/876" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/876/hovercard" href="https://github.com/roflcoopter/viseron/pull/876">#876</a></li>
<li>allow pressing enter to login by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2765758261" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/877" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/877/hovercard" href="https://github.com/roflcoopter/viseron/pull/877">#877</a></li>
<li>remove future=True from sessionmaker by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2765776746" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/878" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/878/hovercard" href="https://github.com/roflcoopter/viseron/pull/878">#878</a></li>
<li>add screenshots and videos to event download instructions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2767395833" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/879" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/879/hovercard" href="https://github.com/roflcoopter/viseron/pull/879">#879</a></li>
<li>change bash to shell in docs codeblocks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2767486197" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/880" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/880/hovercard" href="https://github.com/roflcoopter/viseron/pull/880">#880</a></li>
<li>Continuous recording config parameter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2767832619" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/881" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/881/hovercard" href="https://github.com/roflcoopter/viseron/pull/881">#881</a></li>
<li>Async Websocket API by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2778129743" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/883" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/883/hovercard" href="https://github.com/roflcoopter/viseron/pull/883">#883</a></li>
<li>improve shutdown sequence and make sure all threads are stopped by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2779483173" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/884" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/884/hovercard" href="https://github.com/roflcoopter/viseron/pull/884">#884</a></li>
<li>Doc typos and FFmpeg timestamp example by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2779494277" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/885" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/885/hovercard" href="https://github.com/roflcoopter/viseron/pull/885">#885</a></li>
<li>Update docker.mdx - --env-file vs --env by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nneul/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nneul">@nneul</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2782667966" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/887" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/887/hovercard" href="https://github.com/roflcoopter/viseron/pull/887">#887</a></li>
<li>fix ffmpeg log pipe closing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2782726099" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/888" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/888/hovercard" href="https://github.com/roflcoopter/viseron/pull/888">#888</a></li>
<li>remove files_meta table to avoid costly joins by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2791007420" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/890" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/890/hovercard" href="https://github.com/roflcoopter/viseron/pull/890">#890</a></li>
<li>add gitsponsors to README by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2795714512" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/891" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/891/hovercard" href="https://github.com/roflcoopter/viseron/pull/891">#891</a></li>
<li>record_only config option by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2796395982" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/892" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/892/hovercard" href="https://github.com/roflcoopter/viseron/pull/892">#892</a></li>
<li>fix mjpeg stream exception by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2796894717" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/893" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/893/hovercard" href="https://github.com/roflcoopter/viseron/pull/893">#893</a></li>
<li>further asyncio event loop improvements by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2796901472" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/894" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/894/hovercard" href="https://github.com/roflcoopter/viseron/pull/894">#894</a></li>
<li>upgrade mypy to 1.14.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2797179386" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/895" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/895/hovercard" href="https://github.com/roflcoopter/viseron/pull/895">#895</a></li>
<li>Mount config folder in repo to /config in devcontainer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2797236247" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/896" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/896/hovercard" href="https://github.com/roflcoopter/viseron/pull/896">#896</a></li>
<li>fix so that opening drawer doesnt rerender page by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2797247349" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/897" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/897/hovercard" href="https://github.com/roflcoopter/viseron/pull/897">#897</a></li>
<li>add config option to set still image resolution by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2797249797" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/898" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/898/hovercard" href="https://github.com/roflcoopter/viseron/pull/898">#898</a></li>
<li>remove gitsponsors by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2797504336" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/899" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/899/hovercard" href="https://github.com/roflcoopter/viseron/pull/899">#899</a></li>
<li>add error boundaries to frontend by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2797520612" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/900" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/900/hovercard" href="https://github.com/roflcoopter/viseron/pull/900">#900</a></li>
<li>Events and timeline navigation improvements by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2833530786" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/904" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/904/hovercard" href="https://github.com/roflcoopter/viseron/pull/904">#904</a></li>
<li>deprecate trigger_recorder in favor of trigger_event_recording by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2834725972" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/905" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/905/hovercard" href="https://github.com/roflcoopter/viseron/pull/905">#905</a></li>
<li>Component explorer link fix by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2847852136" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/911" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/911/hovercard" href="https://github.com/roflcoopter/viseron/pull/911">#911</a></li>
<li>Rename /recordings to /event_clips by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2851950286" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/912" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/912/hovercard" href="https://github.com/roflcoopter/viseron/pull/912">#912</a></li>
<li>add direct navigation to timeline by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2854700247" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/913" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/913/hovercard" href="https://github.com/roflcoopter/viseron/pull/913">#913</a></li>
<li>allow overrides for each snapshot domain by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2882100773" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/916" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/916/hovercard" href="https://github.com/roflcoopter/viseron/pull/916">#916</a></li>
<li>PTZ and Telegram Components by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smelis/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smelis">@smelis</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2436450659" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/788" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/788/hovercard" href="https://github.com/roflcoopter/viseron/pull/788">#788</a></li>
<li>Fixes to the new PTZ and Telegram components by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2906585552" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/918" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/918/hovercard" href="https://github.com/roflcoopter/viseron/pull/918">#918</a></li>
<li>update images and descriptions for ptz and telegram by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roflcoopter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roflcoopter">@roflcoopter</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2906667700" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/919" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/919/hovercard" href="https://github.com/roflcoopter/viseron/pull/919">#919</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tantonj/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tantonj">@tantonj</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2708105642" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/845" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/845/hovercard" href="https://github.com/roflcoopter/viseron/pull/845">#845</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smelis/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smelis">@smelis</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2436450659" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/issues/788" data-hovercard-type="pull_request" data-hovercard-url="/roflcoopter/viseron/pull/788/hovercard" href="https://github.com/roflcoopter/viseron/pull/788">#788</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.0.0b12...v3.0.0b13"><tt>v3.0.0b12...v3.0.0b13</tt></a></p>roflcooptertag:github.com,2008:Repository/291498455/v3.0.0b122025-02-09T21:32:39Zv3.0.0b12 - Bugfixes and cleanup jobs<p>This release includes a multitude of fixes and changes to improve the stability of Viseron.<br>
It also adds multiple clean up jobs to keep the database and filesystem in sync in case of any crashes.</p>
<p>If you have tried the v3 beta before and experienced issues, i highly suggest trying this release out since it contains loads of fixes.</p>
<h3>Fixes</h3>
<ul>
<li>Remove volumes from the Dockerfile to avoid issues with bind mounts</li>
<li>Use the process watchdog for Darknet so that it is restarted in case of crashes</li>
<li>Add extra logging to shutdown procedure to pinpoint threads and processes that is slowing it down</li>
<li>Allow empty passwords for cameras</li>
<li>Run every thread using RestartableThread so that it gets awaited during shutdown</li>
<li>Fixes the <code>move_on_shutdown: true</code> config option. Previously Viseron did not wait for the callback to finish before exiting.</li>
<li>A condition was missing when searchng for files for <code>move_on_shutdown</code> causing files to be moved multiple times</li>
<li>Delete from FilesMeta table manually instead of using a trigger</li>
<li>Properly throttle the function that checks if any files should be moved. This cause issues with attempting to move files multiple times</li>
<li>Event clips are now generated in the servers timezone instead of UTC</li>
</ul>
<h3>Cleanup jobs</h3>
<p>Multiple cleanup jobs now run regularly to make sure to keep the database and filesystem clutter free.<br>
For instance if you delete files manually while Viseron is not started, the cleanup jobs will make sure that they are removed from the database.</p>
<p>They are intentionally throttled to run quite slow to not degrade performance of your host.</p>
<ul>
<li>
<p><strong>OrphanedFilesCleanup</strong> (Mondays, 3 AM)</p>
<ul>
<li>Removes files that are no longer associated with any recordings or events</li>
</ul>
</li>
<li>
<p><strong>OrphanedDatabaseFilesCleanup</strong> (Wednesdays, 3 AM)</p>
<ul>
<li>Cleans up database entries that point to non-existent files</li>
</ul>
</li>
<li>
<p><strong>OrphanedFilesMetaCleanup</strong> (Fridays, 3 AM)</p>
<ul>
<li>Removes metadata for files that no longer exist</li>
</ul>
</li>
<li>
<p><strong>EmptyFoldersCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes empty folders to keep storage structure tidy</li>
</ul>
</li>
<li>
<p><strong>OrphanedThumbnailsCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes thumbnail images that are no longer linked to any recordings</li>
</ul>
</li>
<li>
<p><strong>OrphanedClipsCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes video clips that are no longer associated with any events</li>
</ul>
</li>
<li>
<p><strong>OrphanedRecordingsCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes recordings that are no longer linked to any events</li>
</ul>
</li>
<li>
<p><strong>OrphanedPostProcessorResultsCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes post-processing results that are no longer needed</li>
</ul>
</li>
<li>
<p><strong>OrphanedObjectsCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes detected object data that is no longer associated with any events</li>
</ul>
</li>
<li>
<p><strong>OrphanedMotionCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes motion detection data that is no longer linked to any events</li>
</ul>
</li>
<li>
<p><strong>OldEventsCleanup</strong> (Daily at midnight)</p>
<ul>
<li>Removes expired system events based on retention settings</li>
</ul>
</li>
</ul>
<p>For discussions, please use this discussion: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="6433720" data-permission-text="Title is private" data-url="https://github.com/roflcoopter/viseron/discussions/721" data-hovercard-type="discussion" data-hovercard-url="/roflcoopter/viseron/discussions/721/hovercard" href="https://github.com/roflcoopter/viseron/discussions/721">#721</a></p>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/roflcoopter/viseron/compare/v3.0.0b11...v3.0.0b12"><tt>v3.0.0b11...v3.0.0b12</tt></a></p>roflcoopter