* fix i18n keys

* hide disable from context menu for viewers

* Fix auto live check for default dashboard and camera groups

Disabling the Automatic Live View switch in Settings should prevent streaming from occurring. Overriding any settings in a camera group will override the global setting. The check here incorrectly always returned false instead of undefined.

* clarify hardware accelerated enrichments

* clarify

* add note about detect stream to face rec docs

* add note about low end Dahuas for autotracking

* Catch invalid face box / image

* Video tab tweaks

With the changes in https://github.com/blakeblackshear/frigate/pull/18220, the video tab in the Tracked Object Details pane now correctly trims the in-browser HLS video. Because of keyframes and record/detect stream differences, we can manually subtract a couple of seconds from the event start_time to ensure the first few frames aren't cut off from the video

* Clarify

* Don't use Migraphx by default

* Provide better support for running embeddings on GPU

* correctly join cameras

* Adjust blur confidence reduction

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
Josh Hawkins
2025-06-03 07:33:32 -05:00
committed by GitHub
parent af5a9e7634
commit dba9206898
15 changed files with 96 additions and 46 deletions

View File

@@ -46,6 +46,7 @@ import {
} from "@/api/ws";
import { useTranslation } from "react-i18next";
import { useDateLocale } from "@/hooks/use-date-locale";
import { useIsAdmin } from "@/hooks/use-is-admin";
type LiveContextMenuProps = {
className?: string;
@@ -90,6 +91,10 @@ export default function LiveContextMenu({
const { t } = useTranslation("views/live");
const [showSettings, setShowSettings] = useState(false);
// roles
const isAdmin = useIsAdmin();
// camera enabled
const { payload: enabledState, send: sendEnabled } = useEnabledState(camera);
@@ -301,17 +306,21 @@ export default function LiveContextMenu({
</>
)}
<ContextMenuSeparator />
<ContextMenuItem>
<div
className="flex w-full cursor-pointer items-center justify-start gap-2"
onClick={() => sendEnabled(isEnabled ? "OFF" : "ON")}
>
<div className="text-primary">
{isEnabled ? t("camera.disable") : t("camera.enable")}
</div>
</div>
</ContextMenuItem>
<ContextMenuSeparator />
{isAdmin && (
<>
<ContextMenuItem>
<div
className="flex w-full cursor-pointer items-center justify-start gap-2"
onClick={() => sendEnabled(isEnabled ? "OFF" : "ON")}
>
<div className="text-primary">
{isEnabled ? t("camera.disable") : t("camera.enable")}
</div>
</div>
</ContextMenuItem>
<ContextMenuSeparator />
</>
)}
<ContextMenuItem disabled={!isEnabled}>
<div
className="flex w-full cursor-pointer items-center justify-start gap-2"

View File

@@ -1231,7 +1231,9 @@ export function VideoTab({ search }: VideoTabProps) {
]);
const endTime = useMemo(() => search.end_time ?? Date.now() / 1000, [search]);
const source = `${baseUrl}vod/${search.camera}/start/${search.start_time}/end/${endTime}/index.m3u8`;
// subtract 2 seconds from start_time to account for keyframes and any differences in the record/detect streams
// to help the start of the event from not being completely cut off
const source = `${baseUrl}vod/${search.camera}/start/${search.start_time - 2}/end/${endTime}/index.m3u8`;
return (
<>

View File

@@ -708,8 +708,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
? t("feet", { ns: "common" })
: t("meters", { ns: "common" }),
? t("unit.length.feet", { ns: "common" })
: t("unit.length.meters", { ns: "common" }),
},
)}
</FormLabel>
@@ -735,8 +735,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
? t("feet", { ns: "common" })
: t("meters", { ns: "common" }),
? t("unit.length.feet", { ns: "common" })
: t("unit.length.meters", { ns: "common" }),
},
)}
</FormLabel>
@@ -762,8 +762,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
? t("feet", { ns: "common" })
: t("meters", { ns: "common" }),
? t("unit.length.feet", { ns: "common" })
: t("unit.length.meters", { ns: "common" }),
},
)}
</FormLabel>
@@ -789,8 +789,8 @@ export default function ZoneEditPane({
{
unit:
config?.ui.unit_system == "imperial"
? t("feet", { ns: "common" })
: t("meters", { ns: "common" }),
? t("unit.length.feet", { ns: "common" })
: t("unit.length.meters", { ns: "common" }),
},
)}
</FormLabel>

View File

@@ -563,9 +563,12 @@ export default function DraggableGridLayout({
const streamName = streamExists
? streamNameFromSettings
: firstStreamEntry;
const streamType =
currentGroupStreamingSettings?.[camera.name]?.streamType;
const autoLive =
currentGroupStreamingSettings?.[camera.name]?.streamType !==
"no-streaming";
streamType !== undefined
? streamType !== "no-streaming"
: undefined;
const showStillWithoutActivity =
currentGroupStreamingSettings?.[camera.name]?.streamType !==
"continuous";

View File

@@ -486,9 +486,12 @@ export default function LiveDashboardView({
const streamName = streamExists
? streamNameFromSettings
: firstStreamEntry;
const streamType =
currentGroupStreamingSettings?.[camera.name]?.streamType;
const autoLive =
currentGroupStreamingSettings?.[camera.name]?.streamType !==
"no-streaming";
streamType !== undefined
? streamType !== "no-streaming"
: undefined;
const showStillWithoutActivity =
currentGroupStreamingSettings?.[camera.name]?.streamType !==
"continuous";

View File

@@ -91,7 +91,7 @@ export function RecordingView({
"recordings/summary",
{
timezone: timezone,
cameras: allCameras ?? null,
cameras: allCameras.join(",") ?? null,
},
]);