I spent three weekends manually downloading photos from Google Photos before I realized there had to be a better way. Moving thousands of photos from cloud storage to a Synology NAS sounds straightforward — until you’re 10,000 files in and hitting API limits, duplicate files, and broken folder structures. This guide walks you through the full automatic migration process, including the parts nobody talks about.
Why Cloud-to-NAS Photo Migrations Fail (And What Actually Goes Wrong)
Most people assume this is a simple copy-paste job. It isn’t. Here are the real reasons migrations break:
1. Cloud provider export throttling
Google Photos, iCloud, and OneDrive all limit how fast you can export data. Google’s Takeout system splits exports into chunks of 2–50 GB and doesn’t maintain your original folder structure. iCloud’s export via the web is even more restrictive and often silently fails on large libraries.
2. Metadata stripping during download
EXIF data — including capture date, GPS coordinates, and camera info — frequently gets stripped or corrupted during bulk exports. This means your photos land on the NAS with wrong timestamps, which destroys chronological sorting.
3. Duplicate file explosion
Cloud services often store multiple versions of the same photo (edited vs. original, HEIC vs. JPEG conversion, screenshots duplicated across devices). A 50,000-photo library can balloon to 70,000 files after migration without deduplication.
4. Network interruption with no resume support
If you’re pulling files over the internet directly to the NAS and the connection drops, most basic methods restart from zero — wasting hours of progress.
5. Permission and folder ownership mismatches
Files transferred to the NAS without proper DSM user permissions end up inaccessible to Synology Photos or require manual chmod fixes.
Common Scenarios Where This Migration Gets Complicated
- Google Photos with Shared Albums — shared photos are not included in personal Takeout exports by default
- iPhone users with iCloud — HEIC files need conversion for Synology Photos to index them correctly
- Mixed cloud libraries — photos spread across Google Photos, Dropbox, and OneDrive from different devices over the years
- Large libraries (100k+ photos) — standard tools timeout or hit memory limits on the NAS side
- Older Synology models — DSM 6.x handles Photos differently than DSM 7.x, and the migration path diverges significantly
Step-by-Step: How to Migrate Your Cloud Photo Library to Synology NAS Automatically
Step 1: Export Your Cloud Library the Right Way
For Google Photos:
- Go to [takeout.google.com] and select only Google Photos
- Choose the largest file size per archive (50 GB) to minimize the number of parts
- Export to Google Drive instead of downloading directly — this avoids browser timeout issues
- In DSM, install Cloud Sync from Package Center and connect it to your Google Drive
- Set it to sync the Takeout folder to a temporary folder on the NAS (e.g.,
/volume1/migration_temp)
For iCloud (Mac required):
- Open the Photos app → Preferences → iCloud → select Download Originals to this Mac
- Wait for full download (this can take days for large libraries)
- Once complete, use rsync over SSH to transfer to the NAS directly:
rsync -avz --progress ~/Pictures/Photos\ Library.photoslibrary/originals/ user@NAS_IP:/volume1/migration_temp/For OneDrive / Dropbox:
Use Synology’s built-in Cloud Sync package. Set up a one-time sync from the cloud provider to a migration folder on the NAS. Disable two-way sync to prevent the NAS from uploading back to the cloud.
Step 2: Set Up the Receiving Folder Structure on DSM
Before files land on your NAS, prepare the folder structure:
- Open File Station in DSM
- Create
/volume1/photo/as the main library root (this is where Synology Photos indexes) - Create subfolders:
/Imports/Google/,/Imports/iCloud/,/Imports/Other/ - Set folder permissions: Right-click → Properties → Permission — assign the admin user and the
photosgroup full read/write access
If you skip this step, Synology Photos won’t automatically detect and index incoming files.

Step 3: Automate the Organization with a Task Scheduler Script
This is where the real automation happens. DSM’s built-in Task Scheduler lets you run scripts on a schedule.
- Open Control Panel → Task Scheduler → Create → Scheduled Task → User-defined script
- Set it to run daily (during off-peak hours, e.g., 2:00 AM)
- Use this bash script to auto-sort incoming photos by year/month:
bash
#!/bin/bash
SOURCE="/volume1/migration_temp"
DEST="/volume1/photo"
find "$SOURCE" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.heic" -o -iname "*.mp4" -o -iname "*.mov" \) | while read FILE; do
DATE=$(exiftool -d "%Y/%m" -DateTimeOriginal -s3 "$FILE" 2>/dev/null)
if [ -z "$DATE" ]; then
DATE=$(stat -c "%y" "$FILE" | cut -c1-7 | sed 's/-/\//g')
fi
DEST_DIR="$DEST/$DATE"
mkdir -p "$DEST_DIR"
cp --no-clobber "$FILE" "$DEST_DIR/"
doneThis script reads the EXIF capture date and sorts photos into YEAR/MONTH folders. If EXIF is missing, it falls back to file modification date.
Important: You need to install exiftool on the NAS first. Open DSM’s Package Center, install SynoCli Media Tools (available through SynoCommunity feed), which includes exiftool.
Step 4: Run Deduplication Before Final Import
Never skip deduplication. Use dupeGuru or run this find-based approach directly on the NAS:
bash
find /volume1/migration_temp -type f | xargs md5sum | sort | awk 'NR>1 && prev==$1 {print $2} {prev=$1; prevfile=$2}' > /tmp/duplicates.txtReview the list, then delete confirmed duplicates before moving files to the final photo folder.
Step 5: Trigger Synology Photos Re-Index
After files are in place:
- Open Synology Photos
- Go to the top-right menu → Settings → Library
- Click Re-index to force Synology Photos to scan all new files
- For large libraries, this can take several hours — let it run overnight
Advanced Fixes: When Basic Migration Steps Don’t Work
Advanced Path 1: Handling Google Photos JSON Sidecar Files
Google Takeout exports include .json sidecar files for each photo. These contain metadata that didn’t make it into the EXIF. If your photos show wrong dates after migration, the JSON files are why.
Use exiftool in batch mode to read the JSON sidecars and write the correct dates back into the image files:
bash
exiftool -r -d "%Y:%m:%d %H:%M:%S" "-DateTimeOriginal<DateTimeOriginal" \
"-DateTimeOriginal<SubSecDateTimeOriginal" \
"-DateTimeOriginal<CreationTime" \
-ext jpg -ext jpeg -ext png -ext heic \
/volume1/migration_temp/For Google-specific JSON sidecar injection, the gphotos-exif tool (installable via pip on the NAS) automates this process and writes correct timestamps from the .json files back into the image EXIF.
Advanced Path 2: Migrating 100k+ Photo Libraries Without Crashing the NAS
Large libraries cause two specific problems: the NAS runs out of memory indexing files, and the re-index process crashes Synology Photos.
Fix:
- Batch your migration — don’t dump all 100k photos at once. Move them in chunks of 5,000–10,000 per batch using the Task Scheduler script above
- Disable real-time indexing during migration:
- SSH into the NAS:
ssh admin@NAS_IP - Stop the Synology Photos service temporarily:
sudo synoservicectl --stop synophoto - Run your migration batches
- Re-enable:
sudo synoservicectl --start synophoto
- SSH into the NAS:
- Monitor memory using DSM’s Resource Monitor — if RAM usage exceeds 85% during indexing, pause the batch and wait for it to stabilize
This approach prevents the dreaded “Synology Photos indexing stuck at 0%” problem that plagues large migrations.
Advanced Path 3: HEIC Compatibility Fix for Older NAS Models
Older Synology devices (DS218, DS418, any ARM-based model) cannot hardware-decode HEIC files, meaning iCloud photos won’t generate thumbnails in Synology Photos.
Fix: Convert HEIC to JPEG before migration using this batch command:
bash
find /volume1/migration_temp -iname "*.heic" -exec sh -c \
'convert "$1" "${1%.heic}.jpg"' _ {} \;This requires ImageMagick, available through SynoCommunity packages. Run this conversion in the temp folder before your sorting script runs.
Tips: How to Keep Your Synology Photo Library Clean Long-Term
- Set up Cloud Sync as an ongoing one-way pull after migration — new phone photos uploaded to Google Photos automatically land on the NAS
- Never let Synology Photos and your cloud provider both be “primary” — pick one as source of truth to avoid double-editing and sync conflicts
- Schedule weekly deduplication scans using Task Scheduler — libraries grow fast
- Use separate Personal Space and Shared Space in Synology Photos 2.0 — mixing them causes permission headaches
- Back up the NAS to a second drive or offsite before any migration — never migrate directly to your only storage
FAQ
Q: Does Cloud Sync on Synology cost extra?
No. Cloud Sync is a free package included with DSM. You only pay for the cloud storage on the provider’s side.
Q: Will my Google Photos albums be preserved on the NAS?
Not automatically. Google Takeout exports albums as separate folders, but Synology Photos uses a different album system. You’ll need to manually recreate albums in Synology Photos after migration.
Q: Can I run this migration while the NAS is being used normally?
You can, but it’s not recommended during the deduplication and re-index phases. Schedule heavy operations for overnight to avoid slowdowns.
Q: My Takeout export is split into 47 parts. Do I need to extract all of them first?
Yes. All parts must be extracted before running the sorting script, as photos from the same year can be spread across multiple archive parts.
Q: Synology Photos is not indexing files in my migration folder. What’s wrong?
The folder must be inside /volume1/photo/ to be indexed. Files placed elsewhere on the NAS are invisible to Synology Photos unless you’ve manually added a custom library path under Settings.
Q: How long does a 50,000-photo migration typically take?
Expect 4–12 hours for download, 2–4 hours for sorting, and 3–8 hours for indexing, depending on NAS model and network speed. Total: usually 1–2 full days of mostly automated work.
Q: Can I do this without SSH access?
You can do most of it through DSM’s GUI (Cloud Sync + Task Scheduler), but the exiftool JSON sidecar fix and the HEIC conversion require SSH. For non-technical users, focusing on the GUI steps and accepting minor metadata issues is a reasonable tradeoff.
Editor’s Opinion
honestly this whole process is annoying but its worth it. i did mine last year and the first attempt was a disaster, photos everywhere wrong dates everything. the json sidecar thing with google is what kills most people and nobody warns you about it. once its set up though synology photos is actually really good, way better than google photos for browsing old stuff. just don’t rush the dedup step, really. i skipped it once and had like 15,000 duplicates to deal with manually. not fun. take the extra hour.
