#28576·immich

Mobile photo backup keeps retrying already-uploaded assets

Author: TerranceCreated May 23, 2026Updated Sep 17, 2026
Labels📱mobile

I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.

  • Yes

The bug

I have about a hundred assets (the count has slowly grown over time) which have already been uploaded, but which continue to show under Backup > Remainder. These are repeatedly retried and rejected by the server[^1], wasting bandwidth and cycles, though the client does not seem to be aware of this: the Backup count goes up as Remainder goes down, but leaving and returning shows the original counts again.

In the timeline, I can see two copies of each affected image: one with a cloud stamp (server-only) and one with a slashed-cloud stamp (client-only); they appear to not be considered the same file, despite having the same checksums when the constraint violation occurs.

The attached Android client logs also seem to suggest I'm cancelling the upload, though as far as I'm aware I'm not, unless navigating to the Backup screen and backing out cancels it?

[^1]: The HTTP request POST /api/assets returns a 200 response, but the underlying SQL query results in a unique contraint violation; see #22742. Note that this warning has been suppressed as of #26113, so tracing this may become more difficult in future releases.

The OS that Immich Server is running on

Arch Linux

Version of Immich Server

v2.7.5

Version of Immich Mobile App

v2.7.5

Platform with the issue

  • Server
  • Web
  • Mobile

Device make and model

OnePlus Nord CE, Android 13

Your docker-compose.yml content

n/a

Your .env content

DB_HOSTNAME=localhost
DB_DATABASE_NAME=immich

REDIS_HOSTNAME=localhost

IMMICH_MEDIA_LOCATION=/mnt/data/media/own/immich

IMMICH_MACHINE_LEARNING_ENABLED=false
IMMICH_MACHINE_LEARNING_URL=http://127.0.0.1:3003
MACHINE_LEARNING_CACHE_FOLDER=/var/lib/immich/.cache

Reproduction steps

  1. Identify any already-uploaded files which have a local duplicate
  2. Trigger a backup
    • Uploads appear successful, despite being rejected by the server

Relevant log output

Android logs
2026-05-23 17:57:41.761649 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-05-23 17:57:43.679110 | info     | DeviceSyncService    | Device sync took - 72ms |
2026-05-23 17:57:43.679007 | info     | DeviceSyncService    | Full device sync took - 72ms |
2026-05-23 17:57:43.603646 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:57:37.153112 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:57:37.152950 | info     | HashService          | Hashing took - 6ms |
2026-05-23 17:57:37.146169 | info     | HashService          | Starting hashing of assets |
2026-05-23 17:57:37.127961 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:57:36.623012 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:57:36.623010 | warning  | UploadRepository     | Upload asset[1000354043] was cancelled |
2026-05-23 17:57:36.623005 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:57:36.623004 | warning  | UploadRepository     | Upload asset[1000354039] was cancelled |
2026-05-23 17:57:36.622994 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:57:36.622976 | warning  | UploadRepository     | Upload asset[1000354064] was cancelled |
2026-05-23 17:57:35.064693 | info     | SyncApiRepository    | Remote Sync completed in 1422ms |
2026-05-23 17:57:32.699889 | info     | DeviceSyncService    | Device sync took - 68ms |
2026-05-23 17:57:32.699669 | info     | DeviceSyncService    | Full device sync took - 68ms |
2026-05-23 17:57:32.628383 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:57:31.148260 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-05-23 17:57:23.078949 | info     | HashService          | Hashing took - 26ms |
2026-05-23 17:57:23.054104 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:57:23.052804 | info     | HashService          | Starting hashing of assets |
2026-05-23 17:57:23.034867 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:57:20.994018 | info     | SyncApiRepository    | Remote Sync completed in 117ms |
2026-05-23 17:57:20.921435 | info     | DeviceSyncService    | Device sync took - 94ms |
2026-05-23 17:57:20.921354 | info     | DeviceSyncService    | Full device sync took - 94ms |
2026-05-23 17:57:20.826527 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:57:20.262933 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-05-23 17:56:45.535120 | info     | SyncApiRepository    | Remote Sync completed in 138ms |
2026-05-23 17:56:45.370665 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:55:03.619758 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:55:03.595555 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:55:03.595549 | warning  | UploadRepository     | Upload asset[1000354034] was cancelled |
2026-05-23 17:55:03.595534 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:55:03.595528 | warning  | UploadRepository     | Upload asset[1000354078] was cancelled |
2026-05-23 17:55:03.595504 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:55:03.595454 | warning  | UploadRepository     | Upload asset[1000354038] was cancelled |
2026-05-23 17:55:03.099067 | info     | SyncApiRepository    | Remote Sync completed in 269ms |
2026-05-23 17:55:02.792524 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:55:01.592076 | info     | HashService          | Hashing took - 10ms |
2026-05-23 17:55:01.581075 | info     | HashService          | Starting hashing of assets |
2026-05-23 17:55:01.579663 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:54:59.525691 | info     | DeviceSyncService    | Device sync took - 288ms |
2026-05-23 17:54:59.525366 | info     | DeviceSyncService    | Full device sync took - 287ms |
2026-05-23 17:54:59.470959 | info     | SyncApiRepository    | Remote Sync completed in 174ms |
2026-05-23 17:54:59.236894 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:54:58.542820 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-05-23 17:48:09.556571 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:48:09.508565 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:48:09.508564 | warning  | UploadRepository     | Upload asset[1000354034] was cancelled |
2026-05-23 17:48:09.508555 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:48:09.508553 | warning  | UploadRepository     | Upload asset[1000354038] was cancelled |
2026-05-23 17:48:09.508544 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 17:48:09.508531 | warning  | UploadRepository     | Upload asset[1000354078] was cancelled |
2026-05-23 17:48:07.504405 | info     | HashService          | Hashing took - 8ms |
2026-05-23 17:48:07.496270 | info     | HashService          | Starting hashing of assets |
2026-05-23 17:48:07.494331 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 17:48:05.415692 | info     | SyncApiRepository    | Remote Sync completed in 150ms |
2026-05-23 17:48:05.382905 | info     | DeviceSyncService    | Device sync took - 143ms |
2026-05-23 17:48:05.382760 | info     | DeviceSyncService    | Full device sync took - 143ms |
2026-05-23 17:48:05.242622 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 17:48:04.526434 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-05-23 16:41:11.227423 | info     | BackgroundWorkerBgService | Android background processing completed in 80s |
2026-05-23 16:40:00.846456 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 16:39:58.791559 | info     | HashService          | Hashing took - 19ms |
2026-05-23 16:39:58.772330 | info     | HashService          | Starting hashing of assets |
2026-05-23 16:39:56.746988 | info     | SyncApiRepository    | Remote Sync completed in 195ms |
2026-05-23 16:39:56.390700 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 16:39:54.353765 | info     | DeviceSyncService    | Device sync took - 3348ms |
2026-05-23 16:39:50.976523 | info     | BackgroundWorkerBgService | Android background processing started |
2026-05-23 13:27:19.126683 | info     | SyncApiRepository    | Remote Sync completed in 2223ms |
2026-05-23 13:27:15.855967 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 13:27:08.163841 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 13:27:08.137944 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 13:27:08.137938 | warning  | UploadRepository     | Upload asset[1000354038] was cancelled |
2026-05-23 13:27:08.137914 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 13:27:08.137905 | warning  | UploadRepository     | Upload asset[1000354078] was cancelled |
2026-05-23 13:27:08.137864 | warning  | ForegroundUploadService | Backup was cancelled by the user |
2026-05-23 13:27:08.137798 | warning  | UploadRepository     | Upload asset[1000356351] was cancelled |
2026-05-23 13:27:06.134841 | info     | HashService          | Hashing took - 8ms |
2026-05-23 13:27:06.125957 | info     | HashService          | Starting hashing of assets |
2026-05-23 13:27:06.111269 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 13:27:04.046132 | info     | DeviceSyncService    | Device sync took - 538ms |
2026-05-23 13:27:04.045094 | info     | DeviceSyncService    | Full device sync took - 537ms |
2026-05-23 13:27:03.780073 | info     | SyncApiRepository    | Remote Sync completed in 202ms |
2026-05-23 13:27:03.507252 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 10:49:05.495810 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 10:49:02.177154 | info     | HashService          | Hashing took - 173ms |
2026-05-23 10:49:02.003808 | info     | HashService          | Starting hashing of assets |
2026-05-23 10:48:59.946046 | info     | SyncApiRepository    | Remote Sync completed in 545ms |
2026-05-23 10:48:59.123544 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 10:48:57.089561 | info     | DeviceSyncService    | Device sync took - 2384ms |
2026-05-23 10:48:54.642074 | info     | BackgroundWorkerBgService | Android background processing started |
2026-05-23 00:25:30.660427 | info     | ForegroundUploadService | Network capabilities: [NetworkCapability.wifi, NetworkCapability.vpn, NetworkCapability.unmetered], hasWifi/isUnmetered: true |
2026-05-23 00:25:28.298 | info     | HashService          | Hashing took - 70ms |
2026-05-23 00:25:28.227228 | info     | HashService          | Starting hashing of assets |
2026-05-23 00:25:26.192109 | info     | SyncApiRepository    | Remote Sync completed in 205ms |
2026-05-23 00:25:25.845678 | info     | SyncStreamService    | Remote sync request for user |
2026-05-23 00:25:23.833419 | info     | DeviceSyncService    | Device sync took - 2194ms |
2026-05-23 00:25:21.596693 | info     | BackgroundWorkerBgService | Android background processing started |

Additional information

#23448 may be related, though I'm not seeing any of the mentioned error messages anywhere, just the constraint violation which has been suppressed.