Miscellaneous Fixes (#21166)

* Improve model titles

* remove deprecated strftime_fmt

* remove

* remove restart wording

* add copilot instructions

* fix docs

* Move files into try for classification rollover

* Use friendly names for zones in notifications

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
Josh Hawkins 2025-12-07 08:57:46 -06:00 committed by GitHub
parent c136e5e8bd
commit 88a8de0b1c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 37 additions and 28 deletions

2
.github/copilot-instructions.md vendored Normal file
View File

@ -0,0 +1,2 @@
Never write strings in the frontend directly, always write to and reference the relevant translations file.
Always conform new and refactored code to the existing coding style in the project.

View File

@ -116,4 +116,4 @@ Along with individual review item summaries, Generative AI provides the ability
Review reports can be requested via the [API](/integrations/api#review-summarization) by sending a POST request to `/api/review/summarize/start/{start_ts}/end/{end_ts}` with Unix timestamps.
For Home Assistant users, there is a built-in service (`frigate.generate_review_summary`) that makes it easy to request review reports as part of automations or scripts. This allows you to automatically generate daily summaries, vacation reports, or custom time period reports based on your specific needs.
For Home Assistant users, there is a built-in service (`frigate.review_summarize`) that makes it easy to request review reports as part of automations or scripts. This allows you to automatically generate daily summaries, vacation reports, or custom time period reports based on your specific needs.

View File

@ -28,7 +28,6 @@ To create a poly mask:
5. Click the plus icon under the type of mask or zone you would like to create
6. Click on the camera's latest image to create the points for a masked area. Click the first point again to close the polygon.
7. When you've finished creating your mask, press Save.
8. Restart Frigate to apply your changes.
Your config file will be updated with the relative coordinates of the mask/zone:

View File

@ -1002,10 +1002,6 @@ ui:
# full: 8:15:22 PM Mountain Standard Time
# (default: shown below).
time_style: medium
# Optional: Ability to manually override the date / time styling to use strftime format
# https://www.gnu.org/software/libc/manual/html_node/Formatting-Calendar-Time.html
# possible values are shown above (default: not set)
strftime_fmt: "%Y/%m/%d %H:%M"
# Optional: Set the unit system to either "imperial" or "metric" (default: metric)
# Used in the UI and in MQTT topics
unit_system: metric

View File

@ -390,7 +390,20 @@ class WebPushClient(Communicator):
message = payload["after"]["data"]["metadata"]["scene"]
else:
title = f"{titlecase(', '.join(sorted_objects).replace('_', ' '))}{' was' if state == 'end' else ''} detected in {titlecase(', '.join(payload['after']['data']['zones']).replace('_', ' '))}"
zone_names = payload["after"]["data"]["zones"]
formatted_zone_names = []
for zone_name in zone_names:
if zone_name in self.config.cameras[camera].zones:
formatted_zone_names.append(
self.config.cameras[camera]
.zones[zone_name]
.get_formatted_name(zone_name)
)
else:
formatted_zone_names.append(titlecase(zone_name.replace("_", " ")))
title = f"{titlecase(', '.join(sorted_objects).replace('_', ' '))}{' was' if state == 'end' else ''} detected in {', '.join(formatted_zone_names)}"
message = f"Detected on {camera_name}"
if ended:

View File

@ -37,9 +37,6 @@ class UIConfig(FrigateBaseModel):
time_style: DateTimeStyleEnum = Field(
default=DateTimeStyleEnum.medium, title="Override UI timeStyle."
)
strftime_fmt: Optional[str] = Field(
default=None, title="Override date and time format using strftime syntax."
)
unit_system: UnitSystemEnum = Field(
default=UnitSystemEnum.metric, title="The unit system to use for measurements."
)

View File

@ -639,14 +639,14 @@ def write_classification_attempt(
os.makedirs(folder, exist_ok=True)
cv2.imwrite(file, frame)
files = sorted(
filter(lambda f: (f.endswith(".webp")), os.listdir(folder)),
key=lambda f: os.path.getctime(os.path.join(folder, f)),
reverse=True,
)
# delete oldest face image if maximum is reached
try:
files = sorted(
filter(lambda f: (f.endswith(".webp")), os.listdir(folder)),
key=lambda f: os.path.getctime(os.path.join(folder, f)),
reverse=True,
)
if len(files) > max_files:
os.unlink(os.path.join(folder, files[-1]))
except FileNotFoundError:

View File

@ -13,11 +13,8 @@
"time_style": {
"label": "Override UI timeStyle."
},
"strftime_fmt": {
"label": "Override date and time format using strftime syntax."
},
"unit_system": {
"label": "The unit system to use for measurements."
}
}
}
}

View File

@ -1,5 +1,5 @@
{
"documentTitle": "Classification Models",
"documentTitle": "Classification Models - Frigate",
"details": {
"scoreInfo": "Score represents the average classification confidence across all detections of this object."
},

View File

@ -77,7 +77,7 @@
"millisecondsToOffset": "Milliseconds to offset detect annotations by. <em>Default: 0</em>",
"tips": "Lower the value if the video playback is ahead of the boxes and path points, and increase the value if the video playback is behind them. This value can be negative.",
"toast": {
"success": "Annotation offset for {{camera}} has been saved to the config file. Restart Frigate to apply your changes."
"success": "Annotation offset for {{camera}} has been saved to the config file."
}
}
},

View File

@ -534,7 +534,7 @@
}
},
"toast": {
"success": "Zone ({{zoneName}}) has been saved. Restart Frigate to apply changes."
"success": "Zone ({{zoneName}}) has been saved."
}
},
"motionMasks": {
@ -558,8 +558,8 @@
},
"toast": {
"success": {
"title": "{{polygonName}} has been saved. Restart Frigate to apply changes.",
"noName": "Motion Mask has been saved. Restart Frigate to apply changes."
"title": "{{polygonName}} has been saved.",
"noName": "Motion Mask has been saved."
}
}
},
@ -583,8 +583,8 @@
},
"toast": {
"success": {
"title": "{{polygonName}} has been saved. Restart Frigate to apply changes.",
"noName": "Object Mask has been saved. Restart Frigate to apply changes."
"title": "{{polygonName}} has been saved.",
"noName": "Object Mask has been saved."
}
}
}

View File

@ -6,7 +6,6 @@ export interface UiConfig {
time_format?: "browser" | "12hour" | "24hour";
date_style?: "full" | "long" | "medium" | "short";
time_style?: "full" | "long" | "medium" | "short";
strftime_fmt?: string;
dashboard: boolean;
order: number;
unit_system?: "metric" | "imperial";

View File

@ -84,6 +84,12 @@ export default function ModelTrainingView({ model }: ModelTrainingViewProps) {
const [page, setPage] = useState<string>("train");
const [pageToggle, setPageToggle] = useOptimisticState(page, setPage, 100);
// title
useEffect(() => {
document.title = `${model.name} - ${t("documentTitle")}`;
}, [model.name, t]);
// model state
const [wasTraining, setWasTraining] = useState(false);