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.
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.
| NAS | Best for | CPU | RAM, stock / max | Price, Oct 20 |
|---|---|---|---|---|
| UGREEN DXP4800 Plus | Most households | Pentium Gold 8505, 5 cores | 8 GB / 64 GB | $656.99 |
| TerraMaster F4-425 Pro | Big libraries on CPU | Core i3-N305, 8 cores | 8 GB / 32 GB | $594.99 |
| UGREEN DXP2800 | Best value | N100, 4 cores | 8 GB / 16 GB | $389.99 |
| Synology DS425+ | Staying on DSM | Celeron J4125, 4 cores | 2 GB / 6 GB | $579.99 |
| QNAP TS-264-8G | Two bays with a PCIe slot | Celeron N5095, 4 cores | 8 GB / 16 GB | $469.00 |
| Beelink ME mini | DIY all-flash | N150, 4 cores | 12 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 photos | First run, with model download | Re-run, default concurrency | Re-run, concurrency 4 |
|---|---|---|---|
| Upload, metadata, thumbnails | 73 s | n/a | n/a |
| Smart Search (CLIP) | 82 s | 39.1 s, 12.7 photos/s | 38.9 s |
| Face detection | 131 s | 125.8 s, 3.95 photos/s | 136.7 s |
| Face recognition (clustering) | 11 s, 84 people | n/a | n/a |
| OCR (on by default in v3) | 162 s, 3.1 photos/s | n/a | n/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:
| Library | Estimated first import on 4 cores | What to buy |
|---|---|---|
| About 10,000 photos | An evening, about 2 h | UGREEN DXP2800, or a DS425+ with the RAM upgrade if a slower import is fine |
| About 50,000 photos | Overnight, about 11 h | UGREEN DXP4800 Plus or TerraMaster F4-425 Pro |
| 200,000 photos or more | About 2 days | F4-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
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
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
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
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
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
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:
| NAS | Price, Oct 20 | Why we skipped it |
|---|---|---|
| UGREEN DXP4800 GT | $659.99 | AMD Ryzen R2514: no OpenVINO, and the ROCm path is unverified on this chip |
| QNAP TS-462A-4G | $529.00 | Ships with 4 GB, below Immich’s 6 GB minimum |
| TerraMaster F4-425 Plus | $649.99 to $699.99 | Costs 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:
- Create a folder on the NVMe pool for the database
- Point DB_DATA_LOCATION at that NVMe folder
- Point UPLOAD_LOCATION at a share on the hard drive pool
- 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:
- Download hwaccel.ml.yml next to docker-compose.yml
- Add -openvino to the machine learning image tag
- Uncomment extends and set service to openvino
- 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.





