import Heading from "@/components/ui/heading"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { useCallback, useEffect } from "react"; import { Toaster } from "sonner"; import { toast } from "sonner"; import { Separator } from "../../components/ui/separator"; import { Button } from "../../components/ui/button"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; import { del as delData } from "idb-keyval"; import { usePersistence } from "@/hooks/use-persistence"; import { isSafari } from "react-device-detect"; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, } from "../../components/ui/select"; const PLAYBACK_RATE_DEFAULT = isSafari ? [0.5, 1, 2] : [0.5, 1, 2, 4, 8, 16]; const WEEK_STARTS_ON = ["Sunday", "Monday"]; export default function UiSettingsView() { const { data: config } = useSWR("config"); const clearStoredLayouts = useCallback(() => { if (!config) { return []; } Object.entries(config.camera_groups).forEach(async (value) => { await delData(`${value[0]}-draggable-layout`) .then(() => { toast.success(`Cleared stored layout for ${value[0]}`, { position: "top-center", }); }) .catch((error) => { const errorMessage = error.response?.data?.message || error.response?.data?.detail || "Unknown error"; toast.error(`Failed to clear stored layout: ${errorMessage}`, { position: "top-center", }); }); }); }, [config]); const clearStreamingSettings = useCallback(async () => { if (!config) { return []; } await delData(`streaming-settings`) .then(() => { toast.success(`Cleared streaming settings for all camera groups.`, { position: "top-center", }); }) .catch((error) => { const errorMessage = error.response?.data?.message || error.response?.data?.detail || "Unknown error"; toast.error(`Failed to clear streaming settings: ${errorMessage}`, { position: "top-center", }); }); }, [config]); useEffect(() => { document.title = "General Settings - Frigate"; }, []); // settings const [autoLive, setAutoLive] = usePersistence("autoLiveView", true); const [playbackRate, setPlaybackRate] = usePersistence("playbackRate", 1); const [weekStartsOn, setWeekStartsOn] = usePersistence("weekStartsOn", 0); const [alertVideos, setAlertVideos] = usePersistence("alertVideos", true); return ( <>
General Settings Live Dashboard

Automatically switch to a camera's live view when activity is detected. Disabling this option causes static camera images on the your dashboards to only update once per minute.{" "} This is a global setting but can be overridden on each camera in camera groups only.

By default, recent alerts on the Live dashboard play as small looping videos. Disable this option to only show a static image of recent alerts on this device/browser.

Stored Layouts

The layout of cameras in a camera group can be dragged/resized. The positions are stored in your browser's local storage.

Camera Group Streaming Settings

Streaming settings for each camera group are stored in your browser's local storage.

Recordings Viewer
Default Playback Rate

Default playback rate for recordings playback.

Calendar
First Weekday

The day that the weeks of the review calendar begin on.

); }