From c13a40a970be156a231200c20362636b198d32ec Mon Sep 17 00:00:00 2001 From: Ken D'Ambrosio Date: Tue, 9 Jun 2026 13:09:23 +0000 Subject: Add face pool, blacklisting, and action explanations to people admin Removed faces now go to an "Unidentified pool" cluster rather than disappearing. Deleting a cluster blacklists all its members so they are skipped by future re-clustering runs. Pool faces can be assigned to a named person or individually blacklisted. A plain-English info box on the detail page explains what each action does and that no photo files are ever modified. Co-Authored-By: Claude Sonnet 4.6 --- views/admin/people.erb | 20 +++++++++++++++ views/admin/person_detail.erb | 59 ++++++++++++++++++++++++++++++++----------- 2 files changed, 64 insertions(+), 15 deletions(-) (limited to 'views/admin') diff --git a/views/admin/people.erb b/views/admin/people.erb index c17e847..9715b95 100644 --- a/views/admin/people.erb +++ b/views/admin/people.erb @@ -26,6 +26,26 @@ + <% if @pool %> +
+
+ <% @pool[:samples].each do |s| %> + + <% end %> + <% if @pool[:count] > @pool[:samples].length %> + +<%= @pool[:count] - @pool[:samples].length %> more + <% end %> +
+
+ Unidentified pool — <%= @pool[:count] %> face<%= @pool[:count] == 1 ? '' : 's' %> + Review +
+
+ <% end %> + <% if @clusters.empty? %>

No face data yet — the face daemon is still processing, or run Re-cluster once it has finished a pass. diff --git a/views/admin/person_detail.erb b/views/admin/person_detail.erb index 8a2f8fe..77f27b7 100644 --- a/views/admin/person_detail.erb +++ b/views/admin/person_detail.erb @@ -1,16 +1,30 @@

← All Clusters - <% if @name %> + <% if @name && !@is_pool %> Public Page ↗ <% end %>
-

<%= @name ? ERB::Util.html_escape(@name) : 'Unnamed cluster' %>

+

<%= ERB::Util.html_escape(@title) %>

<%= @count %> photo<%= @count == 1 ? '' : 's' %> in this cluster

- <%# ── Name ────────────────────────────────────────────────────────────── %> +
+ <% if @is_pool %> + These faces were removed from other clusters and are waiting to be assigned. + Use Assign to… to move a face to a named person, or + Blacklist to permanently exclude it from future clustering. + <% else %> + Move to pool sends a face to a holding area where you can assign it later. + Blacklist cluster permanently excludes all faces in this cluster from future clustering. +
+ No photo files are ever modified — only the clustering metadata is affected. + <% end %> +
+ + <% unless @is_pool %> + <%# ── Name ──────────────────────────────────────────────────────────────── %>
- <%# ── Merge entire cluster ────────────────────────────────────────────── %> + <%# ── Merge entire cluster ──────────────────────────────────────────────── %> <% unless @all_others.empty? %>

Merge entire cluster into another person

@@ -38,19 +52,31 @@
<% end %> - <%# ── Delete cluster ──────────────────────────────────────────────────── %> + <%# ── Delete cluster (blacklists all members) ───────────────────────────── %>
- + onsubmit="return confirm('Blacklist this entire cluster (<%= @count %> photo<%= @count == 1 ? '' : 's' %>)? These faces will never be re-clustered.')"> +
+ <% else %> + <%# ── Pool: blacklist all ────────────────────────────────────────────────── %> +
+
+ +
+
+ <% end %> - <%# ── Face grid ────────────────────────────────────────────────────────── %> + <%# ── Face grid ──────────────────────────────────────────────────────────── %>

- Hover a face to see the full photo. - Click to open in the album. - <% unless @named_others.empty? %>Use the drop-down to move a face to another person.<% end %> + Hover a face to see the full photo. Click to open in the album. + <% if @is_pool %> + Use the drop-down to assign a face to a named person, or blacklist it permanently. + <% elsif !@named_others.empty? %> + Use the drop-down to move a face to another person. + <% end %>

@@ -65,19 +91,22 @@ width="100" height="100" loading="lazy">
- <% unless @named_others.empty? %> + <% if @is_pool || !@named_others.empty? %>
<% end %> -- cgit v1.2.3