Miscellaneous fixes (#23238)
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 / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
CI / AMD64 Build (push) Waiting to run

* start audio transcription post processor when enabled on any camera

* Fetch embed key whenever an error occurs in case the llama server was restarted

* mypy

* add tooltips for colored dots in settings menu

* add ability to reorder cameras from management pane

* add ability to reorder birdseye

* add reordering save text to camera management view

* Include NPU in latency performance hint

* Implement turbo for NPU on object detection

* hide order fields

* drop auto-derived field paths from camera value when unset globally

* use correct field type for export hwaccel args

* add debug replay to detail actions menu

* clarify debug replay in docs

* guard get_current_frame_time against missing camera state

* Implement debug reply from export

* Refactor debug replay to use sources for dynamic playback

* Mypy

* fix debug export replay source timestamp handling

* skip replay cameras in stats immediately

* broadcast debug replay state over ws and buffer pre-OPEN sends

- push debug replay session state over the job_state ws topic so the status bar reacts instantly to start/stop without polling
- fix child-effect-before-parent-effect race in WsProvider that silently dropped initial snapshot requests on cold load

* fix debug replay test hang

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
Josh Hawkins
2026-05-18 22:52:40 -05:00
committed by GitHub
co-authored by Nicolas Mowen
parent d968f00500
commit 43d97acd21
28 changed files with 1176 additions and 170 deletions
+52 -9
View File
@@ -106,6 +106,12 @@ import SaveAllPreviewPopover, {
type SaveAllPreviewItem,
} from "@/components/overlay/detail/SaveAllPreviewPopover";
import { useRestart } from "@/api/ws";
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { TooltipPortal } from "@radix-ui/react-tooltip";
const allSettingsViews = [
"uiSettings",
@@ -1505,10 +1511,20 @@ export default function Settings() {
CAMERA_SECTION_KEYS.has(key) && status?.isOverridden;
const showUnsavedDot = status?.hasChanges;
const dotColor =
status?.overrideSource === "profile" && activeProfileColor
? activeProfileColor.dot
: "bg-selected";
const isProfileOverride =
status?.overrideSource === "profile" && activeProfileColor;
const dotColor = isProfileOverride
? activeProfileColor.dot
: "bg-selected";
const overrideTooltip = isProfileOverride
? t("menuDot.overrideProfile", {
profile: activeEditingProfile
? (profileFriendlyNames.get(activeEditingProfile) ??
activeEditingProfile)
: "",
})
: t("menuDot.overrideGlobal");
return (
<div className="flex w-full min-w-0 items-center justify-between pr-4 md:pr-0">
@@ -1518,19 +1534,46 @@ export default function Settings() {
{(showOverrideDot || showUnsavedDot) && (
<div className="ml-2 flex shrink-0 items-center gap-2">
{showOverrideDot && (
<span
className={cn("inline-block size-2 rounded-full", dotColor)}
/>
<Tooltip>
<TooltipTrigger asChild>
<span
className={cn(
"inline-block size-2 rounded-full",
dotColor,
)}
/>
</TooltipTrigger>
<TooltipPortal>
<TooltipContent side="right">
{overrideTooltip}
</TooltipContent>
</TooltipPortal>
</Tooltip>
)}
{showUnsavedDot && (
<span className="inline-block size-2 rounded-full bg-unsaved" />
<Tooltip>
<TooltipTrigger asChild>
<span className="inline-block size-2 rounded-full bg-unsaved" />
</TooltipTrigger>
<TooltipPortal>
<TooltipContent side="right">
{t("menuDot.unsaved")}
</TooltipContent>
</TooltipPortal>
</Tooltip>
)}
</div>
)}
</div>
);
},
[sectionStatusByKey, t, activeProfileColor],
[
sectionStatusByKey,
t,
activeProfileColor,
activeEditingProfile,
profileFriendlyNames,
],
);
if (isMobile) {