Skip to content

Server-to-Server Migration

Transfer photos between Immich servers without downloading to your local machine.

Basic Migration

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --server=http://new-server:2283 \
  --api-key=new-api-key

No Path Required

Unlike other upload modes, --from-immich doesn't take a path argument. The source is the --from-server.

Source Filtering

By Date Range

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --from-date-range=2023-01-01,2023-12-31 \
  --server=http://new-server:2283 \
  --api-key=new-api-key

By Album

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --from-albums="Family Photos" \
  --from-albums="Travel" \
  --server=http://new-server:2283 \
  --api-key=new-api-key

By Rating

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --from-minimal-rating=3 \
  --server=http://new-server:2283 \
  --api-key=new-api-key

Favorites Only

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --from-favorite=true \
  --server=http://new-server:2283 \
  --api-key=new-api-key

All Filtering Options

FlagDescription
--from-date-rangeDate range (e.g., 2023 or 2023-01-01,2023-06-30)
--from-albumsFilter by album name (repeatable)
--from-tagsFilter by tag
--from-peopleFilter by person name
--from-archivedInclude archived assets
--from-favoriteFilter by favorite status
--from-trashInclude trashed assets
--from-no-albumInclude assets not in any album
--from-minimal-ratingMinimum rating (1-5)
--from-partnersInclude partner's shared assets
--from-makeFilter by camera make
--from-modelFilter by camera model
--from-countryFilter by country
--from-stateFilter by state
--from-cityFilter by city

Connection Options

Both source and destination servers have their own connection settings:

Source (from)DestinationDescription
--from-server--serverServer URL
--from-api-key--api-keyAPI key
--from-client-timeout--client-timeoutRequest timeout
--from-skip-verify-ssl--skip-verify-sslSkip SSL verification

Performance Tips

For large migrations:

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --server=http://new-server:2283 \
  --api-key=new-api-key \
  --concurrent-tasks=4 \
  --on-errors=continue \
  --session-tag

Dry Run

Preview what would be transferred:

bash
immich-go upload --from-immich \
  --from-server=http://old-server:2283 \
  --from-api-key=old-api-key \
  --server=http://new-server:2283 \
  --api-key=new-api-key \
  --dry-run