Storage

Best NAS for Immich and Photo Backup (2026)

This post contains affiliate links. If you buy through them, we may earn a small commission at no extra cost to you. Learn more.

Immich works a NAS hardest on the first day, when it runs face detection, smart search and text recognition across every photo you own. After that, a phone backing up a few dozen shots a night barely registers. So we sized this list of the best NAS for Immich by that first import, not by the daily sync. We tested Immich v3.3.3 on October 20, 2026 on a 4-core, 8 GB Proxmox VM, timed every machine learning job on a 497-photo library and logged the memory each container used.

Original content from computingforgeeks.com - post 175925

We didn’t have any of these NAS boxes on the bench, so the hardware notes come from maker spec sheets and the Immich issue tracker, and we name each source where we use it. Prices are from Amazon US on the same day. The measured part is Immich itself: what it needs, where it spends its time, and why more cores matter more than any setting you can change.

NASBest forCPURAM, stock / maxPrice, Oct 20
UGREEN DXP4800 PlusMost householdsPentium Gold 8505, 5 cores8 GB / 64 GB$656.99
TerraMaster F4-425 ProBig libraries on CPUCore i3-N305, 8 cores8 GB / 32 GB$594.99
UGREEN DXP2800Best valueN100, 4 cores8 GB / 16 GB$389.99
Synology DS425+Staying on DSMCeleron J4125, 4 cores2 GB / 6 GB$579.99
QNAP TS-264-8GTwo bays with a PCIe slotCeleron N5095, 4 cores8 GB / 16 GB$469.00
Beelink ME miniDIY all-flashN150, 4 cores12 GB, soldered$359.00

Check the NAS against the Immich floor

Immich’s requirements page sets a minimum of 6 GB of RAM and 2 cores, and recommends 8 GB and 4 cores. Since v3 the machine learning container on x86 also needs an x86-64-v2 CPU, which every pick here meets. The rule that catches NAS owners is storage: the Postgres database should sit on local SSD and “never a network share of any kind”, so a box with an M.2 slot has a real advantage.

Our VM showed why the RAM floor is set where it is. With an empty library, all four containers used about 1,350 MiB at idle, and about 2,430 MiB at idle once the photos were in. At default settings the highest peak was 2,547 MiB during OCR, and running face detection at concurrency 4 pushed it to 2,620 MiB. On 8 GB that leaves room for a NAS OS beside it, but it is already past a stock 2 GB Synology. It doesn’t leave much either on a 4 GB QNAP once the vendor OS takes its share.

Time the first import, not the daily sync

We imported 497 public-domain NASA photos, 300 of them astronaut portraits, so face detection had real work to do. Machine learning ran CPU-only on 4 vCPUs of an Intel Core i7-6700, a 2015 desktop chip that is still faster than most of the NAS CPUs below. Expect the J4125 and N5095 boxes in particular to take longer than these figures. We re-ran the two biggest jobs once the models were cached, which removes the one-time download from the timing:

Job, 497 photosFirst run, with model downloadRe-run, default concurrencyRe-run, concurrency 4
Upload, metadata, thumbnails73 sn/an/a
Smart Search (CLIP)82 s39.1 s, 12.7 photos/s38.9 s
Face detection131 s125.8 s, 3.95 photos/s136.7 s
Face recognition (clustering)11 s, 84 peoplen/an/a
OCR (on by default in v3)162 s, 3.1 photos/sn/an/a

Face detection and OCR are where the time goes. Face detection kept all four cores busy, and raising it from 2 to 4 parallel jobs made it 9% slower. The peak load average rose by about half, from 4.9 to 7.6, and the ML container grew from about 800 MiB to 1.1 GiB. Smart Search didn’t speed up either. OCR ran at its default of one job and used about half the CPU, and we didn’t test it at higher settings. So don’t turn the face detection or Smart Search concurrency up on a 4-core NAS. More cores, or a working accelerator, is the lever that moves the number.

Scaled linearly from those figures, a first import on this class of CPU takes roughly 2.2 hours for 10,000 photos, 11 hours for 50,000 and about 45 hours for 200,000. Treat that as an order of magnitude, because phone photos are bigger than our test files and every NAS CPU differs from the one we used. It fits a maintainer’s warning that a 750,000-asset library can take weeks on minimal hardware.

Choose the NAS by library size

Library size decides how much the CPU matters, because the first import scales with it and everything after that is light. Here is how we would split the picks, using the lab timings above:

LibraryEstimated first import on 4 coresWhat to buy
About 10,000 photosAn evening, about 2 hUGREEN DXP2800, or a DS425+ with the RAM upgrade if a slower import is fine
About 50,000 photosOvernight, about 11 hUGREEN DXP4800 Plus or TerraMaster F4-425 Pro
200,000 photos or moreAbout 2 daysF4-425 Pro with 16 to 32 GB, or remote ML on a desktop GPU

The last row has a way out that most buyers miss. Immich can send its machine learning jobs to a remote ML container on another machine, so a desktop with a GPU can do the first pass and the NAS takes over afterwards. That’s worth doing once for a big library, rather than paying for a faster NAS you’ll only need for two days.

Buy a NAS that runs Immich well

Every box below meets the RAM floor as shipped or with one cheap stick and has Intel graphics for Quick Sync video transcoding. The NAS units run Docker from the vendor OS, and the Beelink runs whatever OS you install. Each comes with the one trade-off we’d want to know before buying it.

UGREEN DXP4800 Plus: best overall

UGREEN NASync DXP4800 Plus 4-bay NAS
UGREEN NASync DXP4800 Plus (image: UGREEN), sold by UGREEN GROUP LIMITED

The DXP4800 Plus is $656.99 without drives. It has four bays, a five-core Pentium Gold 8505, 8 GB of DDR5 that goes to 64 GB, two M.2 slots for the database and thumbnails, and a 10GbE port beside a 2.5GbE one. It is the only pick with 10GbE and a 64 GB memory ceiling, and it still puts the database on NVMe.

Its Intel graphics can run Immich’s OpenVINO backend, but the hardware acceleration page still calls that feature experimental, and we could not test it on this box. Plan the first import as CPU-only and treat any speedup as a bonus. Our 4-bay NAS guide covers its drive bays, UGOS and the warranty terms in more depth.

TerraMaster F4-425 Pro: best for big libraries

TerraMaster F4-425 Pro 4-bay NAS
TerraMaster F4-425 Pro (image: TerraMaster), sold by TERRAMASTER

The F4-425 Pro with the Core i3-N305 is $594.99, and its eight cores go straight at the jobs our lab showed were slow. It ships with 8 GB, takes up to 32 GB in one SO-DIMM slot, and has three M.2 slots and two 5GbE ports. If you’re bringing 50,000 or more photos across from Google Photos or iCloud, this is the box that shortens that first import the most on CPU alone.

Software is the catch. A TerraMaster FAQ says that installing another operating system voids the warranty, so the safe plan is to stay on TOS and run Immich in its Docker app. That is fine for Immich, which only needs Docker Compose. Reports differ on Unraid: a January 2025 NASCompares report said TerraMaster had changed its policy so that Unraid no longer voids the warranty, so ask TerraMaster before you switch the OS.

UGREEN DXP2800: best value

UGREEN NASync DXP2800 2-bay NAS
UGREEN NASync DXP2800 (image: UGREEN), sold by UGREEN GROUP LIMITED

The DXP2800 is $389.99 for two bays, a four-core N100, 8 GB of DDR5, two M.2 slots and a 2.5GbE port. For one household backing up phones, that covers Immich’s recommended spec with the database on NVMe and two drives in a mirror for the photos. Memory tops out at 16 GB, so it is not the box for a library that keeps growing for years.

Expect the first import to load it fully. An owner of an N100 DXP4800 with 8 GB reported that a bulk import pushed the load past 16 and made the box unresponsive until he pinned CPUs and capped the ML container. We saw the same pattern on our VM, where the ML container used every core it had. Let it finish overnight and it settles down.

Synology DS425+: for people staying on DSM

Synology DiskStation DS425+ 4-bay NAS
Synology DiskStation DS425+ (image: Synology), sold by Amazon.com

The DS425+ is $579.99, but it ships with 2 GB of RAM, a third of Immich’s minimum, and Synology’s datasheet caps it at 6 GB with one extra 4 GB module. The OWC 4 GB module at $34.99 gets it to exactly that floor, but the same datasheet warns that Synology “will not provide complete product warranty or technical support” with non-Synology memory. Synology’s own 4 GB module was only on offer from a third-party seller at $229.99 when we checked.

Its Celeron J4125 is the slowest CPU on this list. A regression in earlier releases broke OpenVINO on a DS423+ with the same chip, among other Intel GPUs, until it was closed as fixed in late September 2026. M.2 storage pools also need Synology-verified SSDs, which matters if you want the database on NVMe. Run Immich CPU-only and it works, but buy it for DSM, not for Immich; if DSM isn’t the draw, our Synology alternatives guide compares the boxes that replace it. The 2-bay DS225+ at $364.99 has the same CPU and memory limits and no M.2 slots.

QNAP TS-264-8G: two bays with an upgrade path

QNAP TS-264 2-bay NAS
QNAP TS-264 (image: QNAP), sold by Amazon.com

The TS-264-8G is $469 with 8 GB, two M.2 slots, two 2.5GbE ports and a PCIe Gen 3 x2 slot on QNAP’s spec sheet for an expansion card later. Memory goes to 16 GB, and QNAP says to use its own modules. Pick it among the 2-bay boxes if you want to add faster networking without replacing the box.

Its Celeron N5095 is one of the two slowest chips here, ahead of only the J4125, and Jasper Lake has had OpenVINO trouble. One owner hit “out of GPU resources” in face detection until he switched to a smaller face model, and the same regression that hit the J4125 also broke OpenVINO on Jasper Lake before the fix. Plan for CPU-only and a slower first import than the N100 or N305 boxes.

Beelink ME mini: the DIY all-flash route

Beelink ME mini N150 six-slot NVMe mini PC
Beelink ME mini (image: Beelink); the linked listing is sold by THYPC-Beelink

The ME mini with an N150 and 12 GB of soldered LPDDR5 is $359, and it suits a reader who wants to run TrueNAS or Unraid instead of a vendor OS. It has six M.2 slots, with Beelink recommending slot 4 for the system drive and listing up to 24 TB in total, plus two 2.5GbE ports. It ships with Windows 11 Home, so you replace the OS before anything else. The TrueNAS Immich app sits in the Community catalog, and our DIY NAS guide covers the build, with TrueNAS versus Unraid for the OS choice.

Cost per terabyte is the trade-off. With no hard drive bays, a 200,000-photo library on SSDs gets expensive fast, and the 12 GB can’t be upgraded. The Amazon listing in stock when we checked was sold by THYPC-Beelink, while a Beelink-sold listing for the 2 TB model showed a later availability date, so check the seller before you order.

Avoid these three for Immich

These boxes look like obvious picks, and each has a reason we left it out:

NASPrice, Oct 20Why we skipped it
UGREEN DXP4800 GT$659.99AMD Ryzen R2514: no OpenVINO, and the ROCm path is unverified on this chip
QNAP TS-462A-4G$529.00Ships with 4 GB, below Immich’s 6 GB minimum
TerraMaster F4-425 Plus$649.99 to $699.99Costs more than the F4-425 Pro with half the cores

As a dual-10GbE NAS the DXP4800 GT is good, but for Immich it runs machine learning on four CPU cores at a higher price than the DXP4800 Plus. If faster networking matters more than ML, our all-flash NVMe NAS guide is the better starting point.

Put the database on local NVMe

Immich’s release ships an example .env file that sets two paths: one for your photos and one for the Postgres database. On a NAS, those two belong on different storage, and this is the one setting worth changing before the first container starts. Check both lines in the file you downloaded:

grep -n LOCATION .env

In the stock file from the release we tested, they read:

4:UPLOAD_LOCATION=./library
7:DB_DATA_LOCATION=./postgres

On a Synology, the NVMe pool needs Synology-verified SSDs. Change the two paths in this order before you start Immich:

  1. Create a folder on the NVMe pool for the database
  2. Point DB_DATA_LOCATION at that NVMe folder
  3. Point UPLOAD_LOCATION at a share on the hard drive pool
  4. Start the stack with docker compose up -d

Moving the database after a big import is a much bigger job than setting the path first. If you add an external library on a network share, leave library watching off. One owner found that watching about 90,000 files over SMB caused a storm of filesystem metadata calls that stalled every Immich queue. Our Immich install guide walks through the full compose setup on a plain Linux host.

Check where the models run

A NAS that claims OpenVINO support only speeds up Immich if the machine learning container actually uses the iGPU, and it falls back to the CPU quietly when it can’t. The container log shows which backends the image offers each time it loads a model. On our CPU-only VM, this was the check:

docker logs immich_machine_learning 2>&1 | grep -A1 "Setting execution providers" | head -5

With the stock image, only the CPU backend was available. The container logs in UTC, which is why the timestamps read October 19:

[10/19/26 22:59:34] INFO     Setting execution providers to
                             ['CPUExecutionProvider'], in descending order of
--
[10/19/26 23:00:42] INFO     Setting execution providers to
                             ['CPUExecutionProvider'], in descending order of

To try the iGPU on an Intel box, the Immich docs switch the container to the OpenVINO build in four steps:

  1. Download hwaccel.ml.yml next to docker-compose.yml
  2. Add -openvino to the machine learning image tag
  3. Uncomment extends and set service to openvino
  4. Recreate the container with docker compose up -d

Don’t trust that same log line afterwards. The OpenVINO image always lists OpenVINOExecutionProvider first, and the Immich source quietly sets the OpenVINO device to the CPU when it finds no GPU. The reliable test is the one the docs give: watch the iGPU with intel_gpu_top while a Smart Search job runs. It needs a Linux shell on the host, or a container with /dev/dri, and on Debian and Ubuntu it comes in the intel-gpu-tools package:

sudo intel_gpu_top

The Render/3D engine should climb while the job runs and drop back when it ends. On DSM, QTS or TOS, where that tool isn’t available, read the log instead. Set IMMICH_LOG_LEVEL=debug in .env, run docker compose up -d to recreate the containers, and look for ‘device_type’: ‘GPU.0’ in the execution provider options instead of ‘CPU’. If the GPU stays idle, one owner found that the plain ML container was still running, so check the image tag with docker ps before you blame the hardware.

Keep reading

Configure Samba File Share on Debian 13 / 12 Debian Configure Samba File Share on Debian 13 / 12 Backup and Restore Linux Systems with Timeshift Debian Backup and Restore Linux Systems with Timeshift Best NAS Hard Drives for 2026: WD Red vs Seagate IronWolf, Price per TB Storage Best NAS Hard Drives for 2026: WD Red vs Seagate IronWolf, Price per TB Install OpenCloud with Docker Compose, Traefik and Collabora Containers Install OpenCloud with Docker Compose, Traefik and Collabora Nextcloud vs ownCloud vs Seafile vs Syncthing vs OpenCloud Storage Nextcloud vs ownCloud vs Seafile vs Syncthing vs OpenCloud How To Configure iSCSI Initiator on Rocky 8 / RHEL 8 CentOS How To Configure iSCSI Initiator on Rocky 8 / RHEL 8

Leave a Comment

Press ESC to close