Add recording keyframe analysis to camera probe dialog (#23453)
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions

* backend: endpoint and util funcs

* tests

* frontend and i18n

* update openapi spec

* add tip to docs
This commit is contained in:
Josh Hawkins
2026-06-11 14:16:41 -06:00
committed by GitHub
parent efe585a920
commit e6601d50a6
12 changed files with 642 additions and 25 deletions
@@ -7,7 +7,8 @@ import {
DialogTitle,
} from "../ui/dialog";
import ActivityIndicator from "../indicators/activity-indicator";
import { Ffprobe } from "@/types/stats";
import KeyframeAnalysisSection from "./KeyframeAnalysisSection";
import { Ffprobe, KeyframeAnalysis } from "@/types/stats";
import { Button } from "../ui/button";
import copy from "copy-to-clipboard";
import { CameraConfig } from "@/types/frigateConfig";
@@ -30,6 +31,7 @@ export default function CameraInfoDialog({
}: CameraInfoDialogProps) {
const { t } = useTranslation(["views/system"]);
const [ffprobeInfo, setFfprobeInfo] = useState<Ffprobe[]>();
const [keyframeInfo, setKeyframeInfo] = useState<KeyframeAnalysis>();
useEffect(() => {
axios
@@ -67,7 +69,12 @@ export default function CameraInfoDialog({
}, []);
const onCopyFfprobe = async () => {
copy(JSON.stringify(ffprobeInfo));
copy(
JSON.stringify({
ffprobe: ffprobeInfo,
keyframe_analysis: keyframeInfo,
}),
);
toast.success(t("cameras.toast.success.copyToClipboard"));
};
@@ -96,7 +103,7 @@ export default function CameraInfoDialog({
<Trans ns="views/system">cameras.info.streamDataFromFFPROBE</Trans>
</DialogDescription>
<div className="mb-2 p-4">
<div className="mb-2 p-4 text-sm">
{ffprobeInfo ? (
<div>
{ffprobeInfo.map((stream, idx) => (
@@ -184,6 +191,10 @@ export default function CameraInfoDialog({
)}
</div>
))}
<KeyframeAnalysisSection
cameraName={camera.name}
onResult={setKeyframeInfo}
/>
</div>
) : (
<div className="flex flex-col items-center">