* use a different method for blur and contrast to reduce CPU
* blur with radius instead
* use faster interpolation for motion
* improve contrast based on averages
* increase default threshold to 30
* ensure mask is applied after contrast improvement
* update opencv
* update benchmark script
* Show overlay when hovering on timeline box
* Make it work with mobile too
* Fix lint
* Fix ratio
* Update web/src/components/TimelineEventOverlay.jsx
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* Show overlay when hovering on timeline box
* Make it work with mobile too
* Fix lint
* Fix ratio
* Remove label and make overlay respect selected theme
---------
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* configurable ffmpeg timeout
* configurable ffmpeg healthcheck interval
rename timeout to healthcheck_interval
only grab config value once
* configurable ffmpeg retry interval
rename healthcheck_interval to retry_interval
* add retry_interval to docs
- update retry_interval text in config.py
* optimize frame-per-second calculations
FPS is never calculated over differing periods for even given
counter. By only storing timestamps within the period that is
used, we avoid having to iterate 1000 entries every time it's
re-calculated (multiple times per second). 1000 entries would
normally only be needed if something is running at 100fps. A
more common speed - anywhere from 5 to 30fps, only needs 50
to 300 entries.
This isn't a huge improvement in the grand scheme, but when motion
detection is disabled, it takes nearly as much time in a flamegraph
as actually transferring the video frame.
* fix python checks
* Load labels dynamically to include custom events and audio, do not include attribute labels
* Formatting
* Fix sorting
* Also filter tracked object list on camera page
* isort
* Don't fail before load
* pass attribute labels as attributes
* add label attrs to events and snapshots
* incorporate area of license_plate and face into snapshot selection
* populate sublabels for cars with logos
* Make camera recordings mover asynchronous
* Formatting
* Move to using cv2 instead of external ffmpeg process
* Use ffprobe if cv2 failed
* Formatting
* Fix bad access
* Formatting
* Update frigate/record/maintainer.py
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* Update name of caller
---------
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* Prefer horizontal layout to vertical
* Rewrite birdseye to use aspect ratios instead of resolutions as layout configurator
* Improve layout with slightly larger than 16:9 cameras
* Remove manual 2 camera layout
* Lint
* Remove log
* Refactor date and time initialization in Export.jsx to use local timezone
* Update error message to include specific reason for failure in Export.jsx
* Update faqs.md
I spent hours trying to figure this out and if this could be included in some way that would potentially help someone out there.
* Update docs/docs/troubleshooting/faqs.md
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Update docs/docs/troubleshooting/faqs.md
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Update faqs.md
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* "Refactor storage stats calculation to use powers of 2 for more accurate values"
* replace 1000000 to 2^20
* Refactor storage unit size display to use binary prefixes
This commit updates the display of storage unit sizes in both the camera storage stats and the Storage component in the web UI to use binary prefixes (MiB and GiB) instead of decimal prefixes (MB and GB). This provides more accurate and consistent representation of storage sizes
* added timepicker as children to calendar
* new timepicker component
* Add timepicker
* new timePicker component
* timepicker as calendar child
* hover:border and rounded
* adjusted width
* complete rework
* more code comments
* memorization
* preselect hover, transition
* numberOfDaysSelected has minimum of 1
* prefill hours when component mounts
* persist hours when component mount
* accommodate for the new timePicker
* add reset state
* scroll into view
* reuse before, after
* fix LastDayInRange when a time is selected
* do not add hours if before is zero
* use hours instead of days
* useeffect to reset hour. check timerange before scroll
* scroll to last element, not first
* refactor existing motion detector
* implement and use cnt bgsub
* pass fps to motion detector
* create a simplified motion detector
* lightning detection
* update default motion config
* lint imports
* use estimated boxes for regions
* use improved motion detector
* update test
* use a different strategy for clustering motion and object boxes
* increase alpha during calibration
* simplify object consolidation
* add some reasonable constraints to the estimated box
* adjust cluster boundary to 10%
* refactor
* add disabled debug code
* fix variable scope
* Add option for network bandwidth and only calculate if enabled
* Don't show network bandwidth in system stats page if not enabled
* Formatting
* Hide other rows as well
* Add docs
* Add config options for AMD and Intel GPU stats
* Fix stats access
* Update docs
* Use correct bool syntax
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
---------
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* Update pull_request.yml
* Add temporary table for deletion and use pagination to process recordings in chunks for deletion of recordings with missing files
* move RecordingsToDelete class to models.py
* recording cleanup: bugfixes
* Update cleanup.py
* improve log message in cleanup.py
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Add date and time inputs to Export component and ensure end time is larger than start time
* Update web/src/routes/Export.jsx
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
---------
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* Objects need to be in zones multiple times to be considered present in the zone
* Add a field to configure inertia per zone
* Formatting
* Use correct default method
* Clarify zone presence behavior
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
---------
Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
* Calculate possible layout
* Working in ideal conditions
* Fix issues with different heights
* Remove logs
* Optimally handle cameras that don't match the canvas aspect ratio
* Make sure to copy so list is not overwritten
* Remove unused import
* Remove try catch
* Optimize layout for low amount of cameras
* Try to scale frames up if not enough space is used
* Add function to get physical interfaces for bandwidth calculation in get_bandwidth_stats() function
* Add telemetry configuration option for enabled network interfaces, with default values for monitoring bandwidth stats for camera ffmpeg processes, go2rtc, and object detectors. Also add support for FrigateConfig in set_bandwidth_stats function to get bandwidth stats for specified network interfaces
* Enable auto vacuums
* Enable auto vacuum
* Fix separator
* Fix separator and remove incorrect log
* Limit to 1 row since that is all that is used
* Add index on camera + segment_size
* Formatting
* Increase timeout and cache_size
* Set DB mode to NORMAL synchronous level
* Formatting
* Vacuum every 2 weeks
* Remove fstring
* Use string
* Use consts
* Add ability to export frigate clips
* Add http endpoint
* Add dir to nginx
* Add webUI
* Formatting
* Cleanup unused
* Optimize timelapse
* Fix pts
* Use JSON body for params
* Use hwaccel to encode when available
* Print ffmpeg command when fail
* Print ffmpeg command when fail
* Add separate ffmpeg preset for timelapse
* Add docs outlining the export directory
* Add export docs
* Use ''
* Fix playlist max time
* Lower max playlist time
* Add api docs for export
* isort fixes
* Add isort and ruff linter
Both linters are pretty common among modern python code bases.
The isort tool provides stable sorting and grouping, as well as pruning
of unused imports.
Ruff is a modern linter, that is very fast due to being written in rust.
It can detect many common issues in a python codebase.
Removes the pylint dev requirement, since ruff replaces it.
* treewide: fix issues detected by ruff
* treewide: fix bare except clauses
* .devcontainer: Set up isort
* treewide: optimize imports
* treewide: apply black
* treewide: make regex patterns raw strings
This is necessary for escape sequences to be properly recognized.