* swap sqlite_vec for chroma in requirements
* load sqlite_vec in embeddings manager
* remove chroma and revamp Embeddings class for sqlite_vec
* manual minilm onnx inference
* remove chroma in clip model
* migrate api from chroma to sqlite_vec
* migrate event cleanup from chroma to sqlite_vec
* migrate embedding maintainer from chroma to sqlite_vec
* genai description for sqlite_vec
* load sqlite_vec in main thread db
* extend the SqliteQueueDatabase class and use peewee db.execute_sql
* search with Event type for similarity
* fix similarity search
* install and add comment about transformers
* fix normalization
* add id filter
* clean up
* clean up
* fully remove chroma and add transformers env var
* readd uvicorn for fastapi
* readd tokenizer parallelism env var
* remove chroma from docs
* remove chroma from UI
* try removing custom pysqlite3 build
* hard code limit
* optimize queries
* revert explore query
* fix query
* keep building pysqlite3
* single pass fetch and process
* remove unnecessary re-embed
* update deps
* move SqliteVecQueueDatabase to db directory
* make search thumbnail take up full size of results box
* improve typing
* improve model downloading and add status screen
* daemon downloading thread
* catch case when semantic search is disabled
* fix typing
* build sqlite_vec from source
* resolve conflict
* file permissions
* try build deps
* remove sources
* sources
* fix thread start
* include git in build
* reorder embeddings after detectors are started
* build with sqlite amalgamation
* non-platform specific
* use wget instead of curl
* remove unzip -d
* remove sqlite_vec from requirements and load the compiled version
* fix build
* avoid race in db connection
* add scale_factor and bias to description zscore normalization
* Added stop_event to util.Process
util.Process will take care of receiving signals when the stop_event is
accessed in the subclass. If it never is, SystemExit is raised instead.
This has the effect of still behaving like multiprocessing.Process when
stop_event is not accessed, while still allowing subclasses to not deal
with the hassle of setting it up.
* Give each util.Process their own logger
This will help to reduce boilerplate in subclasses.
* Give explicit types to util.Process.__init__
This gives better type hinting in the editor.
* Use util.Process facilities in AudioProcessor
Boilerplate begone!
* Removed pointless check in util.Process
The log_listener.queue should never be None, unless something has gone
extremely wrong in the log setup code. If we're that far gone, crashing
is better.
* Make sure faulthandler is enabled in all processes
This has no effect currently since we're using the fork start_method.
However, when we inevidably switch to forkserver (either by choice, or
by upgrading to python 3.14+) not having this makes for some really fun
failure modes :D
* Add loading indicator when explore view is revalidating
* Portal tooltip in object lifecycle pane
* Better config file handling
* Only manually set aspect ratio when using alert videos
* Subclass Process for audio_process
* Introduce custom mp.Process subclass
In preparation to switch the multiprocessing startup method away from
"fork", we cannot rely on os.fork cloning the log state at fork time.
Instead, we have to set up logging before we run the business logic of
each process.
* Make camera_metrics into a class
* Make ptz_metrics into a class
* Fixed PtzMotionEstimator.ptz_metrics type annotation
* Removed pointless variables
* Do not start audio processor when no audio cameras are configured
* Moved FrigateApp.init_config() into FrigateConfig.load()
* Move frigate config loading into main
* Store PlusApi in FrigateConfig
* Register SIGTERM handler in main
* Ensure logging is setup during config parsing
* Removed pointless try
* Moved config initialization out of FrigateApp
* Made FrigateApp.shm_frame_count into a function
* Removed log calls from signal handlers
python's logging calls are not re-entrant, which caused at least one of
these to deadlock randomly.
* Reopen stdout/err on process fork
This helps avoid deadlocks (https://github.com/python/cpython/issues/91776).
* Make mypy happy
* Whoops. I might have forgotten to save.
Truly an amateur mistake.
* Always call FrigateApp.stop()
* Ignore entire __pycache__ folder instead of individual *.pyc files
* Ignore .mypy_cache in git
* Rework config YAML parsing to use only ruamel.yaml
PyYAML silently overrides keys when encountering duplicates, but ruamel
raises and exception by default. Since we're already using it elsewhere,
dropping PyYAML is an easy choice to make.
* Added EnvString in config to slim down runtime_config()
* Added gitlens to devcontainer
* Automatically call FrigateConfig.runtime_config()
runtime_config needed to be called manually before. Now, it's been
removed, but the same code is run by a pydantic validator.
* Fix handling of missing -segment_time
* Removed type annotation on FrigateConfig's parse
I'd like to keep them, but then mypy complains about some fundamental
errors with how the pydantic model is structured. I'd like to fix it,
but I'd rather work towards moving some of this config to the database.
* Ignore entire __pycache__ folder instead of individual *.pyc files
* Rewrite the yaml loader to match PyYAML
The old implementation would fail in weird ways with configs that were
incorrect in just the right way. The new implementation just does what
PyYAML would do, only diverging in case of duplicate keys.
* Clarify duplicate yaml key ValueError message
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Install multiple ffmpeg versions and add config to make it configurable
* Update docs
* Run ffprobe too
* Cleanup
* Apply config to go2rtc as well
* Fix ffmpeg bin
* Docs
* Restore path
* Cleanup env var
* Fix ffmpeg path for encoding
* Fix export
* Formatting
* Object lifecycle pane
* fix thumbnails and annotation offset math
* snapshot endpoint height and format, yaml types, bugfixes
* clean up for new type
* use get_image_from_recording in recordings snapshot api
* make height optional
* Refactor recordings config to be based off of review items
* Update object processing logic for when an event is created
* Migrate to deciding recording retention based on review items
* Refactor recording expiration to be based off of review items
* Remove remainder of recording events access
* Handle migration automatically
* Update version and cleanup
* Update docs
* Clarify docs
* Cleanup
* Target camera config
* Safely access all fields
* Only keep 2x detect fps frames in SHM
* Don't delete previous shm frames in output
* Catch case where images do not exist
* Ensure files are closed
* Clear out all frames when shutting down
* Correct the number of frames saved
* Simplify empty shm error handling
* Improve frame safety
* intentionally handle queues during shutdown and carefully manage shutdown order
* more carefully manage shutdown to avoid threadlocks
* use debug for signal logging
* ensure disabled cameras dont break shutdown
* typo
* Update config version to be stored inside of the config
* Don't remove items from list when navigating back
* Use video api instead of webps for live current hour filmstrip
* Check that the config file is writable
* Show camera name when camera is offline
* Show camera name when offline
* Cleanup
* add ability to parse and upload image from recording to frigate+
* Show dialog with current frame to be uploaded
* Implement uploading image in frontend
* Cleanup
* Update title
* Add verification for required zone names
* Make global object masks use relative coordinates as well
* Ensure event image cleanup doesn't fail
* Return passed value
* Update reference config to reflect new config
* Migrate 0.13 config to match 0.14 config style
* Overwrite existing config
* Adjust config schema to remove events required zones and include reviews
* Update object config to check correct required zones config
* Refactor reviews to remove motion and only create review segments in expected circumstances
* Cleanup
* Formatting
* Fix update ordering
* Update pydantic
* Remove rtmp references as part of migration
* Catch file not found for alert frame
* Handle zones and masks as relative coords
* Ensure that zone coords are saved as relative
* Get motion mask working with relative coordinates
* Rewrite object mask to use relative coordinates as well
* Formatting
* Fix always trying to convert
* fix mask logic
* Save numbers as int instead of string
* Fix hover logic
* Fix delay for new alerts
* Fixup dialog and marking item as uploaded
* Make preview progress larger and easier to grab
* Allow hovering to control preview on desktop
* Add dialog for creating new camera group
* Support adding of camera groups and dynamically updating the config
* Support deleting and edit existing camera groups
* Don't show separator if user has no groups
* Formatting
* fix background
* Use a rolling average of iou to determine if an object is no longer stationary
* Use different box variation to designate when an object is stationary on debug
* In progress
* Use average of boxes instead of average of iou
* Update frigate/track/norfair_tracker.py
Co-authored-by: Blake Blackshear <blake@frigate.video>
---------
Co-authored-by: Blake Blackshear <blake@frigate.video>
* Add review to database
* Create main manager for review segments
* Upsert and maintain review segments
* Update logic for adding new segments
* Add api
* Support deleting review segments on recording cleanup
* Add field for alert labels
* Formatting
* Logic fixes
* Save 16:9 thumbnail for review segment
* Ensure that crop is 16:9
* Fix non detected objects being added
* Only include true positives
* Add sub labels to data