Photo Backup & Library Stack

Replace Google Photos with automatic mobile backup and AI search.

3 apps≈4,224 MB RAM combined2 verified 5-minute deploys

Open this stack in the Stack Builder

Immich handles the Google Photos role — automatic mobile backup, timeline, face recognition, and shared albums — while PhotoPrism adds a second, independent view over the same originals with its own AI tagging and geodata browsing. Many self-hosters run both against one photo directory during migration, then keep the one that fits; Syncthing covers ingest from cameras and desktops that the mobile apps don't reach.

The apps and their roles

Last reviewed Oct 11, 2026 · 617 words

The rule that makes this stack safe is simple: one app writes, the others only read. Let Immich own phone uploads, let Syncthing own the folders it brings in from desktops and cameras, and mount everything read-only into PhotoPrism. Budget about 4,224 MB of RAM by the directory's estimates, almost all of it the two libraries at 2,048 MB each; Syncthing adds 128 MB. Both Immich and PhotoPrism are rated Medium, Syncthing Easy.

What talks to what

Nothing here calls another app's API. The integration is the filesystem.

Phones run the Immich app, which uploads into Immich's own upload location and organises files there. Desktops and cameras feed a separate originals folder through Syncthing, which syncs peer to peer over port 22000 and never needs its GUI exposed. Immich can then index that Syncthing folder as an external library without moving anything, so the timeline, face recognition and shared albums cover both sources. PhotoPrism indexes the same originals (and, if you want, Immich's upload folder) read-only and gives you its own AI tagging, maps and RAW handling as an independent second view.

AppRoleWrites to photos?Directory RAM estimate
ImmichPhone backup, primary libraryIts upload folder only2,048 MB
PhotoPrismSecond library, tagging, mapsNo (read-only)2,048 MB
SyncthingDesktop and camera ingestIts synced folder only128 MB

Deploy in this order

Start with storage. Decide where Immich's upload location and the Syncthing originals folder live, and make sure both sit on the disk you back up. Then deploy Immich using the docker-compose.yml and .env shipped with the release, because its server, machine-learning container, Postgres with the vector extension and Redis change between versions. Pin IMMICH_VERSION rather than tracking latest, and read release notes before upgrading. Get the phones backing up, then add Syncthing and the external library, then PhotoPrism last.

Stagger the initial indexing. Running both libraries' first scans and machine-learning passes at once on a large collection is how a modest box ends up swapping for hours.

Can Immich and PhotoPrism share one photo folder?

Yes, as long as only one of them is allowed to change it. Both apps can index the same originals directory, but if either is configured to import, move or rename files, the other sees files vanish and reappear and rebuilds its index. Mount the shared folder read-only into PhotoPrism, keep Immich's writes confined to its own upload location, and the two coexist. The Immich vs PhotoPrism comparison covers which one to keep once the trial period ends.

The mistake: treating the library as the backup

Immich backs up your phone to your server. It does not back up your server. A dead disk, a bad upgrade or an accidental album deletion takes the only copy with it. Back up the originals folders and Immich's database dump to a second disk and an off-site target. Syncthing is not that second copy either: it propagates deletions by design, so a mistake on one device spreads to all of them.

On the proxy side, raise the client body size limit for Immich or large video uploads fail partway. Give each app its own subdomain. Keep Syncthing's port 8384 GUI on the LAN.

What I'd do

Run Immich and Syncthing from day one, add PhotoPrism read-only for a month if you are undecided, then remove whichever you stop opening. The Google Photos migration guide covers moving your existing archive in, and that is the moment to set up the off-site copy, not after.

Compare apps in this stack

Related stacks