docs/docs/guides/getting_started.md
:::tip
If you already have an environment with Linux and Docker installed, you can continue to Installing Frigate below.
If you already have Frigate installed through Docker or through a Home Assistant App, you can continue to Configuring Frigate below.
:::
This section guides you through setting up a server with Debian Bookworm and Docker.
There are many guides on how to install Debian Server, so this will be an abbreviated guide. Connect a temporary monitor and keyboard to your device so you can install a minimal server without a desktop environment.
apt update && apt install -y sudo
blake to your own user)
usermod -aG sudo blake
poweroffAt this point, you can install the device in a permanent location. The remaining steps can be performed via SSH from another device. If you don't have an SSH client, you can install one of the options listed in the Visual Studio Code documentation.
Connect via SSH and login with your non-root user created during install
Setup passwordless sudo so you don't have to type your password for each sudo command (change blake in the command below to your user)
echo 'blake ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/user
Logout and login again to activate passwordless sudo
Setup automatic security updates for the OS (optional)
sudo apt update && sudo apt upgrade -y
sudo apt install -y unattended-upgrades
echo unattended-upgrades unattended-upgrades/enable_auto_updates boolean true | sudo debconf-set-selections
sudo dpkg-reconfigure -f noninteractive unattended-upgrades
Now you have a minimal Debian server that requires very little maintenance.
This section shows how to create a minimal directory structure for a Docker installation on Debian. If you have installed Frigate as a Home Assistant App or another way, you can continue to Configuring Frigate.
Frigate will create a config file if one does not exist on the initial startup. The following directory structure is the bare minimum to get started. Once Frigate is running, you can use the built-in config editor which supports config validation.
.
├── docker-compose.yml
├── config/
└── storage/
This will create the above structure:
mkdir storage config && touch docker-compose.yml
If you are setting up Frigate on a Linux device via SSH, you can use nano to edit the following files. If you prefer to edit remote files with a full editor instead of a terminal, I recommend using Visual Studio Code with the Remote SSH extension.
:::note
This docker-compose.yml file is just a starter for amd64 devices. You will need to customize it for your setup as detailed in the Installation docs.
:::
docker-compose.yml
services:
frigate:
container_name: frigate
restart: unless-stopped
stop_grace_period: 30s
image: ghcr.io/blakeblackshear/frigate:stable
volumes:
- ./config:/config
- ./storage:/media/frigate
- type: tmpfs # 1GB In-memory filesystem for recording segment storage
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971"
- "8554:8554" # RTSP feeds
Now you should be able to start Frigate by running docker compose up -d from within the folder containing docker-compose.yml. On startup, an admin user and password will be created and outputted in the logs. You can see this by running docker logs frigate. Frigate should now be accessible at https://server_ip:8971 where you can login with the admin user and finish the configuration using the built-in configuration editor.
This section assumes that you already have an environment setup as described in Installation. You should also configure your cameras according to the camera setup guide. Pay particular attention to the section on choosing a detect resolution.
At this point you should be able to start Frigate and a basic config will be created automatically.
You can click the Add Camera button to use the camera setup wizard to get your first camera added into Frigate.
Now that you have a working camera configuration, you want to setup hardware acceleration to minimize the CPU required to decode your video streams. See the hardware acceleration config reference for examples applicable to your hardware.
Here is an example configuration with hardware acceleration configured to work with most Intel processors with an integrated GPU using the preset:
docker-compose.yml (after modifying, you will need to run docker compose up -d to apply changes)
services:
frigate:
...
devices:
- /dev/dri/renderD128:/dev/dri/renderD128 # for intel & amd hwaccel, needs to be updated for your hardware
...
config.yml
mqtt: ...
cameras:
name_of_your_camera:
ffmpeg:
inputs: ...
# highlight-next-line
hwaccel_args: preset-vaapi
detect: ...
By default, Frigate will use a single CPU detector.
In many cases, the integrated graphics on Intel CPUs provides sufficient performance for typical Frigate setups. If you have an Intel processor, you can follow the configuration below.
<details> <summary>Use Intel OpenVINO detector</summary>You need to refer to Configure hardware acceleration above to enable the container to use the GPU.
mqtt: ...
detectors: # <---- add detectors
ov:
type: openvino # <---- use openvino detector
device: GPU
# We will use the default MobileNet_v2 model from OpenVINO.
model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
path: /openvino-model/ssdlite_mobilenet_v2.xml
labelmap_path: /openvino-model/coco_91cl_bkgr.txt
cameras:
name_of_your_camera:
ffmpeg: ...
detect:
enabled: True # <---- turn on detection
...
If you have a USB Coral, you will need to add a detectors section to your config.
<details> <summary>Use USB Coral detector</summary>docker-compose.yml (after modifying, you will need to run docker compose up -d to apply changes)
services:
frigate:
...
devices:
- /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
- /dev/apex_0:/dev/apex_0 # passes a PCIe Coral, follow driver instructions here https://github.com/jnicolson/gasket-builder
...
mqtt: ...
detectors: # <---- add detectors
coral:
type: edgetpu
device: usb
cameras:
name_of_your_camera:
ffmpeg: ...
detect:
enabled: True # <---- turn on detection
...
More details on available detectors can be found here.
Restart Frigate and you should start seeing detections for person. If you want to track other objects, they will need to be added according to the configuration file reference.
Now that you have optimized your configuration for decoding the video stream, you will want to check to see where to implement motion masks. To do this, navigate to the camera in the UI, select "Debug" at the top, and enable "Motion boxes" in the options below the video feed. Watch for areas that continuously trigger unwanted motion to be detected. Common areas to mask include camera timestamps and trees that frequently blow in the wind. The goal is to avoid wasting object detection cycles looking at these areas.
Now that you know where you need to mask, use the "Mask & Zone creator" in the options pane to generate the coordinates needed for your config file. More information about masks can be found here.
:::warning
Note that motion masks should not be used to mark out areas where you do not want objects to be detected or to reduce false positives. They do not alter the image sent to object detection, so you can still get tracked objects, alerts, and detections in areas with motion masks. These only prevent motion in these areas from initiating object detection.
:::
Your configuration should look similar to this now.
mqtt:
enabled: False
detectors:
coral:
type: edgetpu
device: usb
cameras:
name_of_your_camera:
ffmpeg:
inputs:
- path: rtsp://10.0.10.10:554/rtsp
roles:
- detect
motion:
mask:
- 0,461,3,0,1919,0,1919,843,1699,492,1344,458,1346,336,973,317,869,375,866,432
In order to review activity in the Frigate UI, recordings need to be enabled.
To enable recording video, add the record role to a stream and enable it in the config. If record is disabled in the config, it won't be possible to enable it in the UI.
mqtt: ...
detectors: ...
cameras:
name_of_your_camera:
ffmpeg:
inputs:
- path: rtsp://10.0.10.10:554/rtsp
roles:
- detect
- path: rtsp://10.0.10.10:554/high_res_stream # <----- Add stream you want to record from
roles:
- record
detect: ...
record: # <----- Enable recording
enabled: True
motion: ...
If you don't have separate streams for detect and record, you would just add the record role to the list on the first input.
:::note
If you only define one stream in your inputs and do not assign a detect role to it, Frigate will automatically assign it the detect role. Frigate will always decode a stream to support motion detection, Birdseye, the API image endpoints, and other features, even if you have disabled object detection with enabled: False in your config's detect section.
If you only plan to use Frigate for recording, it is still recommended to define a detect role for a low resolution stream to minimize resource usage from the required stream decoding.
:::
By default, Frigate will retain video of all tracked objects for 10 days. The full set of options for recording can be found here.
At this point you have a complete config with basic functionality.
Now that you have a working install, you can use the following documentation for additional features: