This release gives the whole app a fresh look, puts faces to review one click away, gives your photos far fewer wrong things, and shows each user their year in photos around Christmas. Errors are now kept on your server until an admin chooses to share them, big days load fast and stay still while you scroll, and it fixes security problems in sharing and user management.
Who should update: Everyone. If other people have an account on your LibrePhotos, update right away: this release fixes security problems. If you run Docker with 1.5.0 or 1.5.1, update too: those images sent usage data about the models and your hardware to Microsoft (nothing about your photos).
What's new for you:
- Every page has a calmer, cleaner design, in light and dark and on phones. Click Customize sidebar under the sidebar's pages to pin the pages you use most; your recent albums show there too. When you favorite, hide or archive photos, the message has Undo. Big days on the timeline load fast and no longer jump while you scroll. See Timeline.
- The People page says how many faces wait for you, for example 25 faces to review, and opens them in one click. Review faces in a person's menu shows only their faces. See Open the face dashboard.
- Photos get far fewer wrong things: at most five, and each only when LibrePhotos is sure enough. Photos you already had keep their old things until you find them again (see below).
- Between 20 December and 6 January, Rewind shows each user their year in photos once: the busiest day and month, and the people and places they photographed most. It is worked out on your own server. Account menu > Your 2026 Rewind opens it again during that time.
- Admins: when something breaks, LibrePhotos now keeps a cleaned-up error report on your server. Nothing leaves it until you choose to share reports with the LibrePhotos maintainers or with your own server. See Error reporting.
After you update:
- Nothing to do for most of it. The new look, the faster days and the security fixes work right away. Once an admin's library is fully processed, they see a one-time thank-you with ways to support the project; closing it hides it for good. This is the same on the Windows app and on Docker.
- Recommended for everyone: find things again. Go to Account menu > Library, then under Things click the arrow next to Find > Find things again for all photos. It asks first, because on a large library it runs for hours. It is done when the job in Account menu > My jobs has finished. If you skip it, the photos you already had keep their old, often wrong things; new photos get the better ones by themselves. Your own tags and keywords stay as they are.
- Admins: choose where error reports go. LibrePhotos asks once, in a Help fix bugs in LibrePhotos? dialog. Off: keep reports on this server sends nothing. You can change the choice any time under Account menu > Admin area > Error reporting. If you do not answer, nothing is sent. See The choices.
Upstream:
🚀 LibrePhotos: A Fresh Look for the Whole App
The web app got a design pass over every page, checked round by round against Google Photos, Apple Photos and Immich in light, dark and phone sizes (#2931, #2944). The theme has an accent colour with readable contrast in both modes, the timeline has justified rows in which short days share a line, left-aligned day headers and a clearer selection. Customize sidebar pins pages such as Favorites, Memories or Faces and lists your recent albums, the search field keeps your query on the results page, and detail pages get a back button. Album, event and person pages show their dates, members and actions in one header, and the photo viewer has a dark stage, a title that says where you are, and a shorter toolbar with the rest in a menu. Menus, messages and dialogs follow one style: on phones they open as sheets from the bottom, messages say what happened in one sentence, and favorite, hide, public and archive can be undone. The People page shows how many faces wait for review and opens them in one click, and a person's Review faces opens only their faces (#2946). English labels are now in sentence case; the other languages follow on Weblate. New users get left-aligned day headers, and existing users keep their setting.
🚀 LibrePhotos: Error Reports Stay on Your Server Until You Share Them
LibrePhotos now saves the errors of the backend, the workers and the web app on your server, scrubbed: at most 30, none older than 30 days, with repeats counted instead of stored again (#2938, #2942). Nothing is sent until an admin picks My own server (a GlitchTip or Sentry project in SENTRY_DSN) or Share with the LibrePhotos maintainers. Each report is rebuilt from an allowlist, which removes paths and file names, the names of people, albums and tags, usernames, email and IP addresses, URLs, cookies and request bodies. The Error reports page in the Admin area sends, downloads, emails or deletes each report. New servers ask in the Errors step of the first-time setup, and existing servers ask their admins once. Emailed reports reach a small receive-only mail server run by the maintainers in Germany, whose code is in the repository (#2943). Shared reports carry their grouping key, so repeats become one issue on the receiving server (#2950), and the question no longer waits forever on a library that never finishes processing (#2948). See Error reporting.
🚀 Backend: Far Fewer Wrong Things
Things were mostly noise: a photo got up to ten of them from one flat list of 938 words, and graded by hand, about four in five were wrong or useless, such as "teenager" and "selfie" on every portrait or "receipt" on chat screenshots. The list is now split into kinds, each with its own minimum and cap: people and kinds of picture count at a few percent, while activities, sports and occasions need near certainty, and a photo gets at most five things. Each word is matched with several prompts instead of the bare word, and the list went from 938 to 512 words, with new kinds of picture such as screenshot, chat, meme and chart. On 100 photos held out from tuning, wrong or vague things per photo went from 6.9 to 0.9, with as many good ones as before. Chat screenshots and app screens are no longer taken for documents. Your own words can now carry a description (word = description). Photos keep their old things until Find things again for all photos (#2932).
🚀 LibrePhotos: Big Days Load Fast and Stay Still
A day of the timeline was read from a copy table and paged with page numbers, so every page of a 200,000-photo day without dates took about 8.5 s. Days are now read straight from the photos in timeline order with cursor pages: about 50 ms for any page of that day, and 15 to 23 ms for a page of a dated day. The photos not loaded yet take their real shapes, and the grid keeps your place, so nothing on screen moves while you scroll up (#2920). Short days sharing a line no longer push the timeline down as their photos arrive (#2944). Deleting photos one after another in the photo viewer keeps it open on the next photo, and stepping to the next photo takes about 0.2 s instead of a second on a 210,000-photo library (#2921). Accepting or removing faces on the face dashboard updates the lists in place instead of reloading every face (#2933).
- ✨ LibrePhotos: Rewind, each user's year in photos, opens once between 20 December and 6 January, worked out on your server from your own photos, and admins see a one-time thank-you once their library is processed. Both can be turned off under Site settings (#2916)
- ✨ Frontend: Remove finished jobs on My jobs removes all finished job records at once, and keeps the ones the next scan builds on. Requested by masch3000 (#2908, #2917) (Implemented by lalmachado)
- ✨ Backend: The timeline reads days from
/api/days/with cursor pages;/api/albums/date/still answers for older apps, deprecated - ✨ Docs: The docs site looks and reads like the app, its labels match the app's, and it has a search (#2957, #2958)
- ✨ Docs: The feature comparison is up to date for LibrePhotos and Immich (#2911) (Implemented by dotanm)
- 🔨 Backend: A face cut off by the edge of a photo is saved instead of failing Scan faces on every run. Reported and diagnosed by koen-bosmans (#2922, #2939) (Implemented by dotanm)
- 🔨 Backend: Scans ignore text notes that start with two numbers, and
.csvfiles, instead of failing on them. Reported by Bob-Burley (#2913, #2954) - 🔨 Backend: Jobs: a queued task that an update left behind is removed and recorded as failed, instead of stopping the whole task queue (#2945, #2947, #2949)
- 🔨 Backend: Released UhuruPhotos builds work with this server again: favorite, trash and the other bulk edits act on the photos, the full-size view opens, deleting an album works, and the timeline routes they read are kept (#2934)
- 🔨 LibrePhotos: Dependency updates for the backend and the web app, among them Django 6.1.3, rawpy 0.28 and Mantine 9.7.5
- 🔨 LibrePhotos: The Kubernetes manifests in
deploy/k8srun 1.6.0; since 1.4.0 they had still pinned 1.3.0 - 🔒 Backend: ONNX Runtime no longer sends usage telemetry to Microsoft. The 1.5.0 and 1.5.1 Docker images sent it by default: model names and hashes, hardware, errors, timings and a device id, nothing about your photos.
ORT_DISABLE_TELEMETRY=0allows it again (#2927) - 🔒 Backend: Photos an owner hid, trashed or removed stayed readable to the users they were shared with, and the summary of a formerly public photo stayed readable to visitors (Medium, GHSA-57r4-v566-3rcw). Reported by tsurutanmen
- 🔒 Backend: The mobile sync feed ignored the owner's library sharing switches, such as location and rating (Medium, GHSA-9j7w-vxf9-x93c). Found by Liam-G
- 🔒 Backend: A staff account that is not a superuser could edit a superuser's account; only a superuser can now (High, GHSA-9r2w-8q26-2fcw). Reported by tsurutanmen (#2955)
Full changelog: 1.5.1...1.6.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-6-0