>
Tech News

Run PhotoPrism at home and you get sharper faces this month

Most self-hosted photo apps live or die on three things: face detection that does not lose people in group shots, search that finds things from years ago, and a privacy story you can actually explain to a guest. PhotoPrism’s most recent release moves the needle on the first two and quietly closes a long-standing gap on the third. If you have been holding off on a self-hosted photo app because the cloud cousins were better at grouping faces, that is no longer a fair characterization. This release is worth your Saturday afternoon.

What actually changed in face detection

The face model is the headline, and the headline is earned. PhotoPrism swapped in a new detection and embedding pipeline that catches faces that older versions missed entirely. Group shots, the perennial graveyard of self-hosted face libraries, see the biggest improvement. Smaller faces at sharper angles land where they belong instead of disappearing into a mystery bucket.

There is one detail that matters more than the marketing. Your library does not switch to the new model automatically. PhotoPrism ships a one-time command called photoprism faces migrate, and you have to run it for the improvements to apply. Why bother with a manual step at all? Because the migration preserves the names you have already assigned. The team picked the slower path on purpose. If they had flipped the model silently, every face in your library would have relabeled itself overnight, and the Sunday you spent teaching the app that “Mom” is Mom would have evaporated. The migration keeps the labels you have and overlays the better detection on top.

A few smaller cleanups came along for the ride and matter at library scale:

  • Bulk face updates finish faster than they did in the previous release
  • The memory footprint when clustering is meaningfully smaller
  • A bug that could collapse two people into one during reassignment is gone

Terminal commands for the people who live there

If a face cluster misbehaves and you cannot figure out why from the UI, the new face commands let you look directly at the data. That is the change most users will not notice, but the ones who hit it will appreciate it.

  • photoprism faces status summarizes the state of face detection
  • photoprism faces subjects lists every detected person
  • photoprism faces ls dumps full per-face details, one row per face
  • photoprism faces markers inspects the markers attached to a face
  • photoprism faces reset -all wipes face data without triggering a full rescan

The reset command is the one to remember. When something has clearly gone wrong and you want a clean slate without committing a full afternoon to rescanning, this is the option that keeps you moving. If you have never opened a terminal on your server, none of this changes your experience. If you have, it turns guessing into inspecting.

A privacy toggle that should have shipped years ago

The quiet addition in this release is the ability to mark someone as Private or Hidden. Once flagged, that person’s name and face region stop rendering for any non-privileged account, while the photos themselves remain visible. The toggle hides the identity, not the image. For families sharing a home server, this is the feature that makes a guest account actually safe to hand out. For anyone who has ever worried about who can see which name attached to a face in a shared library, the wait is over.

Cloud apps have had this for years. The fact that a self-hosted app had to play catch-up is a fair criticism of the project, and the fact that it is here now without requiring a plugin is a fair credit.

Camera and file support that removes small frictions

Two upgrades on the indexing side will not show up in a feature list, but they will save you from a config file:

  • The default cap on indexed file size is now 5 GB, raised from a number that was too small for anyone with longer video clips
  • The indexer now reads Cineon and ORI files, plus several camcorder formats that previously slipped past the importer

Insta360 360-degree photos and fisheye DNG files render natively now instead of falling back to a flat thumbnail that loses the whole point of the shot. If you shoot with an action or panoramic camera, you can browse them in PhotoPrism the way you would expect.

One browser change to watch for

The map view got upgraded under the hood. PhotoPrism moved from MapLibre GL JS version 5 to version 6, and the new version requires WebGL 2. Modern browsers handle this without thinking. Older browsers, unusual Linux desktops, and any setup where WebGL is disabled may see the map stop rendering properly. Before you push the upgrade, take thirty seconds to confirm your browser supports WebGL 2, because the failure mode is silent: photos stay in the library, the map just goes blank.

Trade-offs

The migration is the obvious cost. Running photoprism faces migrate on a library of a few thousand faces burns CPU for a chunk of time, and the duration scales with library size. On a Raspberry Pi class machine, give the job at least an hour and avoid browsing during it. The terminal commands are useful, but they assume you already live in a shell, so a non-terminal user does not benefit from the new debugging surface. The 5 GB cap on indexed files is generous but not configurable upward through the UI, so anyone working with longer video files will need to edit the YAML. The WebGL 2 requirement on the map view is reasonable in 2026, but anyone running an older browser stack on a Pi will need to either update the browser or live without the map. Security maintenance was uneventful in the right kind of way: libheif moved forward and patched eight CVEs, the Go toolchain moved up a minor version, and ONNX Runtime moved from 1.26.0 to 1.29.0. None of it is dramatic, but that is exactly what you want from an app holding your photo library.

Bottom line

Three things this week if you run PhotoPrism. Run photoprism faces migrate and let it finish. Flip the Private or Hidden toggle for anyone in your library who should not be publicly named. Confirm your browser supports WebGL 2 before you push the upgrade. That is your afternoon sorted, and the next time you browse a group shot, you will see the difference.

What I would tell past me

If you are about to do this migration on a library you have curated for years, take a real backup of the face index before running the new model. The migration preserves your labels, but a copy of the existing face database gives you a clean rollback path if anything in the new model surprises you. The command is straightforward, the storage cost is small, and the peace of mind is real. I would also tell past me to actually check the WebGL version in the browser before pushing the upgrade. The map going silently blank is the kind of failure that costs an evening, not a minute, and the only fix is the one you skipped because you assumed your browser was fine. Last thing: do the migration on a quiet evening, not on a weekend when the family is uploading photos. The CPU spike is real, and the slower path keeps everyone happy.

Leave a comment