With their remote monitoring, motion detection, PTZ control, and data storing provisions, Network Video Recorders are a great way to turn a bunch of IP cameras into a full-fledged surveillance system. Better yet, the self-hosting landscape is chock-full of cool NVR solutions that not only let you manage your security footage, but also preserve your privacy and money while doing so.

I’ve tinkered with a handful of these tools over the last couple of months, and while some may specialize in certain aspects, Frigate is ideal for building a DIY security camera system.

I use Frigate with my NAS

But it can be hosted on pretty much any home lab device

First things first, I had to decide on the right system to run Frigate. Unlike ZoneMinder and BlueIris, which require a decent amount of firepower from the host machine, Frigate is a pretty lightweight container, and can work with practically any server node – be it an old system, a budget-friendly NAS, or even a Raspberry Pi!

After a little bit of internal debate, I went with my custom-built TrueNAS (Scale) storage server. Partly because I wanted to store my surveillance footage on my NAS without dealing with the privilege issues of a Linux share, and also because my storage server has enough processing power to run Frigate alongside a handful of other data-hoarding services.

However, I’ve previously set up Frigate on a Raspberry Pi. Using Docker simplified this process quite a bit, as I could just use the official docker-compose.yml file to spin up a container. While the newer RPi units can hold their own against Frigate, I wanted something with a little more oomph to manage my surveillance setup.

Getting back to TrueNAS, I created a Dataset exclusively for Frigate before locating the service inside the Discover Apps section. Then, I clicked on the Setup Pool to Install button before picking the dataset I’d set up earlier. I left most of the settings inside the Configuration section at their default values, though I toggled the checkmark next to the Enable No Auth option. While it makes my Frigate server somewhat insecure, it’s an easy way to access the container’s web UI during the inital setup. Plus, I can always add a new password as soon as I log into it.

If you’re using Docker to run Frigate, you can remove the # before port 5000:5000 inside the docker-compose.yml to access the web UI without authenticating yourself.

After starting the Frigate container, I used the Web UI (No Auth) button to access its web interface. The first thing I did was head to the Users tab and press the Update Password button under the admin. Once I’d created a new password, I quickly went back to the Frigate configuration by tapping the Edit button inside TrueNAS and unchecked the Enable No Auth setting.

Setting up cameras in Frigate

Ideally, you should go for IP cameras

With the Frigate container up and running, it was time to pair some cameras with it. I recently bought a couple of Tapo’s IP cameras, which are designed for surveillance projects. Once I’d connected the camera to my home network using its mobile app, I opened the Configuration Editor section within the Settings tab. Inside, I replaced the Camera header with my IP camera’s name and added its RTSP address under the path variable in the following format:

  • rtsp://username:password@ip-address:port-number/stream1
  • rtsp://ip-address:port-number/stream1 (for passwordless setups)

Once I’d saved the config, I restarted the Frigate container. Following the quick reboot, my IP camera appeared within the Frigate dashboard.

But you can also pair webcams and smartphone cameras with Frigate

Although IP cameras are ideal for Frigate, not everybody has a dedicated security camera lying around. Fortunately, there are a couple of ways to link old webcams and smartphone cameras with a Frigate container. Alfred Camera works pretty well on PC, and it does so by setting RTSP streams for my webcams.

Likewise, the IP Camera app can transmit smartphone camera footage over an RTSP stream, and it’s the same software I used when turning my old phone into a dash cam. Anyway, once you’ve got the RTSP URL for the camera/webcam, you can add it to your Frigate config file. Just make sure you define the ffmpeg, height, width, enabled, and other arguments for each camera. Me? I’d just copy the same code from the IP camera and modify the name, path, and resolution variables for each camera.

Face recognition and generative AI make Frigate even more useful

Be sure to configure the Zones properly

With the cameras added to Frigate, it’s time to set up motion detection, facial recognition, and other cool settings inside the surveillance container. The Mask/Zones tab within Frigate settings lets me set up specific areas where the camera continuously checks for movement. I’ve also configured the Motion Detection Tuner settings to ensure that Frigate doesn’t send false alerts.