Skip to content

feat: photos app - #529

Draft
dschmidt wants to merge 4 commits into
mainfrom
feat/photos-app
Draft

feat: photos app#529
dschmidt wants to merge 4 commits into
mainfrom
feat/photos-app

Conversation

@dschmidt

@dschmidt dschmidt commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

This is early stages, feel free to play around and suggest features, UX and visual improvements

Don't expect the code to be perfect yet

A photos app: timeline over the whole library (graph search with date aggregations, content-visibility based virtualization, scrubber, day deep links), lightbox with slideshow (progress via the standard progress bar extension point), motion photo playback on tiles and in the lightbox, and an explicit statistics page. The timeline is the entry point ("/" redirects to /timeline), topped by a "do you remember" memories strip whose polaroids jump (with a glow) to the photo's spot in the timeline. The statistics page links back into the timeline: month bars, camera rows and tags open it filtered. Albums are postponed for the initial version (kept on the feat/photos-app-full branch).

Runs only against the demo stack for now:

  • opencloud server built from the feat/graph-search-full-2 consolidation branch (search aggregations, sortProperties, facets on search hits)
  • web from the feat/graph-search-full-2 consolidation branch (motion photo support, loading service unload option); link its unreleased web-pkg by running pnpm link <path-to-web-checkout>/packages/web-pkg in this workspace's root. pnpm records the link in pnpm-workspace.yaml, package.json and the lockfile; keep those changes local, git checkout -- . reverts them.
  • the thumbnails service needs a 2048x512 preset for the timeline tiles: the app requests previews at that size with processor=fit (constant row height, width follows the aspect ratio), and the thumbnailer silently rounds unknown sizes UP to the next preset, which makes every tile decode far more pixels than it displays. E.g. THUMBNAILS_RESOLUTIONS: 16x16,32x32,64x64,128x128,2048x512,1080x1920,1920x1080,2160x3840,3840x2160,4320x7680,7680x4320. The lightbox uses the stock 1920x1080 preset.

Draft until the underlying server and web PRs have landed.

Todo

  • places: the geohash cells are labeled via a hardcoded demo list (src/places.ts), needs real reverse geocoding (on the fly or server-side)
  • places rows in statistics are not clickable yet (needs a geohash cell to geo KQL bbox filter, server support exists in the geo KQL PR)
  • i18n: nothing is translated yet, l10n/translations.json is an empty stub
  • the preview object-url cache is unbounded per session; an LRU with revocation needs coordination with rendered tiles
  • albums (parked on feat/photos-app-full)

Screenshots

Screenshot_20260815_203219 Screenshot_20260815_204159 Screenshot_20260815_203332 Screenshot_20260815_203818 Screenshot_20260815_203840 Screenshot_20260815_204009 Screenshot_20260815_204101 Screenshot_20260815_204132

@dschmidt
dschmidt force-pushed the feat/photos-app branch 8 times, most recently from 656fdaf to 010b81b Compare August 17, 2026 11:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant