Vellum/internal
mithral 0212d089ec Phase 6c: photo thumbnails and viewer
- photos: generates a downscaled JPEG thumbnail per image, because serving a
  folder of 12-megapixel originals to a grid is unusable on a TV box. Uses
  CatmullRom scaling via golang.org/x/image; decodes jpeg/png/gif/webp.
- an undecodable format returns no thumbnail rather than an error, so the grid
  falls back to a placeholder.
- images already smaller than the 512px ceiling are passed through untouched.
- library items endpoint now returns library_id, which the viewer needs to
  find its siblings for navigation.
- web: PhotoViewer with keyboard and button navigation within the library.

Verified: 900x1200 PNG thumbnailed to a 512-long-edge JPEG and served;
unit tests assert exact dimensions, aspect preservation, and that non-images
produce no thumbnail without erroring.
2026-10-09 21:22:30 -04:00
..
auth Phase 1: accounts, sessions, per-library grants 2026-10-09 16:31:24 -04:00
core Phase 5: job queue and metadata providers 2026-10-09 21:16:07 -04:00
httpapi Web UI: Svelte app, embedded into the binary 2026-10-09 16:40:58 -04:00
httpx Phase 1: accounts, sessions, per-library grants 2026-10-09 16:31:24 -04:00
jobs Phase 5: job queue and metadata providers 2026-10-09 21:16:07 -04:00
library Phase 6c: photo thumbnails and viewer 2026-10-09 21:22:30 -04:00
media Phase 6a: directory grouping, audiobooks and music playback 2026-10-09 21:20:47 -04:00
metadata Phase 5: job queue and metadata providers 2026-10-09 21:16:07 -04:00
modules Phase 6c: photo thumbnails and viewer 2026-10-09 21:22:30 -04:00
natsort Phase 6a: directory grouping, audiobooks and music playback 2026-10-09 21:20:47 -04:00
progress Phase 3: EPUB module, file streaming, per-user progress 2026-10-09 16:36:27 -04:00
search Phase 2b: FTS5 search 2026-10-09 21:10:44 -04:00
stream Phase 3: EPUB module, file streaming, per-user progress 2026-10-09 16:36:27 -04:00