This release lets you share your whole library, one person or an album others can add to, makes labelling faces much faster, shows every photo on the map where it was taken, and opens photo spheres in a 360° view. The Windows app can now update itself, the Docker image uses any GPU, and it fixes security problems in public pages and sharing.
Who should update: Everyone. If other people have an account on your LibrePhotos, or you share public links, update right away: this release fixes security problems. If you use the Windows app 1.3.0 or 1.4.0, update too: it did not finish processing new photos.
What's new for you:
- Open Sharing and click Share my library to share all your photos with another user, read-only, or choose Share… in a person's menu to share just them, for example your child with the grandparents. People you give Can add photos can add their own photos to your album. See Sharing your whole library.
- Faces: drag a rough box around a face the scan missed and LibrePhotos finds it, sort the faces dashboard by Similar faces together, and a label now covers the same face in the other photos of a burst. People can get a birth date and show their age. See Add a face the scan missed.
- The Places map shows every photo where it was taken. Add place names your own spots, such as Home or Grandma's, and the photos taken there are filed under that name. See The Places page.
- Photo spheres get a 360° badge and a 360° view in the viewer, zooming in loads the original photo, videos show a still picture until you point at them, and Oldest first under Order shows a trip from the first day to the last. See 360° photo spheres.
- After an update, a small What's new card shows what changed and what to do. Admins see an Update available card when a new release is out, and the Windows app downloads it and restarts into it. See Updating from LibrePhotos.
Before you update:
- Make a backup as usual.
- Admins with their own PostgreSQL: LibrePhotos now needs PostgreSQL 15 or newer. The bundled Compose files (18) and the Kubernetes manifests (16) already run a newer one. Upgrade an older server first, or the backend stops at start with an error that names the version. See Upgrading.
- Admins with the GPU image:
reallibrephotos/librephotos-gpuis no longer built. Switch thebackendservice back toreallibrephotos/librephotosand give it your GPU as Utilizing GPU Acceleration shows. It now works with Intel, AMD and NVIDIA. - Windows app: this update is still done by hand. From 1.5.0 on, the app updates itself.
After you update:
- Nothing to do for most of it. Admins see the remaining work on the Finish the upgrade card under Account menu > Admin Area: it makes still pictures of the videos you already have, by itself. The What's new card in the corner of the page lists the steps below too.
- Recommended for everyone: rescan your photos once. Go to Account menu > Library, then the arrow next to Scan > Rescan. This finds the photo spheres, the time zone of the capture time, and copyright, creator and license in photos you already had. It is done when the job in Account menu > My Jobs has finished. If you skip it, only new and changed photos get them.
- Windows app, if you added photos with 1.3.0 or 1.4.0: scan once, required. Those releases stopped every new photo right after its thumbnail, so the photos have no date, place or camera details, and LibrePhotos finds no duplicates among them. Each user goes to Account menu > Library and clicks Scan (the Rescan above does it too). It is done when the job in Account menu > My Jobs has finished; places and faces follow by themselves. If you use them, run Detect Duplicates, Detect Photo Stacks and Generate Event Albums again afterwards. See Windows app 1.3.0 and 1.4.0.
- Public links show only what you allow. Public albums, public photos, your public profile and photo links now all follow Settings > Public Sharing Defaults (or the album's own link settings). Before, some pages showed dates, places or the original file anyway. If visitors should see dates or places, turn those switches on. See Photo Details.
-
Admins: settings, Docker and API changes
New site settings: Public gallery (off by default), Place name language, the single sign-on switches, and **Remove duplicate faces** in the Admin Area. New environment variables:GEOCODE_LANGUAGE,REMEMBER_ME_DAYS,PUBLIC_GALLERY_THROTTLE_RATE,UPDATE_CHECKandFEATURE_FACE_DETECTION_IN_VIDEOS(see Environment variables). The bundled Compose files give thedbserviceshm_size: 256mb; add it to an older Compose file if pages fail with "could not resize shared memory segment" (FAQ). On hosts that start the new container before they stop the old one (Coolify, Kubernetes), the old worker may log "Function ... is not defined" once during this update; from 1.5.0 on it leaves the tasks to the new release (details). The images run Python 3.14 and Django 6.1. Scripts that use the API: list endpoints no longer send the old pagination fields of 1.4.0 (has_next,has_previous, the folder listing'ssubfoldersandpagination),?size=is no longer read aspage_size, and the photo list only lists your own photos.
Upstream:
🚀 LibrePhotos: Share Your Library, a Person or an Album
Share my library on the Sharing page shares your whole library with another user, read-only, as you add to it (#2731). Every switch under What they see starts off, the photos stay yours, and you can stop at any time. A person can be shared on their own, with a review of new photos before they go out (#668). Albums can take contributors: a user with Can add photos adds photos from their own library, members can comment and like, and nothing is copied or moved (#464, #262). The places, things and people of the photos shared with you now show up for you too. Admins can open a public gallery at the server's address with the public photos of everyone who opts in, for members only or for everyone; it is off by default (#434). Photos can carry a copyright, creator and license, read from and written to the file, with defaults for your photos, and public pages show them when a license is set (#425).
🚀 LibrePhotos: Faces, Made Easier
Drag a rough box around a face the scan missed and LibrePhotos finds the face inside it. A Similar faces together order on the faces dashboard puts look-alikes next to each other, and labelling a face also labels it in the other frames of a burst or duplicate group. Not this person is remembered, so a face is not suggested for the same person again, you can set a Minimum face size under Settings > Face Options, and admins can remove faces saved twice with Remove duplicate faces. A person can have a birth date: their age shows on the person page, and faces in photos taken before they were born are not suggested for them. Faces in videos are read on up to nine frames, and a face opens the video at the moment it appears (#2762). New faces from uploads are grouped by themselves once enough of them came in, and face clustering no longer deletes named people without faces.
🚀 LibrePhotos: Photos on the Map and Your Own Places
The Places map shows every photo where it was taken, clusters count photos instead of place names, and clicking a point shows its newest photos (#343). Add place draws a named circle, from a house to a village, and every photo taken inside it is filed under that name, also in event titles such as "Sunday at Home" (#1365). Online map providers can name places in your language with Place name language, and the place search in the location editor works with OpenCage, Mapbox and MapTiler again.
🚀 LibrePhotos: Viewing, Scanning and Uploading
Photo spheres open in a 360° panorama viewer (#483), zooming in the lightbox and the mobile viewer loads the original, and videos show a still poster in the grid and play only on hover. Lists can run Oldest first, saved on your account (#2712), the scroll scrubber reaches the header and has thumb and density styles, and things show in the interface language. The Library page gets a Processing status card with Run now per stage. You can leave subfolders out of a library, rename photos by their capture date and sort them into dated folders, find files replaced with their old date (Check file contents), and create a folder from the scan directory picker. Date rules can be written and edited by hand, the photo says why it has its date, and the UTC offset of the capture time is stored and shown. Uploads get an import job: the upload card follows them through the server's processing, and search, faces and text recognition catch up after uploads by themselves. The login page has Remember me.
🚀 LibrePhotos: Updates from the App, Any GPU
Once a day the backend asks GitHub whether a newer release is out, and admins see an Update available card, a dot next to the version and, on Windows, a tray notification. The Windows app downloads the new release and restarts into it (#2788). After an update, every user sees a small What's new card once, with the highlights and the steps to take. The machine learning models run on any GPU (Intel, AMD, NVIDIA) through ONNX Runtime's WebGPU plugin in the regular image, also in the single container, and the NVIDIA-only GPU image is no longer built (#2445). The backend moves to Python 3.14 and Django 6.1, and scikit-learn, hdbscan, ImageHash and insightface are replaced by small numpy ports that give the same results, so the Windows build compiles in 38 minutes instead of three hours.
🚀 LibrePhotos: Security and Privacy Fixes
Public pages now show only what the public sharing switches allow: public albums, public photos, public profiles and photo links hide dates, places, camera details, captions and names unless they are switched on, and a visitor gets the original file only when all five are on. The photo list only lists your own photos, and album links made by older releases to other users' photos are removed. Pillow is updated to 13 for its security fixes. Please update right away if other people use your LibrePhotos or you share public links.
- ✨ LibrePhotos: Scan now in the Admin Area, and
gshortcuts to go between pages - ✨ LibrePhotos: Find things again for all photos on the Library page
- ✨ Backend:
POST /api/scan-files/andscan -stake folders and removed paths - ✨ Backend: Text recognition runs on the photos that still need it after scans and uploads
- ✨ Mobile: Uploads still processing on the server show in the app, the memories reminder only comes on days with memories, and zooming loads the original
- ✨ LibrePhotos: Single sign-on switches in Site Settings; shared emails are refused and identity provider errors reach the login page
- ✨ Frontend: People matching a typed name are listed with the most faces first (#301) (Implemented by lalmachado)
- ✨ Docs: Release posts with screenshots, a
<Screenshot>component and a workflow that refreshes the shots - 🔨 Frontend: The avatar in the header lines up with the buttons next to it again
- 🔨 Backend: Jobs: a taken task is held on a lease, so a restart no longer strands it for months (#2852), and a long silent job that a running worker still works on is no longer marked failed
- 🔨 Backend: An older worker takes no tasks from a database a newer release has migrated
- 🔨 Backend: The Admin Area, the statistics and the album lists no longer run Postgres out of shared memory on large libraries (#2868), and the bundled Compose files give Postgres 256 MB of
/dev/shm(Implemented by dotanm) - 🔨 Backend: The similarity index is rebuilt each time the converted count doubles, faces move to the unknown cluster in two updates, and a photo the search conversion cannot read no longer holds the upgrade task open (Implemented by dotanm)
- 🔨 Backend: Nextcloud: interrupted downloads are retried and indexed copies are skipped (Implemented by varet80), and a Nextcloud scan runs the scan follow-ups
- 🔨 LibrePhotos: Windows app: ImageHash was missing from the 1.3.0 and 1.4.0 builds, so every scanned photo failed halfway; the build now includes every lazily imported module, and the smoke test checks the hash and the scan job's errors
- 🔨 Backend: A keyword edit no longer overwrites the file's last-read keywords, and a rescan takes a file's keywords and rating only when the file changed
- 🔨 Backend: A re-encoded picture keeps its labels, and things, caption, search data and text of a replaced picture are made again
- 🔨 Backend: Face clustering and training only use the faces the user is shown
- 🔨 Backend: The Public Sharing Defaults switches are saved again
- 🔨 Frontend: Menus fit the window, videos show in bulk-action previews, a placeholder tile opens nothing, and Tab works in the lightbox with Mantine 9.7
- ✨ LibrePhotos: Renovate dependency updates for the backend, frontend, mobile app and docs, among them Pillow 13, TanStack Query 5.105, react-i18next 17.1, Node.js 24.22 and coverage 7.17
- 🔒 Backend: Public pages only show what the public sharing switches allow, and serve the original file only when all of them are on
- 🔒 Backend: The photo list only lists your own photos
- 🔒 Backend: Album links to other users' photos made by older releases are removed
- 🔒 Backend: Pillow 13 with its security fixes
Full changelog: 1.4.0...1.5.0
If you are interested in how I develop this application, you can watch me develop features live on my channel
Sponsoring development:
My work is sponsored by 2 awesome people!
If you like the work I do, then you can support me via GitHub sponsors or via PayPal
Read this release on the docs site: https://docs.librephotos.com/blog/1-5-0