Tenía un sistema de cámaras de vigilancia barato conectado a una app del fabricante que guardaba las grabaciones en su nube. Funcionaba. Veía las notificaciones, podía revisar lo que había grabado, y en general hacía lo que prometía. El problema era que no sabía exactamente qué hacía el fabricante con esas grabaciones, la app dejó de funcionar bien después de una actualización, y cuando intenté exportar mis propias grabaciones resultó que el proceso era más complicado de lo razonable.
Busqué alternativas y acabé en Frigate. Llevo año y medio usándolo y es uno de los proyectos de self-hosting que más satisfacción me ha dado, no porque sea fácil de configurar, sino porque cuando funciona bien lo hace de una forma que ningún sistema comercial replica.
Qué hace Frigate exactamente#
Frigate es un NVR (Network Video Recorder) que corre como container Docker o en Home Assistant como addon. Recibe el stream de las cámaras por RTSP, lo graba, y además analiza el vídeo en tiempo real usando modelos de detección de objetos para identificar personas, coches, gatos, perros, y otros objetos que puedes configurar.
La diferencia con un NVR tradicional es esa detección. Un NVR básico graba cuando detecta movimiento por cambios de píxeles, lo que genera toneladas de falsos positivos: una hoja que cae, un coche pasando a lo lejos, una sombra. Frigate usa un modelo de detección real para distinguir si ese movimiento es una persona o no. En la práctica esto significa recibir muchas menos notificaciones falsas.
Para la detección en tiempo real Frigate puede usar la CPU, una GPU, o un acelerador dedicado como el Google Coral TPU. Con CPU el rendimiento es limitado y el consumo alto. Con Coral TPU puedes procesar múltiples cámaras en tiempo real con un consumo adicional de apenas 2-3 vatios.
El hardware que uso#
Mi setup tiene cuatro cámaras IP compatibles con RTSP. Tres son de marcas chinas que compré hace tiempo en AliExpress y una es una Reolink que compré después de que Frigate me diera suficiente confianza en el sistema.
Frigate corre en un mini PC con un Intel N100, 16GB de RAM, y un SSD de 1TB para las grabaciones. También tengo un Google Coral USB conectado para la detección.
El Coral USB es el acelerador dedicado de Google para inferencia de modelos de detección. Cuesta alrededor de 60-70 euros y la diferencia en rendimiento es enorme. Sin Coral, con CPU, el N100 puede manejar cómodamente una o dos cámaras en detección continua pero las cuatro juntas lo saturan. Con el Coral, las cuatro cámaras corren a 5fps de detección sin que el procesador supere el 15% de carga.
No es imprescindible tener Coral para empezar. Si tienes dos o tres cámaras y una CPU decente, funciona bien sin él. Pero si piensas escalar o si el sistema te da latencias altas en la detección, el Coral resuelve el problema de raíz.
Cómo funciona la configuración#
Frigate se configura con un único archivo YAML. Al principio puede parecer intimidante, pero la estructura es bastante lógica una vez que entiendes las secciones principales.
El archivo tiene secciones para:
- Detectors: define el hardware de inferencia (CPU, Coral, NVIDIA GPU)
- Cameras: define cada cámara con su URL de stream y las zonas de detección
- Objects: qué objetos detectar y con qué umbral de confianza
- Record: cuánto tiempo guardar las grabaciones y bajo qué condiciones
- Snapshots: si quieres guardar imágenes estáticas de cada detección
- MQTT: para conectar con Home Assistant y enviar eventos
Un ejemplo mínimo de configuración para una cámara tendría este aspecto:
| |
Esto configura Frigate para detectar personas y coches en una cámara, guardar grabaciones durante 7 días cuando hay movimiento, y guardar snapshots de las detecciones durante 14 días.
La URL RTSP es lo que varía más entre fabricantes de cámaras. La mayoría tienen documentación sobre el formato de la URL, pero si no la encuentras, hay herramientas como onvif-device-manager que permiten descubrir las URLs automáticamente en la red local.
Las zonas y las máscaras#
Una de las funciones de Frigate que más tiempo me costó entender, pero que más valor me ha dado, es el sistema de zonas y máscaras de movimiento.
Las máscaras de movimiento sirven para ignorar regiones de la imagen donde siempre hay movimiento que no te interesa. Si tienes una cámara que encuadra una ventana con el exterior, el movimiento de los coches en la calle generará detecciones constantes que no te aportan nada. Con una máscara de movimiento cubres esa zona y Frigate no la analiza.
Las zonas son regiones de la imagen a las que puedes dar nombre y luego usar en automatizaciones. Por ejemplo, puedes definir una zona “puerta_principal” en el tercio inferior de la imagen de la cámara de la entrada, y configurar que solo te notifique cuando una persona sea detectada dentro de esa zona específica, no en cualquier punto de la imagen.
Esto parece un detalle técnico pero en la práctica cambia completamente la utilidad del sistema. Sin zonas, recibes una notificación cada vez que alguien pasa por la acera frente a tu casa. Con zonas bien definidas, solo recibes la notificación cuando alguien entra en el área de la puerta.
Las máscaras se definen como polígonos en coordenadas de píxeles. Frigate tiene una interfaz web donde puedes dibujar las máscaras visualmente sobre la imagen de la cámara, lo que es mucho más cómodo que calcular coordenadas a mano.
Integración con Home Assistant#
Frigate tiene integración oficial con Home Assistant a través de MQTT. Una vez configurado, cada cámara aparece en Home Assistant como:
- Una entidad de cámara con la imagen en tiempo real
- Sensores binarios para cada tipo de objeto detectado (person_detected, car_detected, etc.)
- Sensores de conteo para cuántos objetos de cada tipo hay en la imagen
- Una entidad para el último evento de cada tipo, con la imagen del snapshot
Con esto puedes crear automatizaciones como:
- Notificación al móvil cuando se detecta una persona en la entrada entre las 23:00 y las 07:00
- Encender las luces del exterior cuando se detecta una persona en el jardín
- Guardar una imagen en Telegram cuando alguien llama al timbre (si tienes un doorbell compatible)
La integración MQTT es confiable pero requiere tener un broker MQTT corriendo, que en un homelab con Home Assistant ya tienes normalmente con Mosquitto.
Desde 2023 hay también una integración nativa de Frigate para Home Assistant que se puede instalar desde HACS y simplifica bastante la configuración, porque no necesitas configurar MQTT manualmente.
El almacenamiento de vídeo#
El almacenamiento es el factor que más condiciona el diseño del sistema. Cuatro cámaras grabando 24 horas al día en calidad decente generan entre 30 y 80GB diarios dependiendo de la resolución, el bitrate, y cuánto movimiento hay en las imágenes.
Frigate tiene varias estrategias de retención:
Continua: graba todo el tiempo. Consume mucho espacio. Motion: graba cuando hay movimiento detectado por cambios de píxeles. Menos espacio. Active objects: graba cuando Frigate detecta un objeto de los que has configurado. El modo más eficiente en espacio.
Yo uso “active objects” para la retención principal de 7 días, y tengo configurados snapshots de los eventos de detección que guardo durante 30 días. Los snapshots ocupan muy poco (unas imágenes JPEG) y me permiten revisar el historial de eventos sin necesidad de buscar en el vídeo.
Para el almacenamiento en sí, tengo montado un NAS en la red local con un recurso compartido NFS, y Frigate guarda ahí las grabaciones. Esto separa el almacenamiento del compute, lo que facilita hacer backups y ampliar capacidad sin tocar el servidor de Frigate.
El directorio de medios de Frigate tiene esta estructura:
| |
Con “active objects” y 7 días de retención para cuatro cámaras, consumo alrededor de 120-150GB. Con “continuous” serían más de 500GB a la semana.
Lo que falla y lo que no#
Frigate no es una aplicación pulida de consumo. Es un proyecto de código abierto con curva de aprendizaje real.
Lo que funciona bien: la detección de personas es bastante fiable cuando el modelo tiene condiciones decentes de iluminación. Los falsos negativos con buena luz son raros. La integración con Home Assistant es sólida y estable. La interfaz web es funcional para revisar eventos y grabaciones.
Lo que da problemas: las cámaras de baja calidad con compresión agresiva generan artefactos que confunden al modelo de detección. Con poca luz o contraluces fuertes, la detección empeora notablemente. La configuración inicial requiere paciencia porque un YAML mal formado o una URL RTSP incorrecta no siempre da mensajes de error muy claros.
El consumo de CPU sin acelerador hardware es alto. En un Raspberry Pi 4 sin Coral puedes manejar una o dos cámaras en detección, pero cuatro es demasiado. Si el hardware es limitado, empieza con una sola cámara y la detección a 2fps en lugar de 5.
Las actualizaciones a veces rompen cosas. No con frecuencia, pero pasa. Antes de actualizar Frigate en un sistema en producción, leo el changelog y espero un par de días para ver si hay reportes de problemas en el subreddit de r/homelab o en el Discord de Frigate.
Alternativas y comparativa#
Antes de Frigate probé MotionEye y ZoneMinder. Ambos funcionan como NVRs básicos con detección por movimiento de píxeles. Son más fáciles de configurar y consumen menos recursos. Pero no tienen detección de objetos integrada de serie, lo que significa más falsos positivos y menos utilidad práctica.
Hay plugins y integraciones para añadir detección de objetos a ZoneMinder, pero la integración no es tan limpia como en Frigate, donde toda la pipeline está diseñada alrededor de la detección desde el principio.
Si lo único que necesitas es grabar vídeo y reproducirlo, ZoneMinder o MotionEye son más sencillos. Si quieres detección de objetos, automatizaciones basadas en eventos reales (no solo movimiento), y una buena integración con Home Assistant, Frigate no tiene competencia real en el mundo self-hosted.
Scrypted es otra opción que mencionan bastante. Tiene una arquitectura diferente y también soporta HomeKit Secure Video, que es interesante si usas Apple. Lo probé brevemente pero volví a Frigate porque la documentación y la comunidad son mejores.
Por dónde empezar#
Si quieres montar Frigate, el camino más sencillo es instalarlo como addon de Home Assistant si ya tienes HA. Se instala desde la tienda de addons, la configuración inicial es un YAML básico con tu cámara, y tienes la primera detección funcionando en una tarde.
Si no tienes Home Assistant o prefieres más control, Docker Compose es la otra opción. La imagen oficial es ghcr.io/blakeblackshear/frigate y el único volumen imprescindible es el directorio de medios donde va a guardar las grabaciones.
Para la primera cámara, configura solo detect y deja record y snapshots para después. Valida que la URL RTSP funciona, que los objetos se detectan correctamente, que las máscaras cubren las zonas de falsos positivos, y luego activa el grabado.
No pongas retención de vídeo continua desde el principio. Empieza con “motion” o “active objects” y ajusta según el espacio disponible.
La documentación oficial de Frigate es bastante completa y está actualizada. Antes de buscar soluciones en foros, vale la pena leer la sección correspondiente de la doc, porque suele tener la respuesta.
Un año y medio después, el sistema de cámaras es lo que uso más de mi homelab después de Home Assistant. No porque lo mire constantemente, sino porque cuando lo necesito funciona exactamente como espero. Las notificaciones son reales, no ruido. Las grabaciones están donde deben. Y todo corre en hardware mío, con datos que solo tengo yo.
No es el sistema más fácil de montar. Pero una vez que está configurado, es difícil volver a depender de la nube de un fabricante para algo tan básico como ver lo que pasa en tu propia puerta.