Library and upload

How a file becomes a searchable, organised photo.

Supported formats

ImagesJPEG, PNG, GIF, WebP, BMP, TIFF, HEIC, HEIF, AVIF
RAWCR2, CR3, NEF, ARW, DNG, ORF, RW2, RAF, SRW, PEF
VideoMP4, MOV, AVI, MKV, WebM, M4V, WMV, FLV, 3GP

Maximum size per file is 50 MB.

Processing pipeline

  1. Validate type and size, compute the SHA-256 checksum (duplicate detection).
  2. Extract EXIF with exifread, then Pillow, then exiftool as the universal fallback (this is what reads GPS from HEIC).
  3. Generate small, medium and large thumbnails and an optimised copy (max 2048 px, progressive JPEG).
  4. Encrypt the original with AES-256-GCM and store everything in S3.
  5. Reverse-geocode GPS to city, state and country.
  6. Detect faces and match them to people.

Favourites, archive, trash

A photo can be marked favourite or archived, given a description and tags, and rotated. Deleting moves it to the Trash; a background job permanently deletes photos that have been in the Trash for more than 30 days (checked every 6 hours). You can restore a photo or empty the Trash at any time.

Download

GET /api/photos/{id}/download decrypts and returns the original file.