Tech Digest

Photos and files

PhotoPrism

Indexes an existing photo archive in place and gives it search, faces, places and a calendar

Photos and filesAGPL-3.0 (Community Edition); default images ship under the PhotoPrism Plus LicenseMaturearm64 buildsNative OIDC
Last reviewed Profile maintained against the project's own documentation
Operational load
2 / 5
Light
Idle memory
450 MB
typical use ~2000 MB
Moving parts
2
containers in a normal deployment
Backup shape
MySQL dump
needs a dump or a stop

PhotoPrism points at a folder of originals you already have and builds a searchable index over it, with face clustering, reverse-geocoded maps and label detection running locally. It is a browser-first library and viewer rather than a phone backup service.

Our verdict on PhotoPrism#

PhotoPrism is the right answer when you already own a well-organized folder tree and want search on top of it, not a service that takes ownership of your files. Releases are date-tagged rather than semver (the current one is 260728, 28 July 2026), and upgrades have historically been dull: pull, restart, reindex if asked. The licence split is the thing to understand. Community Edition source is AGPL, but photoprism/photoprism:latest is built under the Plus License with member extensions compiled in; the pure AGPL build is the ce tag. Personal membership is EUR 2/month for Essentials and from EUR 6/month for Plus. What money actually buys: the extra User and Viewer roles, the admin web UI, 3D vector and satellite maps, unrate-limited reverse geocoding, hardened security options and SVG support. Faces, labels, RAW, videos, WebDAV and OIDC are all in the free build. There is no first-party mobile backup app: you sync with PhotoSync or WebDAV.

Who PhotoPrism is for#

Choose it if

  • Someone with a decades-deep, hand-sorted folder tree who wants search and faces without a migration
  • Anyone who insists the folder structure on disk stays the canonical organization
  • Small servers where a two-container stack beats a four-container one
  • People who already use PhotoSync or a WebDAV client on their phone and do not need a first-party app

Look elsewhere if

  • You need automatic background photo backup from phones with a maintained first-party app
  • You want per-user libraries and granular sharing without paying, since extra account roles and the user admin UI sit behind membership
  • You cannot give the indexer headroom: hard container memory limits plus RAW files equal killed index runs

What running it actually looks like#

Two containers: the app and MariaDB, with the UI on 2342. You mount /photoprism/originals (your existing library), /photoprism/storage (index, cache, thumbnails, sidecars) and optionally /photoprism/import for the move-and-organize workflow. Set PHOTOPRISM_ADMIN_PASSWORD before the first start, because it only applies when the account is created. If you want PhotoPrism to keep its hands off the library, set PHOTOPRISM_READONLY=true, which also disables WebDAV and uploads. Docs warn that MARIADB_PASSWORD cannot be changed after MariaDB has initialized, so pick it once. The first index is the long pole: expect hours on a large RAW-heavy library, and give the host real swap because indexing large files can temporarily exceed normal usage. Use the ce tag if you want the strictly AGPL build.

Resource profile#

Memory
450 MB idle, around 2000 MB in ordinary use. Docs ask for at least 3 GB of physical memory plus 4 GB of swap; indexing RAW files and large panoramas is the spike, and TensorFlow is disabled automatically at 1 GB or less.
CPU and acceleration
Two cores minimum per the docs; indexing is the only heavy phase and it is CPU-bound on TensorFlow inference and thumbnail generation. No GPU is used for classification.
Storage growth
Originals are never modified in place, but the `storage/` folder accumulates multiple thumbnail sizes plus sidecar YAML and JSON, commonly adding a low double-digit percentage on top of the library.
Operational load
2 of 5, Light. Two containers, no schema surprises across releases, and the index is rebuildable from originals if it goes wrong. The recurring cost is remembering to back up the database and knowing that hard memory limits during indexing are what actually break it.

Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.

Data and backup surface#

Back up originals/ and the index database. If you are on SQLite, the file lives inside storage/; on MariaDB, run docker compose exec photoprism photoprism backup -i -f, which writes a SQL dump into a driver-specific subfolder under storage/ and keeps three by default. The whole storage/ folder is worth keeping even though thumbnails and sidecars are regenerable, because regenerating them means another full index pass. If you exclude anything, exclude the thumbnail cache. Sidecar YAML in storage/sidecar/ holds edits you made in the UI, so losing storage while keeping originals loses your metadata work.

Derived backup shape

MySQL dump. mariadb-dump / mysqldump with --single-transaction, then snapshot the dump plus the app's data volume.

Traps and surprises#

The default Docker image is not the AGPL build

photoprism/photoprism:latest is distributed under the Plus License and bundles member extensions with the compiled application. The freely licensed Community Edition is the separate, slightly smaller ce tag. Both are free to run, but if your reason for self-hosting is a strict open source supply chain, the tag you get by copying the quick-start compose file is not the one you want.

PHOTOPRISM_ADMIN_PASSWORD applies once

The variable seeds the admin password when the account is first created. Changing it in .env later and restarting does nothing, which sends people down a rabbit hole assuming the container is not reading the environment. Reset it with docker compose exec photoprism photoprism passwd admin. The same one-shot logic applies harder to MARIADB_PASSWORD, which the docs say cannot be changed after MariaDB has started for the first time.

Indexing gets OOM-killed under hard memory limits

Docs recommend at least 3 GB of physical memory, RAM roughly matching core count, and at least 4 GB of swap, and explicitly advise against hard memory limits because indexing large files temporarily needs more. On a NAS or a memory-capped container, RAW and panorama indexing dies partway through and the library looks half-imported. Give it swap, or index in smaller batches.

Import moves files, index leaves them alone

The two workflows are not interchangeable. Indexing reads originals/ in place. Import takes files from import/ and moves them into originals/ under PhotoPrism's own date-based naming, which is destructive to whatever structure they arrived in. People who drop their archive into import/ to try it out discover their folder layout has been rewritten. Mount your library as originals and leave import empty unless you want that behavior.

No first-party mobile backup app

PhotoPrism ships a PWA and documents PhotoSync as the phone-side option; the comparison table lists 'PWA & PhotoSync' for every tier including paid ones. If your requirement is automatic background upload of new camera roll photos with an app your family installs once and forgets, that is a third-party dependency here, and it is the main functional gap against Immich.

Specifications#

Category
Photos, files and sync
Licence
AGPL-3.0 (Community Edition); default images ship under the PhotoPrism Plus License (Copyleft)
Written in
Go (backend), Vue (frontend), TensorFlow (models)
First release
2019
Maturity
Mature
Datastore
MariaDB 10.5.12+ recommended; SQLite supported for small libraries
Default ports
2342
Ships as
docker compose, linux package (members), native binary from source
arm64 builds
Yes
Identity
Native OIDC. OpenID Connect login is listed as available in the free Community Edition, but the User Management web UI that makes multi-user setups pleasant is a Plus feature.
Replaces
Google Photos, Apple Photos, Adobe Lightroom (library and browse), Flickr
Project site
www.photoprism.app
Source
github.com/photoprism/photoprism
Documentation
docs.photoprism.app

Alternatives to PhotoPrism#

Everything else in photos, files and sync, closest in operational weight first.

ToolOps loadIdle RAMLicence
File Browser1, Set and forget20 MBApache-2.0
Immich3, Moderate900 MBAGPL-3.0
Seafile3, Moderate700 MBGPL-2.0 with an OpenSSL linking exception (server, Community Edition); Professional Edition is proprietary
Syncthing1, Set and forget60 MBMPL-2.0
Nextcloud4, Heavy600 MBAGPL-3.0-or-later

Where PhotoPrism comes up elsewhere#

Sources#

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.