- Prune keeps stale derivative dirs modified in the last 5 minutes. Closes #1
- Preloads use imagesrcset/imagesizes. Closes #2
- Watcher: overflow reschedules a rescan; watch before the first scan; rescans serialised; cache inside the photo root rejected. Closes #3
- One exiftool -stay_open process with a 30s request timeout, closed on exit; server starts before the first scan. Closes #4
- Semaphore sized by GOMAXPROCS; magick memory limits; image runs as UID/GID 1000. Closes #5
- File names as alt text. Closes #6
go test -race, vet and gofmt clean.