-
Generic Hardware Acceleration
+
Generic Hardware Devices
{deviceId !== "stable" && (
Some options have been auto-configured based on your device type.
From 39f94919719ad2b264538cfb248f8edca821e865 Mon Sep 17 00:00:00 2001
From: GuoQing Liu <842607283@qq.com>
Date: Wed, 29 Apr 2026 04:23:56 +0800
Subject: [PATCH 07/22] Remove port 5000 configuration for security reasons
Removed unauthenticated Web UI port 5000 from configuration due to security risks.
---
.../DockerComposeGenerator/config/config.yaml | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index 5711f66ec..09b538281 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -267,18 +267,6 @@ ports:
defaultEnabled: true
locked: true
- - id: "5000"
- host: 5000
- container: 5000
- protocol: "tcp"
- description: "Unauthenticated Web UI port (not recommended)"
- defaultEnabled: false
- requiresConfirmation: true
- warningType: "danger"
- warningContent: "Exposing port 5000 allows **unauthenticated access** to your Frigate instance. Anyone on your network (or the internet if you have a public IP) could access it without any credentials. This may lead to **unauthorized access**, **privacy leaks**, or further attacks. Ensure you have proper firewall rules or VPN in place before enabling this."
- confirmationLabel: "I understand the risk and confirm enabling port 5000"
- cooldownSeconds: 10
-
- id: "8554"
host: 8554
container: 8554
@@ -305,4 +293,4 @@ ports:
container: 1984
protocol: "tcp"
description: "Go2RTC Web UIport"
- defaultEnabled: false
\ No newline at end of file
+ defaultEnabled: false
From 6cc4db1103f03634ddf13fba4e82b4a458673fea Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Wed, 29 Apr 2026 14:13:32 +0800
Subject: [PATCH 08/22] docs: remove 5000 port tips
---
.../DockerComposeGenerator.tsx | 6 +-
.../components/PortConfig.tsx | 122 +++++-------------
.../DockerComposeGenerator/config/config.yaml | 3 +-
.../DockerComposeGenerator/config/types.ts | 8 +-
.../hooks/useConfigGenerator.ts | 16 +--
.../hooks/useCooldown.ts | 42 ------
6 files changed, 44 insertions(+), 153 deletions(-)
delete mode 100644 docs/src/components/DockerComposeGenerator/hooks/useCooldown.ts
diff --git a/docs/src/components/DockerComposeGenerator/DockerComposeGenerator.tsx b/docs/src/components/DockerComposeGenerator/DockerComposeGenerator.tsx
index 0779f4249..b8a8a8fc8 100644
--- a/docs/src/components/DockerComposeGenerator/DockerComposeGenerator.tsx
+++ b/docs/src/components/DockerComposeGenerator/DockerComposeGenerator.tsx
@@ -32,12 +32,12 @@ function renderHelpText(text: string): React.ReactNode {
export default function DockerComposeGenerator() {
const {
deviceId, device, hardwareEnabled,
- portEnabled, port5000Confirmed,
+ portEnabled,
nvidiaGpuCount, nvidiaGpuDeviceId,
configPath, mediaPath, rtspPassword, timezone, shmSize,
shmSizeError, gpuDeviceIdError, configPathError, mediaPathError,
hasAnyHardware, generatedYaml,
- selectDevice, toggleHardware, togglePort, setPort5000Confirmed,
+ selectDevice, toggleHardware, togglePort,
handleShmSizeChange, handleConfigPathChange, handleMediaPathChange,
handleNvidiaGpuCountChange, handleNvidiaGpuDeviceIdChange,
setRtspPassword, setTimezone, isHardwareDisabled,
@@ -82,9 +82,7 @@ export default function DockerComposeGenerator() {
;
- port5000Confirmed: boolean;
onTogglePort: (portId: string) => void;
- onConfirm5000: (confirmed: boolean) => void;
}
-function Port5000Confirmation({
- portEnabled,
- confirmed,
+function PortItem({
+ port,
+ enabled,
onToggle,
- onConfirm,
}: {
- portEnabled: boolean;
- confirmed: boolean;
+ port: typeof ports[number];
+ enabled: boolean;
onToggle: () => void;
- onConfirm: (confirmed: boolean) => void;
}) {
- const { remaining, start, stop } = useCooldown(10);
-
- React.useEffect(() => {
- if (portEnabled) {
- start();
- } else {
- stop();
- onConfirm(false);
- }
- return stop;
- }, [portEnabled]);
+ const showWarning = port.warningContent && (
+ port.warningWhen === "checked" ? enabled :
+ port.warningWhen === "unchecked" ? !enabled : enabled
+ );
return (
-
- {portEnabled && (
-
-
- Exposing port 5000 allows unauthenticated access to
- your Frigate instance. Anyone on your network (or the internet if you
- have a public IP) could access it without credentials.
-
-
- This may lead to unauthorized access ,{" "}
- privacy leaks , or further attacks. Ensure you have
- proper firewall rules or VPN in place.
-
- 0 ? styles.checkboxDisabled : ""}`}
- >
- onConfirm(e.target.checked)}
- disabled={remaining > 0}
- />
-
- I understand the risk and confirm enabling port 5000
- {remaining > 0 && ` (${remaining}s)`}
-
-
-
- )}
-
+
+
- Port 5000 (unauthenticated access)
- ⚠️ Expose carefully
+
+ {port.locked && "🔒 "}
+ Port {port.host}
+ {port.protocol !== "tcp" && `/${port.protocol}`}
+
+ {port.description && (
+
{port.description}
+ )}
+ {showWarning && (
+
+ {port.warningContent}
+
+ )}
);
}
export default function PortConfigSection({
portEnabled,
- port5000Confirmed,
onTogglePort,
- onConfirm5000,
}: Props) {
return (
Port Configuration
-
- {/* All ports except 5000 */}
- {ports
- .filter((p) => p.id !== "5000")
- .map((port) => (
-
-
- onTogglePort(port.id)}
- disabled={port.locked}
- />
-
- {port.locked && "🔒 "}
- Port {port.host}
- {port.protocol !== "tcp" && `/${port.protocol}`}
-
-
- {port.description && (
-
{port.description}
- )}
-
- ))}
+ {ports.map((port) => (
+
onTogglePort(port.id)}
+ />
+ ))}
-
- {/* Port 5000 with special warning — placed last */}
-
onTogglePort("5000")}
- onConfirm={onConfirm5000}
- />
);
}
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index 09b538281..22734a1bf 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -265,7 +265,8 @@ ports:
protocol: "tcp"
description: "Authenticated UI and API access (default HTTPS)"
defaultEnabled: true
- locked: true
+ warningContent: "This is the access port for Frigate. Closing it means you will no longer be able to access the instance."
+ warningWhen: "unchecked"
- id: "8554"
host: 8554
diff --git a/docs/src/components/DockerComposeGenerator/config/types.ts b/docs/src/components/DockerComposeGenerator/config/types.ts
index 6d9b048f0..87bcb608d 100644
--- a/docs/src/components/DockerComposeGenerator/config/types.ts
+++ b/docs/src/components/DockerComposeGenerator/config/types.ts
@@ -145,14 +145,10 @@ export interface PortConfig {
defaultEnabled: boolean;
/** Whether this port is locked (always enabled, cannot be toggled off) */
locked?: boolean;
- /** Whether this port requires a confirmation step before enabling */
- requiresConfirmation?: boolean;
/** Admonition type for the warning */
warningType?: "warning" | "danger";
/** Warning content (markdown) */
warningContent?: string;
- /** Confirmation checkbox label */
- confirmationLabel?: string;
- /** Cooldown in seconds before the confirmation checkbox becomes available */
- cooldownSeconds?: number;
+ /** When to show the warning: when the port is checked or unchecked */
+ warningWhen?: "checked" | "unchecked";
}
diff --git a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
index 994ac631a..72821be26 100644
--- a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
+++ b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
@@ -29,7 +29,6 @@ export function useConfigGenerator() {
return initial;
});
- const [port5000Confirmed, setPort5000Confirmed] = useState(false);
const [nvidiaGpuCount, setNvidiaGpuCount] = useState("all");
const [nvidiaGpuDeviceId, setNvidiaGpuDeviceId] = useState("");
const [configPath, setConfigPath] = useState("");
@@ -69,13 +68,7 @@ export function useConfigGenerator() {
const togglePort = useCallback((portId: string) => {
const port = portMap.get(portId);
if (port?.locked) return;
- setPortEnabled((prev) => {
- const next = { ...prev, [portId]: !prev[portId] };
- if (portId === "5000" && !next[portId]) {
- setPort5000Confirmed(false);
- }
- return next;
- });
+ setPortEnabled((prev) => ({ ...prev, [portId]: !prev[portId] }));
}, []);
const isHardwareDisabled = useCallback(
@@ -149,7 +142,6 @@ export function useConfigGenerator() {
const lines: string[] = [];
for (const [id, enabled] of Object.entries(portEnabled)) {
if (!enabled) continue;
- if (id === "5000" && !port5000Confirmed) continue;
const p = portMap.get(id);
if (!p) continue;
const proto = p.protocol && p.protocol !== "tcp" ? `/${p.protocol}` : "";
@@ -157,7 +149,7 @@ export function useConfigGenerator() {
lines.push(` - "${p.host}:${p.container}${proto}"${comment}`);
}
return lines;
- }, [portEnabled, port5000Confirmed]);
+ }, [portEnabled]);
const selectedHardwareIds = useMemo(() => {
return Object.entries(hardwareEnabled)
@@ -195,11 +187,11 @@ export function useConfigGenerator() {
return {
deviceId, device, hardwareEnabled, portEnabled,
- port5000Confirmed, nvidiaGpuCount, nvidiaGpuDeviceId,
+ nvidiaGpuCount, nvidiaGpuDeviceId,
configPath, mediaPath, rtspPassword, timezone, shmSize,
shmSizeError, gpuDeviceIdError, configPathError, mediaPathError,
hasAnyHardware, generatedYaml,
- selectDevice, toggleHardware, togglePort, setPort5000Confirmed,
+ selectDevice, toggleHardware, togglePort,
handleShmSizeChange, handleConfigPathChange, handleMediaPathChange,
handleNvidiaGpuCountChange, handleNvidiaGpuDeviceIdChange,
setRtspPassword, setTimezone, isHardwareDisabled,
diff --git a/docs/src/components/DockerComposeGenerator/hooks/useCooldown.ts b/docs/src/components/DockerComposeGenerator/hooks/useCooldown.ts
deleted file mode 100644
index 253edca87..000000000
--- a/docs/src/components/DockerComposeGenerator/hooks/useCooldown.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { useState, useEffect, useCallback, useRef } from "react";
-
-/**
- * Hook for a countdown timer (e.g. cooldown before confirming port 5000).
- */
-export function useCooldown(initialSeconds: number) {
- const [remaining, setRemaining] = useState(0);
- const timerRef = useRef | null>(null);
-
- const start = useCallback(() => {
- // Clear any existing timer
- if (timerRef.current) clearInterval(timerRef.current);
- setRemaining(initialSeconds);
- timerRef.current = setInterval(() => {
- setRemaining((prev) => {
- if (prev <= 1) {
- if (timerRef.current) clearInterval(timerRef.current);
- timerRef.current = null;
- return 0;
- }
- return prev - 1;
- });
- }, 1000);
- }, [initialSeconds]);
-
- const stop = useCallback(() => {
- if (timerRef.current) {
- clearInterval(timerRef.current);
- timerRef.current = null;
- }
- setRemaining(0);
- }, []);
-
- // Cleanup on unmount
- useEffect(() => {
- return () => {
- if (timerRef.current) clearInterval(timerRef.current);
- };
- }, []);
-
- return { remaining, start, stop };
-}
From 4b421c66a5a145320c601e20ad4957a515a4dc7f Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Wed, 29 Apr 2026 14:42:29 +0800
Subject: [PATCH 09/22] docs: improve NVIDIA GPU count input
---
.../components/NvidiaGpuConfig.tsx | 13 ++++++------
.../DockerComposeGenerator/generator/index.ts | 2 +-
.../hooks/useConfigGenerator.ts | 20 +++++++++----------
3 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/components/NvidiaGpuConfig.tsx b/docs/src/components/DockerComposeGenerator/components/NvidiaGpuConfig.tsx
index 5863ac386..9c9be5e6a 100644
--- a/docs/src/components/DockerComposeGenerator/components/NvidiaGpuConfig.tsx
+++ b/docs/src/components/DockerComposeGenerator/components/NvidiaGpuConfig.tsx
@@ -16,6 +16,8 @@ export default function NvidiaGpuConfig({
onGpuCountChange,
onGpuDeviceIdChange,
}: Props) {
+ const showDeviceId = gpuCount !== "";
+
return (
@@ -25,16 +27,15 @@ export default function NvidiaGpuConfig({
onGpuCountChange(e.target.value)}
+ placeholder="all"
+ onChange={(e) => onGpuCountChange(e.target.value.replace(/\D/g, ""))}
/>
-
- Enter a number (e.g. 1, 2, 3) or "all" to use all GPUs
-
- {gpuCount !== "all" && (
+ {showDeviceId && (
GPU device IDs (required, comma-separated):
diff --git a/docs/src/components/DockerComposeGenerator/generator/index.ts b/docs/src/components/DockerComposeGenerator/generator/index.ts
index 24b8ab263..589d9b0b6 100644
--- a/docs/src/components/DockerComposeGenerator/generator/index.ts
+++ b/docs/src/components/DockerComposeGenerator/generator/index.ts
@@ -123,7 +123,7 @@ function buildEnvironment(
function buildDeploy(device: DeviceConfig, input: GeneratorInput): string[] {
if (device.id === "stable-tensorrt") {
const count = input.nvidiaGpuCount || "all";
- const isAll = count.toLowerCase() === "all";
+ const isAll = count === "all";
const deviceId = input.nvidiaGpuDeviceId?.trim();
if (isAll) {
diff --git a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
index 72821be26..394790b27 100644
--- a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
+++ b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
@@ -29,7 +29,7 @@ export function useConfigGenerator() {
return initial;
});
- const [nvidiaGpuCount, setNvidiaGpuCount] = useState("all");
+ const [nvidiaGpuCount, setNvidiaGpuCount] = useState("");
const [nvidiaGpuDeviceId, setNvidiaGpuDeviceId] = useState("");
const [configPath, setConfigPath] = useState("");
const [mediaPath, setMediaPath] = useState("");
@@ -56,7 +56,7 @@ export function useConfigGenerator() {
}
return next;
});
- setNvidiaGpuCount("all");
+ setNvidiaGpuCount("");
setNvidiaGpuDeviceId("");
setGpuDeviceIdError(false);
}, []);
@@ -121,15 +121,13 @@ export function useConfigGenerator() {
);
const handleNvidiaGpuCountChange = useCallback((value: string) => {
- const lower = value.trim().toLowerCase();
- if (lower === "all" || lower === "" || /^[0-9]+$/.test(lower)) {
- setNvidiaGpuCount(lower || "all");
- if (lower === "all") {
- setNvidiaGpuDeviceId("");
- setGpuDeviceIdError(false);
- } else if (/^[0-9]+$/.test(lower)) {
- setGpuDeviceIdError(false);
- }
+ // Only allow digits
+ setNvidiaGpuCount(value);
+ if (value === "") {
+ setNvidiaGpuDeviceId("");
+ setGpuDeviceIdError(false);
+ } else {
+ setGpuDeviceIdError(false);
}
}, []);
From 46a5eb4647e37e78fc4a3487d7af4c3baf9f58e9 Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Wed, 29 Apr 2026 14:42:48 +0800
Subject: [PATCH 10/22] docs: add docker compose tabs
---
docs/docs/frigate/installation.md | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/docs/docs/frigate/installation.md b/docs/docs/frigate/installation.md
index 1fc604c31..72e53e3bc 100644
--- a/docs/docs/frigate/installation.md
+++ b/docs/docs/frigate/installation.md
@@ -5,7 +5,8 @@ title: Installation
import ShmCalculator from '@site/src/components/ShmCalculator'
import DockerComposeGenerator from '@site/src/components/DockerComposeGenerator'
-
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
Frigate is a Docker container that can be run on any Docker host including as a [Home Assistant App](https://www.home-assistant.io/apps/). Note that the Home Assistant App is **not** the same thing as the integration. The [integration](/integrations/home-assistant) is required to integrate Frigate into Home Assistant, whether you are running Frigate as a standalone Docker container or as a Home Assistant App.
@@ -73,13 +74,6 @@ Users of the Snapcraft build of Docker cannot use storage locations outside your
:::
-### Docker Compose Generator
-
-Generate a Frigate Docker Compose configuration based on your hardware and requirements.
-
-
-
-
### Calculating required shm-size
Frigate utilizes shared memory to store frames during processing. The default `shm-size` provided by Docker is **64MB**.
@@ -477,6 +471,16 @@ Finally, configure [hardware object detection](/configuration/object_detectors#a
Running through Docker with Docker Compose is the recommended install method.
+
+
+
+Generate a Frigate Docker Compose configuration based on your hardware and requirements.
+
+
+
+
+
+
```yaml
services:
frigate:
@@ -510,6 +514,10 @@ services:
environment:
FRIGATE_RTSP_PASSWORD: "password"
```
+
+
+
+**Docker CLI**
If you can't use Docker Compose, you can run the container with something similar to this:
From 845a813651092928ca02694ce4caf3e077fd36ed Mon Sep 17 00:00:00 2001
From: GuoQing Liu <842607283@qq.com>
Date: Fri, 1 May 2026 21:51:44 +0800
Subject: [PATCH 11/22] Update
docs/src/components/DockerComposeGenerator/config/config.yaml
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
docs/src/components/DockerComposeGenerator/config/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index 22734a1bf..cc48a52d0 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -293,5 +293,5 @@ ports:
host: 1984
container: 1984
protocol: "tcp"
- description: "Go2RTC Web UIport"
+ description: "Go2RTC Web UI"
defaultEnabled: false
From 1df11f3ddd3099175de965a331bdc47eddd57eda Mon Sep 17 00:00:00 2001
From: GuoQing Liu <842607283@qq.com>
Date: Fri, 1 May 2026 21:51:58 +0800
Subject: [PATCH 12/22] Update
docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
.../DockerComposeGenerator/components/OtherOptions.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx b/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
index 3a14a2c16..c92804f07 100644
--- a/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
+++ b/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
@@ -38,7 +38,7 @@ export default function OtherOptions({
onChange={(e) => onRtspPasswordChange(e.target.value)}
/>
- Used as{" "}
+ Optional. You can specify{" "}
{"{FRIGATE_RTSP_PASSWORD}"} {" "}
in the config file to reference camera stream passwords. This is NOT
the Frigate login password.
From 8c9259a973563780dc712c115952900b09ac8061 Mon Sep 17 00:00:00 2001
From: GuoQing Liu <842607283@qq.com>
Date: Fri, 1 May 2026 21:52:06 +0800
Subject: [PATCH 13/22] Update
docs/src/components/DockerComposeGenerator/config/config.yaml
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
docs/src/components/DockerComposeGenerator/config/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index cc48a52d0..a1fc93165 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -172,7 +172,7 @@ hardware:
comment: "PCIe Coral — follow driver instructions at https://github.com/jnicolson/gasket-builder"
- id: "gpu"
- label: "GPU Acceleration (/dev/dri)"
+ label: "Intel/AMD GPU (/dev/dri)"
description: "Pass through /dev/dri for GPU hardware acceleration (Intel/AMD)."
disabledWhen:
- "stable-tensorrt-jp6"
From f75e9c30d0dc9785b42b40dd77e0973a9a69ca89 Mon Sep 17 00:00:00 2001
From: GuoQing Liu <842607283@qq.com>
Date: Fri, 1 May 2026 21:52:15 +0800
Subject: [PATCH 14/22] Update
docs/src/components/DockerComposeGenerator/config/config.yaml
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
docs/src/components/DockerComposeGenerator/config/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index a1fc93165..f32ab6b37 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -242,7 +242,7 @@ hardware:
comment: "AXERA libraries"
- id: "video11"
- label: "Raspberry Pi video11"
+ label: "Raspberry Pi (/dev/video11)"
description: "Pass through /dev/video11 for Raspberry Pi 4B hardware acceleration."
disabledWhen:
- "stable-tensorrt"
From feda1c791c5406297b06d9763da342c66d90635c Mon Sep 17 00:00:00 2001
From: GuoQing Liu <842607283@qq.com>
Date: Fri, 1 May 2026 21:52:25 +0800
Subject: [PATCH 15/22] Update
docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
.../DockerComposeGenerator/components/StoragePaths.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx b/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
index 89581bf11..f99cd5b21 100644
--- a/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
+++ b/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
@@ -24,7 +24,7 @@ export default function StoragePaths({
- Config / DB / model cache directory:
+ Config / DB / model cache directory (on your host):
Date: Fri, 1 May 2026 21:52:32 +0800
Subject: [PATCH 16/22] Update
docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
.../DockerComposeGenerator/components/StoragePaths.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx b/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
index f99cd5b21..1e20189ce 100644
--- a/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
+++ b/docs/src/components/DockerComposeGenerator/components/StoragePaths.tsx
@@ -43,7 +43,7 @@ export default function StoragePaths({
- Recording storage directory:
+ Recording storage directory (on your host):
Date: Fri, 1 May 2026 21:52:41 +0800
Subject: [PATCH 17/22] Update
docs/src/components/DockerComposeGenerator/config/config.yaml
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---
docs/src/components/DockerComposeGenerator/config/config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index f32ab6b37..0fbe83efc 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -272,7 +272,7 @@ ports:
host: 8554
container: 8554
protocol: "tcp"
- description: "RTSP feeds"
+ description: "Access RTSP feeds from go2rtc"
defaultEnabled: true
- id: "8555-tcp"
From b893a4f851f143f93720480d565164c9da9de436 Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Fri, 1 May 2026 21:59:19 +0800
Subject: [PATCH 18/22] docs: Adjust the position of the RTSP password variable
option
---
.../components/OtherOptions.tsx | 38 +++++++++----------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx b/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
index c92804f07..69b3a59c1 100644
--- a/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
+++ b/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
@@ -25,25 +25,6 @@ export default function OtherOptions({
Other Options
-
-
- RTSP password:
-
-
onRtspPasswordChange(e.target.value)}
- />
-
- Optional. You can specify{" "}
- {"{FRIGATE_RTSP_PASSWORD}"} {" "}
- in the config file to reference camera stream passwords. This is NOT
- the Frigate login password.
-
-
Timezone:
@@ -83,6 +64,25 @@ export default function OtherOptions({
)}
+
+
+ RTSP password:
+
+
onRtspPasswordChange(e.target.value)}
+ />
+
+ Optional. You can specify{" "}
+ {"{FRIGATE_RTSP_PASSWORD}"} {" "}
+ in the config file to reference camera stream passwords. This is NOT
+ the Frigate login password.
+
+
);
From 43e90d6de48e1554626f8d15e38813fc101c7c1b Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Fri, 1 May 2026 22:13:00 +0800
Subject: [PATCH 19/22] docs: timezone change to select
---
.../components/OtherOptions.tsx | 49 ++++++++++++++++---
.../hooks/useConfigGenerator.ts | 4 +-
.../DockerComposeGenerator/styles.module.css | 15 ++++++
3 files changed, 57 insertions(+), 11 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx b/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
index 69b3a59c1..8d1efef0f 100644
--- a/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
+++ b/docs/src/components/DockerComposeGenerator/components/OtherOptions.tsx
@@ -1,7 +1,24 @@
-import React from "react";
+import React, { useMemo } from "react";
import CodeInline from "@theme/CodeInline";
import styles from "../styles.module.css";
+const AUTO_TIMEZONE_VALUE = "__auto__";
+
+function getTimezoneList(): string[] {
+ if (typeof Intl !== "undefined") {
+ const intl = Intl as typeof Intl & {
+ supportedValuesOf?: (key: string) => string[];
+ };
+ const supported = intl.supportedValuesOf?.("timeZone");
+ if (supported && supported.length > 0) {
+ return [...supported].sort();
+ }
+ }
+
+ const fallback = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ return fallback ? [fallback] : ["UTC"];
+}
+
interface Props {
rtspPassword: string;
timezone: string;
@@ -21,6 +38,11 @@ export default function OtherOptions({
onTimezoneChange,
onShmSizeChange,
}: Props) {
+ const timezones = useMemo(() => getTimezoneList(), []);
+ const systemTimezone =
+ Intl.DateTimeFormat().resolvedOptions().timeZone || "Etc/UTC";
+ const selectedValue = timezone || AUTO_TIMEZONE_VALUE;
+
return (
Other Options
@@ -29,14 +51,25 @@ export default function OtherOptions({
Timezone:
- onTimezoneChange(e.target.value)}
- />
+ className={`${styles.input} ${styles.select}`}
+ value={selectedValue}
+ onChange={(e) =>
+ onTimezoneChange(
+ e.target.value === AUTO_TIMEZONE_VALUE ? "" : e.target.value
+ )
+ }
+ >
+
+ Use browser timezone ({systemTimezone})
+
+ {timezones.map((tz) => (
+
+ {tz}
+
+ ))}
+
diff --git a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
index 394790b27..2fc235382 100644
--- a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
+++ b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
@@ -34,9 +34,7 @@ export function useConfigGenerator() {
const [configPath, setConfigPath] = useState("");
const [mediaPath, setMediaPath] = useState("");
const [rtspPassword, setRtspPassword] = useState("password");
- const [timezone, setTimezone] = useState(
- () => Intl.DateTimeFormat().resolvedOptions().timeZone || "Etc/UTC"
- );
+ const [timezone, setTimezone] = useState("");
const [shmSize, setShmSize] = useState("512mb");
const [shmSizeError, setShmSizeError] = useState(false);
const [gpuDeviceIdError, setGpuDeviceIdError] = useState(false);
diff --git a/docs/src/components/DockerComposeGenerator/styles.module.css b/docs/src/components/DockerComposeGenerator/styles.module.css
index 62ecb1b6f..ced52c854 100644
--- a/docs/src/components/DockerComposeGenerator/styles.module.css
+++ b/docs/src/components/DockerComposeGenerator/styles.module.css
@@ -103,6 +103,21 @@
}
}
+/* --- Select dropdown --- */
+
+.select {
+ cursor: pointer;
+ appearance: none;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: right 0.75rem center;
+ padding-right: 2rem;
+}
+
+[data-theme="light"] .select {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
+}
+
.helpText {
margin: 0.5rem 0 0 0;
font-size: 0.85rem;
From bb5e01ac454cfc7d1f65e089925ee1ca69e320c9 Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Fri, 1 May 2026 22:19:53 +0800
Subject: [PATCH 20/22] docs: add hailo and memryX mx3 driver tips
---
docs/src/components/DockerComposeGenerator/config/config.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/config/config.yaml b/docs/src/components/DockerComposeGenerator/config/config.yaml
index 0fbe83efc..747d3112b 100644
--- a/docs/src/components/DockerComposeGenerator/config/config.yaml
+++ b/docs/src/components/DockerComposeGenerator/config/config.yaml
@@ -198,7 +198,7 @@ hardware:
- id: "hailo"
label: "Hailo NPU (/dev/hailo0)"
- description: "Pass through /dev/hailo0 for Hailo-8 / Hailo-8L NPU acceleration."
+ description: "Pass through /dev/hailo0 for Hailo-8 / Hailo-8L NPU acceleration. You also need to [install the driver](#hailo-8)."
disabledWhen:
- "apple-silicon"
- "stable-synaptics"
@@ -208,7 +208,7 @@ hardware:
- id: "memryx"
label: "MemryX MX3 (/dev/memx0)"
- description: "Pass through /dev/memx0 for MemryX MX3 NPU acceleration."
+ description: "Pass through /dev/memx0 for MemryX MX3 NPU acceleration. You also need to [install the driver](#memryx-mx3)."
disabledWhen:
- "apple-silicon"
- "stable-synaptics"
From 9e72a825f391871a40a5196956c00e10e5a9a6ff Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Fri, 1 May 2026 22:24:27 +0800
Subject: [PATCH 21/22] docs: RTSP password is optional
---
.../DockerComposeGenerator/generator/index.ts | 18 +++++++++++-------
.../hooks/useConfigGenerator.ts | 4 ++--
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/generator/index.ts b/docs/src/components/DockerComposeGenerator/generator/index.ts
index 589d9b0b6..f6091f7c0 100644
--- a/docs/src/components/DockerComposeGenerator/generator/index.ts
+++ b/docs/src/components/DockerComposeGenerator/generator/index.ts
@@ -15,7 +15,7 @@ export interface GeneratorInput {
enabledPorts: string[];
configPath: string;
mediaPath: string;
- rtspPassword: string;
+ rtspPassword?: string;
timezone: string;
shmSize: string;
nvidiaGpuCount?: string;
@@ -99,7 +99,7 @@ function buildPorts(enabledPorts: string[]): string[] {
function buildEnvironment(
device: DeviceConfig,
hwEnv: Record,
- rtspPassword: string,
+ rtspPassword: string | undefined,
timezone: string
): string[] {
const allEnv: Record = {
@@ -107,11 +107,15 @@ function buildEnvironment(
...(device.env ?? {}),
};
- const lines: string[] = [
- " environment:",
- ` FRIGATE_RTSP_PASSWORD: "${rtspPassword}" # RTSP password — change to your own`,
- ` TZ: "${timezone}" # Timezone`,
- ];
+ const lines: string[] = [" environment:"];
+
+ if (rtspPassword) {
+ lines.push(
+ ` FRIGATE_RTSP_PASSWORD: "${rtspPassword}" # RTSP password — change to your own`
+ );
+ }
+
+ lines.push(` TZ: "${timezone}" # Timezone`);
for (const [key, value] of Object.entries(allEnv)) {
lines.push(` ${key}: "${value}"`);
diff --git a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
index 2fc235382..19c3976d8 100644
--- a/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
+++ b/docs/src/components/DockerComposeGenerator/hooks/useConfigGenerator.ts
@@ -33,7 +33,7 @@ export function useConfigGenerator() {
const [nvidiaGpuDeviceId, setNvidiaGpuDeviceId] = useState("");
const [configPath, setConfigPath] = useState("");
const [mediaPath, setMediaPath] = useState("");
- const [rtspPassword, setRtspPassword] = useState("password");
+ const [rtspPassword, setRtspPassword] = useState("");
const [timezone, setTimezone] = useState("");
const [shmSize, setShmSize] = useState("512mb");
const [shmSizeError, setShmSizeError] = useState(false);
@@ -166,7 +166,7 @@ export function useConfigGenerator() {
enabledPorts: enabledPortLines,
configPath: configPath || "/path/to/your/config",
mediaPath: mediaPath || "/path/to/your/storage",
- rtspPassword: rtspPassword || "password",
+ rtspPassword,
timezone: timezone || Intl.DateTimeFormat().resolvedOptions().timeZone || "Etc/UTC",
shmSize: shmSize || "512mb",
nvidiaGpuCount,
From af35556e4ecc9ba0f90a6f6e1c8f63efaca6913d Mon Sep 17 00:00:00 2001
From: ZhaiSoul <842607283@qq.com>
Date: Sat, 2 May 2026 21:48:46 +0800
Subject: [PATCH 22/22] docs: fix select style
---
.../DockerComposeGenerator/styles.module.css | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/docs/src/components/DockerComposeGenerator/styles.module.css b/docs/src/components/DockerComposeGenerator/styles.module.css
index ced52c854..d2e1b62dd 100644
--- a/docs/src/components/DockerComposeGenerator/styles.module.css
+++ b/docs/src/components/DockerComposeGenerator/styles.module.css
@@ -108,14 +108,18 @@
.select {
cursor: pointer;
appearance: none;
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
- background-repeat: no-repeat;
- background-position: right 0.75rem center;
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ background: var(--ifm-background-color)
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E")
+ no-repeat right 0.75rem center / 12px 12px;
padding-right: 2rem;
}
[data-theme="light"] .select {
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
+ background: #fff
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23555' d='M6 8L1 3h10z'/%3E%3C/svg%3E")
+ no-repeat right 0.75rem center / 12px 12px;
}
.helpText {