Open source · Self-hosted · MIT

Skua

A fast, self-hosted viewer for your Frigate cameras.

WebRTC-first, LAN-only by design, one static binary under 9 MB. A focused live-and-events client that complements Frigate rather than replacing it.

View on GitHub
Skua camera grid on iPhone — Sauna, Entrance and Garden tiles, 6 online and 1 offline, HD/ECO toggle. Grid · cam1–cam7
Skua single-camera focus view of the Sauna camera streaming over WebRTC. Focus · WebRTC
01 The problem

A focused Frigate client for the everyday check.

Frigate's own PWA is the right tool for admin, Explore, history scrubbing, and settings. But for the everyday "just show me the cameras" check, especially from an iPhone home screen, its MSE-based grid can time out and is slow to first paint on the installed iOS PWA.

Skua exists for that one workflow, and nothing else.

02 What Skua is

A self-hosted PWA in front of your Frigate.

It does three things and keeps out of the way. Install it to your iPhone or Android home screen; Frigate's own UI stays put for everything else.

Single-camera live focus view on a phone, streaming via WebRTC.
/ live

Live focus view

Single camera over WebRTC (WHEP), sub-500 ms.

Camera grid showing six online tiles and one offline, with HD and ECO bandwidth modes.
/ grid

Camera grid

JPEG snapshot tiles at 1 Hz. HD or bandwidth-saving ECO mode, server-side resized.

Real-time filterable events list with thumbnails, camera filters and detection-type filters.
/ events

Events

A real-time, filterable list with inline clip playback that actually works in iOS Safari.

03 Features

Beyond live, grid, and events.

The details that make Skua pleasant to run alongside Frigate. Everything here ships in the image you can docker pull today. No roadmap promises.

f01 ios safari

Inline clip playback on iOS

HEVC hev1hvc1 retag plus a Range-aware LRU cache. Clips play inline in iOS Safari, where they normally won't.

f02 ~9 MB · distroless

Single static Go binary

~9 MB distroless image, multi-arch (amd64 + arm64). One process: no runtime, no agent.

f03 go2rtc · per camera

Pick the stream per camera

Choose which go2rtc stream each camera's live view uses, from the app — no Frigate-config edit. Camera groups and friendly names are editable in-app too.

f04 discovery · audio

Dynamic discovery

Refresh the camera list from Frigate on demand, no restart. Audio is detected per camera at runtime.

f05 server-side prefs

Preferences sync across devices

Stored server-side rather than in localStorage. Every device in the household stays in step.

04 Security & access model
Position · not fine print

Skua has no application-level login. That's by design.

It's built to run on a trusted local network and is reachable only at the Docker host's address. Putting it on the public internet without your own auth layer (a reverse proxy with auth, a VPN, or a zero-trust tunnel) is unsafe and unsupported.

This is a scope decision, not a missing feature. The threat model and hardening notes live in SECURITY.md.

05 Quick start

Drop into your Frigate stack.

Add the service to your existing Frigate Compose stack and bring it up.

compose.yaml yaml
services:
  skua:
    image: ghcr.io/skua-app/skua:latest
    container_name: skua
    restart: unless-stopped
    ports:
      - "3200:3200"
    volumes:
      - ./data:/data
$docker compose up -d

Open http://<docker-host>:3200 from a device on the same network.

On first run Skua shows a setup wizard. Enter your Frigate URL, hit Test connection, then Save and start — the values are written to /data/config.yaml and the grid populates within a second or two as cameras come online.

Prefer declarative config? Set FRIGATE_URL / GO2RTC_URL as environment variables to skip the wizard, or put Skua behind a reverse proxy for HTTPS and a friendly hostname. Both are covered in the README.

If Frigate runs in the same Docker network, frigate is enough — otherwise substitute the host or IP that resolves to your Frigate container.

06 Requirements

What you need.

Skua talks to a Frigate you already run. Nothing exotic; defaults assumed.

R · 01

Frigate 0.17.1

Talks to the internal API on :5000 — no auth. Not the authed :8971 UI port.

R · 02

go2rtc 1.9.10

The version that ships with Frigate 0.17.1.

R · 03

Docker & Compose v2

Linux host. x86_64 or aarch64.

R · 04

A trusted LAN

There is no login, so run Skua only on a network you control.

R · 05

H.264 aliases in Frigate

Cameras configured with *_main_h264 aliases for iOS WebRTC compatibility.

R · 06

Optional: reverse proxy with HTTPS

iPhone home-screen install needs TLS — PWA install requires it.

Copied to clipboard