- Server: S.folder (singular) -> S.folders (list). New /api/add_folder
and /api/remove_folder endpoints; /api/scan and /api/choose_folder
updated to work with the list (choose_folder now appends instead of
replacing). Legacy single-folder config migrates transparently.
- All folders feed one combined pending queue/journal/search, per the
simpler of the two designs discussed.
- organize_alias now resolves each photo's own source folder via
find_owning_folder(), so category aliases land next to the original
instead of in one designated folder -- verified live with two
configured folders that the alias for each photo lands in its own
folder and nothing leaks into the other.
- Delete path-safety, thumbnail/photo serving, resolve_portable_path,
undo_all, and sync-on-scan all extended to check/act across every
configured folder instead of just one.
- Frontend: folder list renders as removable chips; Add (typed path) and
Browse (native picker, now appends) both wired to the new endpoints;
Rescan All re-scans the current set without changing it.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The api() helper only sends POST when a body argument is passed;
Browse Folder, Pause, Stop, Retry Failed (x2), Undo All, and Scan for
Duplicates were all called with no body, so they defaulted to GET
against POST-only server routes and 404'd. Verified live via the actual
browser: Pause/Stop now correctly transition server status
(running -> paused -> idle) instead of silently failing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Search & Edit becomes a multi-view library: Tagged/Untagged/Failed/Videos/Duplicates
- Bulk select (click, shift-click range, select-all-matching) with bulk recategorize,
CSV/JSON export, and original-quality ZIP download (verified byte-identical)
- Video browsing/tagging via ffmpeg frame extraction, native playback with range support
- Duplicate detection via a lightweight perceptual-hash index (no new dependencies)
- Full-resolution photo/video viewer with editable metadata, prev/next navigation
- Date range, file-type, and category quick-filters; saved searches (localStorage)
- Appearance settings: accent color picker, grid density, results-per-page; full dark mode
- Auto-detects its photo folder (CLI arg > env var > last used > parent directory),
so the app can be dropped into any photo collection and just work