← Back to all sparks
L

LibrePhotos

COLLAB
Velocity0.0

Self-hosted photo management service with automatic tagging

LibrePhotos folded five repositories into one and started versioning like a real product.

self-hostedphoto-managementmonoreposemvergpu-builds
Current state
The project spent April through June on structural work rather than features. Backend, frontend, mobile app, docs, and Docker deployment were merged into a single repository with each project's git history preserved, and the versioning scheme moved to semver, producing the first 1.0.x releases. The releases since are consolidation: authorization hardening on the user API, a fix for the validation popups that hardening caused for non-admin users, and repeated pinning fights to keep the GPU image building.
Where it's heading
This is a self-hosted project doing the unglamorous work that makes contribution and release possible at scale — one repo, unified CI and Dockerfiles, predictable version numbers. The backend changes running underneath it are about resilience rather than capability: retrying transient face-service drops, hardening metadata extraction against exif-service failures, preserving scan baselines during job cleanup. The recurring Renovate-versus-GPU-pin conflicts suggest the dependency story for the CUDA image is still fragile.
Prediction
With the monorepo and semver in place, the next releases are likely to return to user-facing features on a 1.x line rather than more restructuring. The GPU image pins look like they will need a more durable fix than repeated Renovate overrides.

Recent moves

  1. 1mo ago

    1.0.3 - Fix user list popup for non-admin users

    A fix for a regression introduced by the earlier authorization hardening: non-admin users saw a validation popup for every row on the main page because the frontend still checked against the admin-only user schema. The list is now validated leniently and the public_sharing flag is back in the public serializer.

    View source ↗
  2. 1mo ago

    GPU image: restore the onnxruntime and timezonefinder pins

    Restores the Python 3.10 pins for onnxruntime and timezonefinder in the GPU image. The second of two same-day dependency-pin fixes to get that build working again.

    View source ↗
  3. 1mo ago

    GPU image: stop Renovate collapsing the scikit-learn pin

    Stops Renovate from collapsing the scikit-learn pin that the GPU backend image depends on. Build plumbing with no user-visible effect.

    View source ↗
  4. 1mo ago

    Switching to semantic versioning

    The switch to semantic versioning, bundled with a batch of backend resilience work — retrying dropped face-service connections, hardening metadata extraction against exif-service failures, and preserving the latest finished job per type during cleanup so scan baselines survive. Predictable version numbers matter for a self-hosted tool where operators decide when to upgrade.

    View source ↗
  5. 1mo ago

    LibrePhotos moves backend, frontend, mobile and docs into one monorepo

    ⚡ SPARK

    The quarter's milestone release, and the structural pivot the later entries all follow from: backend, frontend, mobile, docs, and deployment collapsed into one repository with history preserved. Everything since — semver, unified CI, the GPU image pin fights — is downstream of this move.

    View source ↗
  6. 7y ago

    2019 release candidate: timezone environment variable

    A 2019 release candidate adding a timezone environment variable, surfacing in the feed because the project has few tagged releases overall. It predates the current codebase and carries no bearing on the 1.x line.

    View source ↗