Add the Identity screen
A third top-level screen beside the library and develop, because naming a cluster and pulling a stranger out of it are tasks with their own rhythm and need the whole window. The screen is designed around the clustering being wrong, which is FR-CULL-10 rather than pessimism: grouping over-merges on siblings, on parents and children, and on the same person a decade apart. So Split off sits next to Confirm all rather than behind a menu, the confirm/reject pair is on the face itself, and a group the system found is drawn differently from a person the user has vouched for. Splitting rejects before it confirms. Without that the next clustering pass suggests the face straight back and the user's correction becomes an argument they keep having. Face crops come from the proxies the grid already built, one decode per image rather than per face -- a group photograph holding six faces of one family is one JPEG. Where the calibration is not fitted the screen says confidence is unavailable instead of printing a percentage that looks measured, which is FR-CULL-9's rule at the point it becomes visible. The verdict controls use drawn icons, not tick and cross characters: ui/icons.slint exists because those render as tofu on Android. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -866,6 +866,7 @@ component HeaderActions inherits HorizontalLayout {
|
||||
callback rescan();
|
||||
callback open-import();
|
||||
callback open-settings();
|
||||
callback open-people();
|
||||
|
||||
spacing: Theme.gap;
|
||||
|
||||
@@ -1016,6 +1017,14 @@ component HeaderActions inherits HorizontalLayout {
|
||||
clicked => { root.open-import(); }
|
||||
}
|
||||
|
||||
// A library action rather than a setting, so it sits with the others and
|
||||
// ahead of Settings, which the comment below keeps last.
|
||||
Button {
|
||||
text: "People";
|
||||
y: root.centred ? (root.row-height - self.height) / 2 : 0;
|
||||
clicked => { root.open-people(); }
|
||||
}
|
||||
|
||||
// Last in the row, and unconditional. The buttons before it come and go
|
||||
// with what the grid is showing; settings is always reachable, and a
|
||||
// control that moved as its neighbours appeared would be hunted for each
|
||||
@@ -1165,6 +1174,7 @@ export component LibraryGrid inherits Rectangle {
|
||||
|
||||
callback open-import();
|
||||
callback open-settings();
|
||||
callback open-people();
|
||||
|
||||
// --- selection and drag ---
|
||||
//
|
||||
@@ -1701,6 +1711,7 @@ export component LibraryGrid inherits Rectangle {
|
||||
rescan => { root.rescan(); }
|
||||
open-import => { root.open-import(); }
|
||||
open-settings => { root.open-settings(); }
|
||||
open-people => { root.open-people(); }
|
||||
}
|
||||
|
||||
// Compact: one button in place of six. Labelled rather than a
|
||||
@@ -1785,6 +1796,7 @@ export component LibraryGrid inherits Rectangle {
|
||||
rescan => { root.rescan(); }
|
||||
open-import => { root.open-import(); }
|
||||
open-settings => { root.open-settings(); }
|
||||
open-people => { root.open-people(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user