diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 34e613aa6..131863e97 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -44,3 +44,27 @@ jobs:
- name: Test
run: npm run test
working-directory: ./web
+
+ docker_tests_on_aarch64:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v2
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ - name: Build and run tests
+ run: make run_tests PLATFORM="linux/arm64/v8" ARCH="aarch64"
+
+ docker_tests_on_amd64:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v2
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ - name: Build and run tests
+ run: make run_tests PLATFORM="linux/amd64" ARCH="amd64"
diff --git a/Makefile b/Makefile
index fb1a1447f..68e950c2c 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ default_target: amd64_frigate
COMMIT_HASH := $(shell git log -1 --pretty=format:"%h"|tail -1)
version:
- echo "VERSION='0.10.0-$(COMMIT_HASH)'" > frigate/version.py
+ echo "VERSION='0.11.0-$(COMMIT_HASH)'" > frigate/version.py
web:
docker build --tag frigate-web --file docker/Dockerfile.web web/
@@ -59,4 +59,16 @@ armv7_frigate: version web
armv7_all: armv7_wheels armv7_ffmpeg armv7_frigate
-.PHONY: web
+run_tests:
+ # PLATFORM: linux/arm64/v8 linux/amd64 or linux/arm/v7
+ # ARCH: aarch64 amd64 or armv7
+ @cat docker/Dockerfile.base docker/Dockerfile.$(ARCH) > docker/Dockerfile.test
+ @sed -i "s/FROM frigate-web as web/#/g" docker/Dockerfile.test
+ @sed -i "s/COPY --from=web \/opt\/frigate\/build web\//#/g" docker/Dockerfile.test
+ @sed -i "s/FROM frigate-base/#/g" docker/Dockerfile.test
+ @echo "" >> docker/Dockerfile.test
+ @echo "RUN python3 -m unittest" >> docker/Dockerfile.test
+ @docker buildx build --platform=$(PLATFORM) --tag frigate-base --build-arg NGINX_VERSION=1.0.2 --build-arg FFMPEG_VERSION=1.0.0 --build-arg ARCH=$(ARCH) --build-arg WHEELS_VERSION=1.0.3 --file docker/Dockerfile.test .
+ @rm docker/Dockerfile.test
+
+.PHONY: web run_tests
diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev
index 41a3296c9..ba36d92e9 100644
--- a/docker/Dockerfile.dev
+++ b/docker/Dockerfile.dev
@@ -22,3 +22,5 @@ RUN pip3 install pylint black
# Install Node 14
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y nodejs
+
+RUN npm install -g npm@latest
diff --git a/docs/docs/configuration/advanced.md b/docs/docs/configuration/advanced.md
index 18521b7d5..790b494f7 100644
--- a/docs/docs/configuration/advanced.md
+++ b/docs/docs/configuration/advanced.md
@@ -43,6 +43,11 @@ If you are storing your database on a network share (SMB, NFS, etc), you may get
This may need to be in a custom location if network storage is used for the media folder.
+```yaml
+database:
+ path: /path/to/frigate.db
+```
+
### `model`
If using a custom model, the width and height will need to be specified.
diff --git a/docs/docs/configuration/camera_specific.md b/docs/docs/configuration/camera_specific.md
index b737a5605..465e0a5ce 100644
--- a/docs/docs/configuration/camera_specific.md
+++ b/docs/docs/configuration/camera_specific.md
@@ -19,6 +19,34 @@ output_args:
rtmp: -c:v libx264 -an -f flv
```
+### JPEG Stream Cameras
+
+Cameras using a live changing jpeg image will need input parameters as below
+
+```yaml
+input_args:
+- -r
+- 5 # << enter FPS here
+- -stream_loop
+- -1
+- -f
+- image2
+- -avoid_negative_ts
+- make_zero
+- -fflags
+- nobuffer
+- -flags
+- low_delay
+- -strict
+- experimental
+- -fflags
+- +genpts+discardcorrupt
+- -use_wallclock_as_timestamps
+- 1
+```
+
+Outputting the stream will have the same args and caveats as per [MJPEG Cameras](#mjpeg-cameras)
+
### RTMP Cameras
The input parameters need to be adjusted for RTMP cameras
@@ -61,8 +89,8 @@ cameras:
roles:
- detect
detect:
- width: 640
- height: 480
+ width: 896
+ height: 672
fps: 7
```
diff --git a/docs/docs/configuration/index.md b/docs/docs/configuration/index.md
index 5ce361198..5d8638745 100644
--- a/docs/docs/configuration/index.md
+++ b/docs/docs/configuration/index.md
@@ -159,8 +159,23 @@ detect:
enabled: True
# Optional: Number of frames without a detection before frigate considers an object to be gone. (default: 5x the frame rate)
max_disappeared: 25
- # Optional: Frequency for running detection on stationary objects (default: 10x the frame rate)
- stationary_interval: 50
+ # Optional: Configuration for stationary object tracking
+ stationary:
+ # Optional: Frequency for running detection on stationary objects (default: shown below)
+ # When set to 0, object detection will never be run on stationary objects. If set to 10, it will be run on every 10th frame.
+ interval: 0
+ # Optional: Number of frames without a position change for an object to be considered stationary (default: 10x the frame rate or 10s)
+ threshold: 50
+ # Optional: Define a maximum number of frames for tracking a stationary object (default: not set, track forever)
+ # This can help with false positives for objects that should only be stationary for a limited amount of time.
+ # It can also be used to disable stationary object tracking. For example, you may want to set a value for person, but leave
+ # car at the default.
+ max_frames:
+ # Optional: Default for all object types (default: not set, track forever)
+ default: 3000
+ # Optional: Object specific values
+ objects:
+ person: 1000
# Optional: Object configuration
# NOTE: Can be overridden at the camera level
@@ -223,7 +238,15 @@ motion:
# NOTE: Can be overridden at the camera level
record:
# Optional: Enable recording (default: shown below)
+ # WARNING: Frigate does not currently support limiting recordings based
+ # on available disk space automatically. If using recordings,
+ # you must specify retention settings for a number of days that
+ # will fit within the available disk space of your drive or Frigate
+ # will crash.
enabled: False
+ # Optional: Number of minutes to wait between cleanup runs (default: shown below)
+ # This can be used to reduce the frequency of deleting recording segments from disk if you want to minimize i/o
+ expire_interval: 60
# Optional: Retention settings for recording
retain:
# Optional: Number of days to retain recordings regardless of events (default: shown below)
@@ -264,7 +287,7 @@ record:
# here, the segments will already be gone by the time this mode is applied.
# For example, if the camera retain mode is "motion", the segments without motion are
# never stored, so setting the mode to "all" here won't bring them back.
- mode: active_objects
+ mode: motion
# Optional: Per object retention days
objects:
person: 15
@@ -377,7 +400,7 @@ cameras:
# camera.
front_steps:
# Required: List of x,y coordinates to define the polygon of the zone.
- # NOTE: Coordinates can be generated at https://www.image-map.net/
+ # NOTE: Presence in a zone is evaluated only based on the bottom center of the objects bounding box.
coordinates: 545,1077,747,939,788,805
# Optional: List of objects that can trigger this zone (default: all tracked objects)
objects:
diff --git a/docs/docs/configuration/nvdec.md b/docs/docs/configuration/nvdec.md
index 52e56cd1f..69889241b 100644
--- a/docs/docs/configuration/nvdec.md
+++ b/docs/docs/configuration/nvdec.md
@@ -97,15 +97,3 @@ processes:
| 0 N/A N/A 12827 C ffmpeg 417MiB |
+-----------------------------------------------------------------------------+
```
-
-To further improve performance, you can set ffmpeg to skip frames in the output,
-using the fps filter:
-
-```yaml
-output_args:
- - -filter:v
- - fps=fps=5
-```
-
-This setting, for example, allows Frigate to consume my 10-15fps camera streams on
-my relatively low powered Haswell machine with relatively low cpu usage.
diff --git a/docs/docs/configuration/objects.mdx b/docs/docs/configuration/objects.mdx
index fd42a4399..1d236bf42 100644
--- a/docs/docs/configuration/objects.mdx
+++ b/docs/docs/configuration/objects.mdx
@@ -5,7 +5,11 @@ title: Objects
import labels from "../../../labelmap.txt";
-By default, Frigate includes the following object models from the Google Coral test data. Note that `car` is listed twice because `truck` has been renamed to `car` by default. These object types are frequently confused.
+Frigate includes the object models listed below from the Google Coral test data.
+
+Please note:
+ - `car` is listed twice because `truck` has been renamed to `car` by default. These object types are frequently confused.
+ - `person` is the only tracked object by default. See the [full configuration reference](https://docs.frigate.video/configuration/index#full-configuration-reference) for an example of expanding the list of tracked objects.