summaryrefslogtreecommitdiffstats
path: root/views/admin
AgeCommit message (Collapse)AuthorFilesLines
16 hoursMove bulk selection to admin cluster detail page (correct page)Ken D'Ambrosio1-144/+183
The bulk selection panel now lives on /admin/people/:uuid — the face crop grid page — which is what was actually requested. A sticky left panel shows the cluster name, the name form, a selection counter, and bulk action controls. Clicking a face crop toggles selection; clicking the photo link still opens the album. Bulk actions: move selected faces to a named person, move to pool, or blacklist. The per-face individual dropdowns are replaced by the panel. Merge-entire-cluster and Blacklist-cluster moved to collapsible/button in the panel too. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 daysFix New Person flow: redirect to new cluster, show hero face, detect ↵Ken D'Ambrosio1-3/+53
duplicate names After moving a face to "New Person", the user is now taken directly to that cluster's detail page. If it's a single unnamed cluster, the face is shown prominently at the top. Typing an existing name on the name form triggers a confirm dialog: OK merges into the existing person's cluster, Cancel saves as a new separate person with the same name. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 daysAdd face pool, blacklisting, and action explanations to people adminKen D'Ambrosio2-15/+64
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 <noreply@anthropic.com>
4 daysAdd face and cluster deletion to people adminKen D'Ambrosio1-0/+9
On the cluster detail page: "Remove face" option in each face's move dropdown removes it from the cluster entirely; "Delete cluster" button (red, with confirmation) removes the whole cluster from people.json. Moving the last face out of a cluster also auto-deletes it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 daysAdd people cluster detail page with face move/merge and hover previewKen D'Ambrosio2-2/+136
Each cluster in /admin/people now links to a detail page showing all faces in a grid. From there you can rename the cluster, move individual faces to another named person (or spin off a new cluster), or merge the entire cluster into another. Hovering any face crop shows the original full photo for context. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 daysAdd people/face clustering featureKen D'Ambrosio1-0/+111
- scripts/cluster_faces.py: greedy centroid clustering (numpy) with 3 refinement passes; preserves existing UUID/name mappings across re-runs; writes MEDIA_ROOT/people.json atomically. - app.rb: GET /face/* serves cropped+padded face thumbnails (100x100, cached under cache/faces/); GET|POST /admin/people for cluster management; POST /admin/people/recluster runs cluster_faces.py as a background job; POST /admin/people/:uuid saves names+slugs; GET /people public grid of named people; GET /people/:slug photos for one person. - views/admin/people.erb: lists all clusters (named first, then by size), face crop samples, inline name form, re-cluster button with live log. - views/people.erb: public grid of named people. - views/person.erb: photo grid for one person, linking back to album lightbox for each photo. - views/layout.erb: People link in nav (conditional on FACES_ENABLED). - public/css/style.css: styles for people admin list and public tiles. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22Add hover zoom preview for admin thumbnailsv1.1Ken D'Ambrosio1-0/+31
Hovering over a thumbnail in the admin file table pops up the full 300×300 cached version near the cursor, making it easy to confirm identity before deleting or editing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22Speed up update.rb and fix UI always forcing full rescanKen D'Ambrosio1-1/+121
- update.rb: skip exiftool on images marked exif_absent (set after first failed attempt); prevents repeated slow scans of old photos with no EXIF - update.rb: explicit directory argument now implies force — passing a path always rescans that subtree regardless of sentinel mtime - app.rb: /admin/update no longer hardcodes --force; sentinel-based skipping is used by default, making UI updates finish in seconds instead of minutes - admin/album.erb: add "Force rescan all" checkbox to Run Update button; checked state passes force=1 to the server and restores --force behavior - README.md, DESIGN.md: document sentinel skipping, exif_absent flag, and explicit-directory force behavior Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14Hide transcoded originals from non-admins; mark them visually for adminsKen D'Ambrosio1-2/+5
update.rb records transcoded_to in album.json (even on re-runs where the MP4 already exists) so the marker survives across scans. app.rb filters files with transcoded_to from non-admin views. album.erb renders them greyed-out with an amber "⚠ original" badge in admin mode. admin/album.erb marks the edit-table row and shows the target filename under the original. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14Add per-photo delete checkbox to admin edit formKen D'Ambrosio1-4/+22
Checking Delete and saving permanently removes the file and its thumbnail; a JS confirm dialog gates the submit. Deleted files are stripped from params before save_edits so they don't linger in album.json. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13Add folder rename and background update trigger to admin UIKen D'Ambrosio1-0/+65
- Admin edit form: "Folder name" field renames the directory on save; also moves the thumbnail cache subtree to match the new path - Admin edit page: "Run Update" button spawns update.rb in a background thread, streams output into a terminal-style log panel via 1.5s polling; shows Done/Error status when complete Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11Replace cover dropdown with Random checkbox and per-file cover radioKen D'Ambrosio1-10/+19
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11Add Save button above Files table; redirect admin login to current albumKen D'Ambrosio1-0/+4
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Add show/hide password toggle to admin loginKen D'Ambrosio1-1/+17
SVG eye icon sits inside the right edge of the password field. Tap/click to reveal; tap again to conceal. Helps mobile users confirm what they're typing without a separate "show password" step. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Replace dynamic cover checkbox with random image dropdown optionKen D'Ambrosio1-4/+1
Adds "— random image —" as a selectable cover option (stored as __random__ sentinel). album_cover() now picks a random eligible file when that value is set, giving a fresh cover on each page load. Removes the cover_dynamic field that was saved but never actually used in display logic. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Initial commit — Albumen photo albumKen2-0/+115
Ruby/Sinatra self-hosted photo album with directory hierarchy, per-photo captions and visibility, lightbox, slideshow, admin UI, and Let's Encrypt HTTPS via Apache reverse proxy on prouter. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>