Skip to content

Frigate NVR ​

Sistema de cámaras autoalojado con detección de objetos por IA. Frigate procesa los streams de cámaras RTSP/ONVIF localmente, ejecuta la detección de objetos en CPU (u opcionalmente Coral TPU / iGPU con OpenVINO / GPU con CUDA) y graba clips activados por movimiento. Crow expone cámaras, eventos, snapshots y clips a través de herramientas MCP para que tu asistente de IA pueda razonar sobre lo que está pasando en tu propiedad — sin que ninguna grabación salga de tu red doméstica.

Qué obtienes ​

  • Detección local de objetos por IA (persona, auto, perro, paquete, etc.)
  • Grabación activada por movimiento con retención configurable
  • API REST autenticada con JWT en el puerto :8971
  • Panel "Cameras" en el Crow's Nest: lista de cámaras, eventos recientes con miniaturas, estadísticas del sistema
  • Herramientas MCP para cámaras, eventos, snapshots, clips y activación/desactivación de la detección
  • La interfaz web propia de Frigate integrada como pestaña en el panel del Nest

Cuándo usarlo vs MotionEye ​

FrigateMotionEye
Detección de objetos por IASí (local, CPU/Coral/OpenVINO/CUDA)No
Cámaras RTSP / ONVIFSíSí
Webcams USBNoSí
HardwarePreferible x86 (Pi 5 + Coral funciona)Apto para clase Pi
InterfazSPA moderna en ReactAdministrador web clásico
Herramientas MCP de CrowCompletas (eventos, clips, snapshots, activación de detección)Solo iframe

Elige Frigate si tienes cámaras RTSP y quieres que "¿quién estuvo en la puerta principal a las 9pm?" se responda automáticamente. Elige MotionEye para un despliegue ligero en Pi o configuraciones con webcam USB.

Configuración ​

Instalar el bundle ​

"Crow, instala el bundle de Frigate"

O vía Extensiones en el Crow's Nest → busca Frigate bajo Cámaras.

Esto ejecuta Frigate en Docker usando la imagen oficial ghcr.io/blakeblackshear/frigate:stable y expone:

  • :8971 — interfaz + API REST autenticadas (solo loopback)
  • :8554 — restreamer RTSP (solo loopback)
  • :8555 — WebRTC para vista en vivo de baja latencia (solo loopback, como todos los puertos de Crow; los demás dispositivos miran a través de la interfaz autenticada)

El puerto 5000 (la API interna no autenticada de Frigate) intencionalmente no se publica.

Contraseña de administrador del primer arranque ​

Frigate genera una contraseña de administrador en el primer inicio. Encuéntrala en los logs del contenedor:

bash
docker logs crow-frigate 2>&1 | grep "Password:"

Configura esto en ~/.crow/bundles/frigate/.env:

bash
FRIGATE_URL=http://localhost:8971
FRIGATE_USER=admin
FRIGATE_PASSWORD=<contraseña de los logs>

Luego reinicia el bundle para que el servidor MCP pueda autenticarse:

"Crow, reinicia el bundle de Frigate"

También deberías iniciar sesión en la interfaz web y rotar la contraseña.

Agregar una cámara ​

Edita ~/.crow/data/frigate/config/config.yml (creado a partir de bundles/frigate/config.yml.example durante la instalación). Ejemplo de fuente RTSP:

yaml
cameras:
  front_door:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://user:pass@192.168.1.42:554/stream
          roles:
            - detect
            - record
    detect:
      width: 1280
      height: 720
      fps: 5
    objects:
      track:
        - person
        - car
        - dog

Luego:

"Crow, reinicia el bundle de Frigate"

La cámara debería aparecer en el panel "Cameras" del Crow's Nest y vía crow_frigate_list_cameras.

Disciplina de disco ​

La retención por defecto es de 7 días de grabaciones activadas por movimiento. Fórmula aproximada:

GB/día ≈ cámaras × bitrate_mbps × 10.8

Una cámara 1080p a 2 Mbps → ~22 GB por 7 días de grabación continua, menos si es solo por movimiento. Verifica el espacio disponible en disco antes de aumentar record.retain.days:

bash
df -h ~/.crow/data/frigate/media

El script de instalación del bundle aborta si hay menos de 10 GB libres en el sistema de archivos de destino, y advierte por debajo de 50 GB. Una watchlist de limpieza alerta si el directorio de media supera los 30 GB.

Herramientas MCP ​

HerramientaPropósito
crow_frigate_list_camerasLista de cámaras con estado de detección/grabación
crow_frigate_list_eventsEventos filtrados por cámara, etiqueta, ventana de tiempo
crow_frigate_latest_by_labelEvento más reciente para una etiqueta (ej., "la persona más reciente")
crow_frigate_snapshotURL del snapshot de un evento o el más reciente de una cámara
crow_frigate_clip_urlURL del clip MP4 de un evento
crow_frigate_set_detectActivar/desactivar la detección por cámara (destructivo — requiere confirm: true)
crow_frigate_statsVersión, uptime, tiempo de inferencia del detector, cantidad de procesos

Ejemplos de prompts ​

"¿Qué cámaras de Frigate tengo?" → llama a crow_frigate_list_cameras

"¿Hubo alguien en la puerta principal entre las 8pm y las 10pm de anoche?" → llama a crow_frigate_list_events con filtros de cámara, label=person, after/before

"Muéstrame la detección de auto más reciente" → llama a crow_frigate_latest_by_label con label=car

"Dame la URL del clip del evento abc123" → llama a crow_frigate_clip_url

Compartir snapshots/clips fuera del tailnet ​

Las URLs de Frigate están autenticadas y funcionan solo desde el gateway de Crow o el iframe del panel del Nest. NO compartas URLs crudas de Frigate fuera del tailnet — no funcionarán (el receptor no tiene sesión) y, aunque funcionaran, eso expondría la interfaz de Frigate externamente.

Para compartir externamente: primero sube el archivo vía crow_upload_file y luego comparte la URL de almacenamiento de Crow resultante.

Solución de problemas ​

"Cannot reach Frigate" El contenedor no está en ejecución. Inícialo:

bash
cd ~/.crow/bundles/frigate && docker compose up -d

"Frigate authentication expired or invalid"FRIGATE_USER / FRIGATE_PASSWORD en .env están mal o faltan. Vuelve a revisar los logs del contenedor para encontrar la contraseña del primer arranque, o usa un usuario que hayas creado en la interfaz web. Reinicia el bundle después de editar .env.

"Frigate endpoint not found" Desfase de versiones. Nuestro bundle apunta a :stable, que actualmente resuelve a Frigate 0.17. Si una versión futura cambia las rutas de los endpoints, abre un issue.

El tile no aparece en el panel de Extensiones El bundle está instalado en ~/.crow/bundles/frigate/ pero faltan panels.json / los symlinks del panel. Vuelve a ejecutar:

bash
~/crow/scripts/crow bundle install frigate

y verifica que ~/.crow/panels/frigate.js exista. Luego reinicia el gateway.

No se puede acceder a la pestaña de la interfaz web en el panel del Nest La cookie JWT de Frigate es de primera parte para :8971. El iframe debe cargarse desde el mismo host donde Frigate está publicado. Si el iframe del panel muestra una página en blanco, confirma que FRIGATE_URL apunte a una URL accesible desde el navegador.

Trabajo futuro ​

  • Aceleración con Coral TPU — requiere libedgetpu1-std en el host, reglas udev, montar /dev/bus/usb y un workaround conocido de re-enumeración USB3. No está cableado en v1.
  • Stream de eventos MQTT — Frigate puede enviar eventos a MQTT en tiempo real. Conectar esto a las notificaciones de Crow (para que "persona detectada en la puerta principal" se convierta en una notificación push) necesita un broker mosquitto y un puente de eventos a notificaciones.
  • Auto-vinculación con Home Assistant — funciona en la capa MQTT. Instala tanto el bundle de Home Assistant como un broker para conectarlo.

Notas de seguridad ​

  • El puerto interno 5000 de Frigate no está autenticado y deliberadamente no se publica. No lo expongas.
  • El puerto 8971 (interfaz autenticada) está vinculado a loopback por defecto. El panel del Nest hace proxy a través del límite de autenticación del gateway de Crow.
  • Nunca mapees /dashboard/frigate, /api/frigate/* ni /frigate/* a un prefijo de Tailscale Funnel — el middleware rejectFunneled lo impide, y tests/auth-network.test.js tiene una prueba de regresión para ello.

Released under the MIT License.