[beta] IOS app tries to Upload every Asset again (Icloud Assets) #6141

Open
opened 2026-02-20 04:08:46 -05:00 by deekerman · 82 comments
Owner

Originally created by @Magnus987 on GitHub (Jul 27, 2025).

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

  • Yes

The bug

After activating the new beta version and turning on backup, the Immich iOS app is trying to upload every asset again, even though I had already successfully uploaded the entire selected album before switching to the beta version.
The Immich server does not reject the duplicates but simply stores the photos and videos twice. Re-selecting the album doesn't help, nor does restarting the app or phone. I have my assets also stored in Icloud but i couldnt test if this bug effects only icloud assets. The server is directly reached with local IP adress.
#Edit: The Server does reject the duplicates, I was wrong with that.

Anyways I really wanted to say thanks for you incredible work! This project is by far my favorite Open Source project.
I love these insane active development with amazing features. I convinced my whole (non tech) family to use it, they are in love too! Thank you!

The OS that Immich Server is running on

Ubuntu Server 24.04

Version of Immich Server

1.136.0

Version of Immich Mobile App

1.136.0 build.211

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

#
# WARNING: Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#

name: immich
services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    extends:
      file: hwaccel.transcoding.yml
      service: nvenc # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:2283
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda
    extends:
      file: hwaccel.ml.yml
      service: cuda
#    environment:
#      - CUDA_VISIBLE_DEVICES=all
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.2-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always

volumes:
  model-cache:

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/home/magnus/immich/uploads
# The location where your database files are stored
DB_DATA_LOCATION=./postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Europe/Berlin

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=v1.136.0

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=xxx

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Reproduction steps

  1. Install newest app of Immich
  2. Turn on Beta and wait till switching is done
  3. Turn on backup for an album that was already fully uploaded in the non-beta version
  4. The app starts re-uploading all assets from that album, creating duplicates on the server

Relevant log output


Additional information

No response

Originally created by @Magnus987 on GitHub (Jul 27, 2025). ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug After activating the new beta version and turning on backup, the Immich iOS app is trying to upload every asset again, even though I had already successfully uploaded the entire selected album before switching to the beta version. The Immich server does not reject the duplicates but simply stores the photos and videos twice. Re-selecting the album doesn't help, nor does restarting the app or phone. I have my assets also stored in Icloud but i couldnt test if this bug effects only icloud assets. The server is directly reached with local IP adress. #Edit: The Server does reject the duplicates, I was wrong with that. Anyways I really wanted to say thanks for you incredible work! This project is by far my favorite Open Source project. I love these insane active development with amazing features. I convinced my whole (non tech) family to use it, they are in love too! Thank you! ### The OS that Immich Server is running on Ubuntu Server 24.04 ### Version of Immich Server 1.136.0 ### Version of Immich Mobile App 1.136.0 build.211 ### Platform with the issue - [x] Server - [ ] Web - [x] Mobile ### Your docker-compose.yml content ```YAML # # WARNING: Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. # name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} extends: file: hwaccel.transcoding.yml service: nvenc # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - 2283:2283 depends_on: - redis - database restart: always immich-machine-learning: container_name: immich_machine_learning image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda extends: file: hwaccel.ml.yml service: cuda # environment: # - CUDA_VISIBLE_DEVICES=all volumes: - model-cache:/cache env_file: - .env restart: always redis: container_name: immich_redis image: docker.io/redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.2-pgvectors0.2.0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - ${DB_DATA_LOCATION}:/var/lib/postgresql/data restart: always volumes: model-cache: ``` ### Your .env content ```Shell # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=/home/magnus/immich/uploads # The location where your database files are stored DB_DATA_LOCATION=./postgres # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List TZ=Europe/Berlin # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=v1.136.0 # Connection secret for postgres. You should change it to a random password DB_PASSWORD=xxx # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich ``` ### Reproduction steps 1. Install newest app of Immich 2. Turn on Beta and wait till switching is done 3. Turn on backup for an album that was already fully uploaded in the non-beta version 4. The app starts re-uploading all assets from that album, creating duplicates on the server ### Relevant log output ```shell ``` ### Additional information _No response_
Author
Owner

@alextran1502 commented on GitHub (Jul 27, 2025):

Can you help getting the screenshot of the beta stats page under the beta switching button?

@alextran1502 commented on GitHub (Jul 27, 2025): Can you help getting the screenshot of the beta stats page under the beta switching button?
Author
Owner

@Magnus987 commented on GitHub (Jul 27, 2025):

Sure, here are some screenshots from the App:

Image
Image

Image

@Magnus987 commented on GitHub (Jul 27, 2025): Sure, here are some screenshots from the App: ![Image](https://github.com/user-attachments/assets/82d80dc4-794a-4cbb-8c14-c64f488996b8) ![Image](https://github.com/user-attachments/assets/7f1adbdf-fa38-402c-a910-03a712f47613) ![Image](https://github.com/user-attachments/assets/3356109c-88a4-4909-b51c-50bb35e8fc4b)
Author
Owner

@bo0tzz commented on GitHub (Jul 27, 2025):

The Immich server does not reject the duplicates but simply stores the photos and videos twice.

Then they are not the exact same files and so uploading them is the right thing to do. It is "physically impossible" to upload an exact duplicate.

@bo0tzz commented on GitHub (Jul 27, 2025): > The Immich server does not reject the duplicates but simply stores the photos and videos twice. Then they are not the exact same files and so uploading them is the right thing to do. It is "physically impossible" to upload an exact duplicate.
Author
Owner

@Magnus987 commented on GitHub (Jul 27, 2025):

Okay but why does it say there are 9000 assets left to upload? I have uploaded all my assets from mobile back when i was on non beta. It seems like it does not recognize my already backed up assets as the ones from my mobile gallery and now wants to upload all again.

@Magnus987 commented on GitHub (Jul 27, 2025): Okay but why does it say there are 9000 assets left to upload? I have uploaded all my assets from mobile back when i was on non beta. It seems like it does not recognize my already backed up assets as the ones from my mobile gallery and now wants to upload all again.
Author
Owner

@jmichiel commented on GitHub (Jul 27, 2025):

I had the same behaviour on Android, but I don't think the assets where stored twice.
I see tons of these error messages in the server logs though:

Query failed : {

  durationMs: 21.82174500823021,

  error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"

      at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26)

      at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6)

      at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9)

      at Socket.emit (node:events:518:28)

      at addChunk (node:internal/streams/readable:561:12)

      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)

      at Readable.push (node:internal/streams/readable:392:5)

      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)

      at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {

    severity_local: 'ERROR',

    severity: 'ERROR',

    code: '23505',

    detail: 'Key ("ownerId", checksum)=([cleaned], \\x9082008237bbf1e5b1db6eb3edfe3f673b60929d) already exists.',

    schema_name: 'public',

    table_name: 'asset',

    constraint_name: 'UQ_assets_owner_checksum',

    file: 'nbtinsert.c',

    line: '666',

    routine: '_bt_check_unique'

  },

  sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',

  params: [

    '[cleaned]',



,

    <Buffer 90 82 00 82 37 bb f1 e5 b1 db 6e b3 ed fe 3f 67 3b 60 92 9d>,

    '/usr/src/app/upload/upload/[cleaned]/e0/87/e087418a-1d90-40ee-8433-ad7d0c04f395.jpg',

    '1000003328',

    '[cleaned]',

    2024-04-11T12:05:27.037Z,

    2024-04-11T12:05:26.953Z,

    2024-04-11T12:05:27.037Z,


    'IMAGE',

    false,

    '0',

    'timeline',

    '20240411_140525.jpg'

  ]

}
@jmichiel commented on GitHub (Jul 27, 2025): I had the same behaviour on Android, but I don't think the assets where stored twice. I see tons of these error messages in the server logs though: ``` Query failed : { durationMs: 21.82174500823021, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26) at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6) at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at TCP.onStreamRead (node:internal/stream_base_commons:189:23) at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { severity_local: 'ERROR', severity: 'ERROR', code: '23505', detail: 'Key ("ownerId", checksum)=([cleaned], \\x9082008237bbf1e5b1db6eb3edfe3f673b60929d) already exists.', schema_name: 'public', table_name: 'asset', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '666', routine: '_bt_check_unique' }, sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', params: [ '[cleaned]',  , <Buffer 90 82 00 82 37 bb f1 e5 b1 db 6e b3 ed fe 3f 67 3b 60 92 9d>, '/usr/src/app/upload/upload/[cleaned]/e0/87/e087418a-1d90-40ee-8433-ad7d0c04f395.jpg', '1000003328', '[cleaned]', 2024-04-11T12:05:27.037Z, 2024-04-11T12:05:26.953Z, 2024-04-11T12:05:27.037Z,  'IMAGE', false, '0', 'timeline', '20240411_140525.jpg' ] } ```
Author
Owner

@Magnus987 commented on GitHub (Jul 28, 2025):

Okay good to know that I am not the only one with such an issue. After I turned off the beta mode everything is detected correctly and it only wants to upload some new assets from my IOS gallery. image
So it's definitely caused by the new beta. If I enter the beta again the same issue accrues just like before.

@Magnus987 commented on GitHub (Jul 28, 2025): Okay good to know that I am not the only one with such an issue. After I turned off the beta mode everything is detected correctly and it only wants to upload some new assets from my IOS gallery. ![image](https://github.com/user-attachments/assets/b7983c54-2203-4de0-81ea-b018a6d4749c) So it's definitely caused by the new beta. If I enter the beta again the same issue accrues just like before.
Author
Owner

@roberto2lini commented on GitHub (Jul 28, 2025):

Having the same issue when switching to the beta, all my images are backed up also with iCloud. I made sure all images where synced before the immich server upgrade and then again before switching to the beta upload. Now it seems to be trying to re-upload everything.

Beta -

Image

Old Method has no remaining uploads:

Image
@roberto2lini commented on GitHub (Jul 28, 2025): Having the same issue when switching to the beta, all my images are backed up also with iCloud. I made sure all images where synced before the immich server upgrade and then again before switching to the beta upload. Now it seems to be trying to re-upload everything. Beta - <img width="1290" height="2796" alt="Image" src="https://github.com/user-attachments/assets/72e3c455-8d08-40a4-a372-4cb2321bdbbb" /> Old Method has no remaining uploads: <img width="1290" height="2796" alt="Image" src="https://github.com/user-attachments/assets/d44fd0b5-2197-43cc-afe9-458417c47c74" />
Author
Owner

@jrobe commented on GitHub (Jul 29, 2025):

I'm having a similar issue; except instead of attempting to re-upload, the cloud backup option just shows that it's disabled and isn't attempting to upload the (even with backups enabled).

The total number of photos it shows as "uploaded" is the number of non-icloud photos I have. Shared iCloud photo albums show in the "Remainder" category. I know this because if I deselect the two iCloud albums that were shared with me, it shows as Remainder 0.

Disabling the new timeline sync beta and re-enabling backups makes things work as I expect.

@jrobe commented on GitHub (Jul 29, 2025): I'm having a similar issue; except instead of attempting to re-upload, the cloud backup option just shows that it's disabled and isn't attempting to upload the (even with backups enabled). The total number of photos it shows as "uploaded" is the number of non-icloud photos I have. Shared iCloud photo albums show in the "Remainder" category. I know this because if I deselect the two iCloud albums that were shared with me, it shows as Remainder 0. Disabling the new timeline sync beta and re-enabling backups makes things work as I expect.
Author
Owner

@Magnus987 commented on GitHub (Aug 5, 2025):

The new bugfixes in v137.3 did not fix this issue.

@Magnus987 commented on GitHub (Aug 5, 2025): The new bugfixes in v137.3 did not fix this issue.
Author
Owner

@chriswa81 commented on GitHub (Aug 5, 2025):

Seems to be the same problem as here: #20254
Except that iCloud is disabled there.

@chriswa81 commented on GitHub (Aug 5, 2025): Seems to be the same problem as here: [#20254](https://github.com/immich-app/immich/issues/20254) Except that iCloud is disabled there.
Author
Owner

@dvmbro commented on GitHub (Aug 5, 2025):

I have the same issue. Switched to beta timeline and all of my assets are uploading again. Every upload of existing asset is throwing a db error. Immich server log:
Image

Postgresql log:

Image

One thing I found: after coming back from beta to "old" app via switching the setting, all assets were working properly like before. So this action was revertable.

@dvmbro commented on GitHub (Aug 5, 2025): I have the same issue. Switched to beta timeline and all of my assets are uploading again. Every upload of existing asset is throwing a db error. Immich server log: <img width="1879" height="738" alt="Image" src="https://github.com/user-attachments/assets/f6b742ce-b218-419f-b2b9-7c6d95928ee2" /> Postgresql log: <img width="1863" height="71" alt="Image" src="https://github.com/user-attachments/assets/4990f82b-4e18-4bdb-9b19-335dee7ae044" /> One thing I found: after coming back from beta to "old" app via switching the setting, all assets were working properly like before. So this action was revertable.
Author
Owner

@jkoopmann commented on GitHub (Aug 11, 2025):

Is there any progress on this or do you guys need more debugging on our end (if so please let me know what/how). This is preventing me from using the beta-timeline.

@jkoopmann commented on GitHub (Aug 11, 2025): Is there any progress on this or do you guys need more debugging on our end (if so please let me know what/how). This is preventing me from using the beta-timeline.
Author
Owner

@Jacajack commented on GitHub (Aug 14, 2025):

At the risk of stating the obvious, this issue seems to be still present in v1.138.0

@Jacajack commented on GitHub (Aug 14, 2025): At the risk of stating the obvious, this issue seems to be still present in v1.138.0
Author
Owner

@chriswa81 commented on GitHub (Aug 14, 2025):

Unfortunately I can confirm this. The error has not been fixed with the latest ios app version v1.138.0. On the contrary. Now even more elements are displayed for repeated backup.

@chriswa81 commented on GitHub (Aug 14, 2025): Unfortunately I can confirm this. The error has not been fixed with the latest ios app version v1.138.0. On the contrary. Now even more elements are displayed for repeated backup.
Author
Owner

@alextran1502 commented on GitHub (Aug 14, 2025):

@Jacajack and @chriswa81 can you guys help capturing the screenshot of the Beta Sync Stats in the app settings?

@alextran1502 commented on GitHub (Aug 14, 2025): @Jacajack and @chriswa81 can you guys help capturing the screenshot of the Beta Sync Stats in the app settings?
Author
Owner

@mgnisia commented on GitHub (Aug 14, 2025):

Like this one @alextran1502. Facing the same issue and just created a new fresh installation of v1.138.0 on my k8s cluster.

Image

@mgnisia commented on GitHub (Aug 14, 2025): Like this one @alextran1502. Facing the same issue and just created a new fresh installation of v1.138.0 on my k8s cluster. ![Image](https://github.com/user-attachments/assets/f0f39321-4c98-4c0c-9d88-03682d7046ae)
Author
Owner

@alextran1502 commented on GitHub (Aug 14, 2025):

@mgnisia can you capture the backup page as well? Do you only have 183 assets on this instance?

@alextran1502 commented on GitHub (Aug 14, 2025): @mgnisia can you capture the backup page as well? Do you only have 183 assets on this instance?
Author
Owner

@mgnisia commented on GitHub (Aug 14, 2025):

Yes not a lot images uploaded yet. image

@mgnisia commented on GitHub (Aug 14, 2025): Yes not a lot images uploaded yet. ![image](https://github.com/user-attachments/assets/70efd2fd-9d8e-4058-b19e-689b47fd8568)
Author
Owner

@Jacajack commented on GitHub (Aug 14, 2025):

@alextran1502 These are my backup stats. In my case it doesn't try to upload every asset again, but has trouble uploading some 300 of them (interestingly the reported sizes of these files are 0B). This includes some random old photos and all the new ones taken after I enabled the beta timeline. I'm coming here from #20523, because someone suggested this could be related, but I'm not sure if this is the case.

Image Image Image
@Jacajack commented on GitHub (Aug 14, 2025): @alextran1502 These are my backup stats. In my case it doesn't try to upload **every** asset again, but has trouble uploading some 300 of them (interestingly the reported sizes of these files are 0B). This includes some random old photos and all the new ones taken after I enabled the beta timeline. I'm coming here from #20523, because someone suggested this could be related, but I'm not sure if this is the case. <table> <tr><td> <img width="946" height="2048" alt="Image" src="https://github.com/user-attachments/assets/51601f87-66c6-4121-8b8a-ca3d4441f103" /> </td><td> <img width="946" height="2048" alt="Image" src="https://github.com/user-attachments/assets/b5956863-0331-4892-aad6-0101bef81457" /> </td> <td> <img width="946" height="2048" alt="Image" src="https://github.com/user-attachments/assets/ec8d855c-11c8-4535-8a89-7ee04a6edd10" /> </td> </tr> </table>
Author
Owner

@alextran1502 commented on GitHub (Aug 14, 2025):

@Jacajack Thank you for sharing, can you help me confirm if those erroneous assets are coming from the Shared Album of iOS?

@alextran1502 commented on GitHub (Aug 14, 2025): @Jacajack Thank you for sharing, can you help me confirm if those erroneous assets are coming from the Shared Album of iOS?
Author
Owner

@Jacajack commented on GitHub (Aug 14, 2025):

@alextran1502 If you mean an iCloud shared album, then no - I don't have any of these, but I do have global iCloud sync enabled. The erroneous assets consist mainly of MOV files (seemingly associated with Live Photos taken recently), PNG files (mainly screenshots from random points in time) and then some HEIC files created 2 years ago. I don't see any meaningful pattern here. These files don't belong to a single album (except "recents") or anything like that.

@Jacajack commented on GitHub (Aug 14, 2025): @alextran1502 If you mean an iCloud shared album, then no - I don't have any of these, but I do have global iCloud sync enabled. The erroneous assets consist mainly of MOV files (seemingly associated with Live Photos taken recently), PNG files (mainly screenshots from random points in time) and then some HEIC files created 2 years ago. I don't see any meaningful pattern here. These files don't belong to a single album (except "recents") or anything like that.
Author
Owner

@alextran1502 commented on GitHub (Aug 14, 2025):

@Jacajack, I wonder if you can charge the phone and move it out of the low battery state, and try to toggle the upload button to trigger the upload, then see if it improves?

@alextran1502 commented on GitHub (Aug 14, 2025): @Jacajack, I wonder if you can charge the phone and move it out of the low battery state, and try to toggle the upload button to trigger the upload, then see if it improves?
Author
Owner

@Jacajack commented on GitHub (Aug 14, 2025):

@alextran1502 I've already tried a few times under more "normal" conditions earlier. I just happened to have low battery now when I was taking the screenshots. But I can charge it and give it another go later

@Jacajack commented on GitHub (Aug 14, 2025): @alextran1502 I've already tried a few times under more "normal" conditions earlier. I just happened to have low battery now when I was taking the screenshots. But I can charge it and give it another go later
Author
Owner

@alextran1502 commented on GitHub (Aug 14, 2025):

@Jacajack Thanks, at the mean time, do you mind sharing the mobile app logs?

@alextran1502 commented on GitHub (Aug 14, 2025): @Jacajack Thanks, at the mean time, do you mind sharing the mobile app logs?
Author
Owner

@Jacajack commented on GitHub (Aug 14, 2025):

@alextran1502 Sure, here's a log (verbosity INFO) created by opening the app and waiting until the erroneous assets appear in the sync details menu. I allowed myself to remove the instance URL from the logs. If that matters, I do use mTLS in my setup.

Immich_log_2025-08-15T010412.679733.log

@Jacajack commented on GitHub (Aug 14, 2025): @alextran1502 Sure, here's a log (verbosity INFO) created by opening the app and waiting until the erroneous assets appear in the sync details menu. I allowed myself to remove the instance URL from the logs. If that matters, I do use mTLS in my setup. [Immich_log_2025-08-15T010412.679733.log](https://github.com/user-attachments/files/21781556/Immich_log_2025-08-15T010412.679733.log)
Author
Owner

@alextran1502 commented on GitHub (Aug 14, 2025):

@Jacajack It would be really interesting to connect direct to the instance over local IP and try uploading, so that we can remove the mTLS bit to make sure it is not the one causing the issue

@alextran1502 commented on GitHub (Aug 14, 2025): @Jacajack It would be really interesting to connect direct to the instance over local IP and try uploading, so that we can remove the mTLS bit to make sure it is not the one causing the issue
Author
Owner

@d1egoaz commented on GitHub (Aug 15, 2025):

I have a similar issue as above; however, since I'm connecting over LAN, it uses the local URL. I also have another connection configured through cloudflared when I'm not in my local WIFI.

The backup works for a few minutes, then it starts showing assets with 0 bytes, and the list fails with hundreds of items showing zero bytes. If I restart the app, it begins uploading again, but the issue happens again.

Image Image Image

IOS app logs:

Immich_log_2025-08-14T21:03:08.891782.log

2025-08-14 21:03:08.696329 | warning  | StorageRepository    | Error getting file for asset 30564A92-F971-4755-B28B-B946A199F62D/L0/001 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) |
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370)
<asynchronous suspension>
#2      AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765)
<asynchronous suspension>
#3      StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16)
<asynchronous suspension>
#4      HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:60)
<asynchronous suspension>
#5      HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:43)
<asynchronous suspension>
#6      runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:52)
<asynchronous suspension>
#7      WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106)
<asynchronous suspension>

2025-08-14 21:03:08.690946 | warning  | StorageRepository    | Error getting motion file for asset 3E9F2E7D-0D7B-40EF-BDB7-0F5DCD20839A/L0/001, name: IMG_8078.HEIC, created on: 2025-05-10 17:11:36.000 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) |
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370)
<asynchronous suspension>
#2      AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765)
<asynchronous suspension>
#3      StorageRepository.getMotionFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:32)
<asynchronous suspension>
#4      UploadService._getUploadTask (package:immich_mobile/services/upload.service.dart:240)
<asynchronous suspension>
#5      UploadService.startBackup (package:immich_mobile/services/upload.service.dart:144)
<asynchronous suspension>
#6      _DriftBackupPageState.startBackup (package:immich_mobile/pages/backup/drift_backup.page.dart:43)
<asynchronous suspension>
#7      _DriftBackupPageState.build.<anonymous closure> (package:immich_mobile/pages/backup/drift_backup.page.dart:91)
<asynchronous suspension>

Server Logs

immich_server            | Query failed : {
immich_server            |   durationMs: 3.981588989496231,
immich_server            |   error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
immich_server            |       at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26)
immich_server            |       at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6)
immich_server            |       at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9)
immich_server            |       at Socket.emit (node:events:518:28)
immich_server            |       at addChunk (node:internal/streams/readable:561:12)
immich_server            |       at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
immich_server            |       at Readable.push (node:internal/streams/readable:392:5)
immich_server            |       at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
immich_server            |       at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
immich_server            |     severity_local: 'ERROR',
immich_server            |     severity: 'ERROR',
immich_server            |     code: '23505',
immich_server            |     detail: 'Key ("ownerId", checksum)=(e2a65a24-ea47-4d20-b549-5f18fcf71389, \\x5f29207baae85e19e7d47745a2568b00568f92a6) already exists.',
immich_server            |     schema_name: 'public',
immich_server            |     table_name: 'asset',
immich_server            |     constraint_name: 'UQ_assets_owner_checksum',
immich_server            |     file: 'nbtinsert.c',
immich_server            |     line: '663',
immich_server            |     routine: '_bt_check_unique'
immich_server            |   },
immich_server            |   sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "livePhotoVideoId", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) returning *',
immich_server            |   params: [
immich_server            |     'e2a65a24-ea47-4d20-b549-5f18fcf71389',
immich_server            |     null,
immich_server            |     <Buffer 5f 29 20 7b aa e8 5e 19 e7 d4 77 45 a2 56 8b 00 56 8f 92 a6>,
immich_server            |     '/usr/src/app/upload/upload/e2a65a24-ea47-4d20-b549-5f18fcf71389/0d/9c/0d9c324b-6e41-4c50-ab23-1343ee0a909e.HEIC',
immich_server            |     '3A7B1793-2331-4315-95DE-988BED9BE323/L0/001',
immich_server            |     '86b1b8f7d69181603ff2aea4e5e00d644fb9fae7c20e321c7c6a3b739763330f',
immich_server            |     2025-08-15T04:01:20.349Z,
immich_server            |     2025-08-10T20:15:34.429Z,
immich_server            |     2025-08-15T04:01:20.349Z,
immich_server            |     'IMAGE',
immich_server            |     false,
immich_server            |     '0',
immich_server            |     'timeline',
immich_server            |     '67df13a2-b6b6-48db-aa47-0e6f68925d5c',
immich_server            |     'IMG_0003.HEIC'
immich_server            |   ]
immich_server            | }
immich_server            | Query failed : {
immich_server            |   durationMs: 4.795473992824554,
immich_server            |   error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
immich_server            |       at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26)
immich_server            |       at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6)
immich_server            |       at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9)
immich_server            |       at Socket.emit (node:events:518:28)
immich_server            |       at addChunk (node:internal/streams/readable:561:12)
immich_server            |       at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
immich_server            |       at Readable.push (node:internal/streams/readable:392:5)
immich_server            |       at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
immich_server            |       at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
immich_server            |     severity_local: 'ERROR',
immich_server            |     severity: 'ERROR',
immich_server            |     code: '23505',
immich_server            |     detail: 'Key ("ownerId", checksum)=(e2a65a24-ea47-4d20-b549-5f18fcf71389, \\xc7b60404438e02c17ba3b261ed7571d60618bc7e) already exists.',
immich_server            |     schema_name: 'public',
immich_server            |     table_name: 'asset',
immich_server            |     constraint_name: 'UQ_assets_owner_checksum',
immich_server            |     file: 'nbtinsert.c',
immich_server            |     line: '663',
immich_server            |     routine: '_bt_check_unique'
immich_server            |   },
immich_server            |   sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',
immich_server            |   params: [
immich_server            |     'e2a65a24-ea47-4d20-b549-5f18fcf71389',
immich_server            |     null,
immich_server            |     <Buffer c7 b6 04 04 43 8e 02 c1 7b a3 b2 61 ed 75 71 d6 06 18 bc 7e>,
immich_server            |     '/usr/src/app/upload/upload/e2a65a24-ea47-4d20-b549-5f18fcf71389/aa/5a/aa5a0a92-48b0-4d37-a481-8a1a6d109f2e.MOV',
immich_server            |     'D16A6D24-8F9B-479C-A679-06D08A9A9090/L0/001',
immich_server            |     '86b1b8f7d69181603ff2aea4e5e00d644fb9fae7c20e321c7c6a3b739763330f',
immich_server            |     2025-08-15T03:59:17.106Z,
immich_server            |     2025-08-10T20:14:42.355Z,
immich_server            |     2025-08-15T03:59:17.106Z,
immich_server            |     'VIDEO',
immich_server            |     false,
immich_server            |     '0',
immich_server            |     'timeline',
immich_server            |     'IMG_0001.MOV'
immich_server            |   ]
immich_server            | }
@d1egoaz commented on GitHub (Aug 15, 2025): I have a similar issue as above; however, since I'm connecting over LAN, it uses the local URL. I also have another connection configured through cloudflared when I'm not in my local WIFI. The backup works for a few minutes, then it starts showing assets with 0 bytes, and the list fails with hundreds of items showing zero bytes. If I restart the app, it begins uploading again, but the issue happens again. <img width="454" height="797" alt="Image" src="https://github.com/user-attachments/assets/3b798bb7-6b92-4757-a04b-c94897d99179" /> <img width="421" height="518" alt="Image" src="https://github.com/user-attachments/assets/a65c3768-ad7e-48c3-954f-3d71aa845bdd" /> <img width="450" height="737" alt="Image" src="https://github.com/user-attachments/assets/5176b233-fd03-45a5-afb2-6960226058bd" /> ## IOS app logs: [Immich_log_2025-08-14T21:03:08.891782.log](https://github.com/user-attachments/files/21784914/Immich_log_2025-08-14T21.03.08.891782.log) ``` 2025-08-14 21:03:08.696329 | warning | StorageRepository | Error getting file for asset 30564A92-F971-4755-B28B-B946A199F62D/L0/001 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) | #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370) <asynchronous suspension> #2 AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765) <asynchronous suspension> #3 StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16) <asynchronous suspension> #4 HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:60) <asynchronous suspension> #5 HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:43) <asynchronous suspension> #6 runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:52) <asynchronous suspension> #7 WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106) <asynchronous suspension> 2025-08-14 21:03:08.690946 | warning | StorageRepository | Error getting motion file for asset 3E9F2E7D-0D7B-40EF-BDB7-0F5DCD20839A/L0/001, name: IMG_8078.HEIC, created on: 2025-05-10 17:11:36.000 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) | #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370) <asynchronous suspension> #2 AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765) <asynchronous suspension> #3 StorageRepository.getMotionFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:32) <asynchronous suspension> #4 UploadService._getUploadTask (package:immich_mobile/services/upload.service.dart:240) <asynchronous suspension> #5 UploadService.startBackup (package:immich_mobile/services/upload.service.dart:144) <asynchronous suspension> #6 _DriftBackupPageState.startBackup (package:immich_mobile/pages/backup/drift_backup.page.dart:43) <asynchronous suspension> #7 _DriftBackupPageState.build.<anonymous closure> (package:immich_mobile/pages/backup/drift_backup.page.dart:91) <asynchronous suspension> ``` ## Server Logs ``` immich_server | Query failed : { immich_server | durationMs: 3.981588989496231, immich_server | error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" immich_server | at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26) immich_server | at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6) immich_server | at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9) immich_server | at Socket.emit (node:events:518:28) immich_server | at addChunk (node:internal/streams/readable:561:12) immich_server | at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) immich_server | at Readable.push (node:internal/streams/readable:392:5) immich_server | at TCP.onStreamRead (node:internal/stream_base_commons:189:23) immich_server | at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { immich_server | severity_local: 'ERROR', immich_server | severity: 'ERROR', immich_server | code: '23505', immich_server | detail: 'Key ("ownerId", checksum)=(e2a65a24-ea47-4d20-b549-5f18fcf71389, \\x5f29207baae85e19e7d47745a2568b00568f92a6) already exists.', immich_server | schema_name: 'public', immich_server | table_name: 'asset', immich_server | constraint_name: 'UQ_assets_owner_checksum', immich_server | file: 'nbtinsert.c', immich_server | line: '663', immich_server | routine: '_bt_check_unique' immich_server | }, immich_server | sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "livePhotoVideoId", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) returning *', immich_server | params: [ immich_server | 'e2a65a24-ea47-4d20-b549-5f18fcf71389', immich_server | null, immich_server | <Buffer 5f 29 20 7b aa e8 5e 19 e7 d4 77 45 a2 56 8b 00 56 8f 92 a6>, immich_server | '/usr/src/app/upload/upload/e2a65a24-ea47-4d20-b549-5f18fcf71389/0d/9c/0d9c324b-6e41-4c50-ab23-1343ee0a909e.HEIC', immich_server | '3A7B1793-2331-4315-95DE-988BED9BE323/L0/001', immich_server | '86b1b8f7d69181603ff2aea4e5e00d644fb9fae7c20e321c7c6a3b739763330f', immich_server | 2025-08-15T04:01:20.349Z, immich_server | 2025-08-10T20:15:34.429Z, immich_server | 2025-08-15T04:01:20.349Z, immich_server | 'IMAGE', immich_server | false, immich_server | '0', immich_server | 'timeline', immich_server | '67df13a2-b6b6-48db-aa47-0e6f68925d5c', immich_server | 'IMG_0003.HEIC' immich_server | ] immich_server | } immich_server | Query failed : { immich_server | durationMs: 4.795473992824554, immich_server | error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" immich_server | at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26) immich_server | at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6) immich_server | at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9) immich_server | at Socket.emit (node:events:518:28) immich_server | at addChunk (node:internal/streams/readable:561:12) immich_server | at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) immich_server | at Readable.push (node:internal/streams/readable:392:5) immich_server | at TCP.onStreamRead (node:internal/stream_base_commons:189:23) immich_server | at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { immich_server | severity_local: 'ERROR', immich_server | severity: 'ERROR', immich_server | code: '23505', immich_server | detail: 'Key ("ownerId", checksum)=(e2a65a24-ea47-4d20-b549-5f18fcf71389, \\xc7b60404438e02c17ba3b261ed7571d60618bc7e) already exists.', immich_server | schema_name: 'public', immich_server | table_name: 'asset', immich_server | constraint_name: 'UQ_assets_owner_checksum', immich_server | file: 'nbtinsert.c', immich_server | line: '663', immich_server | routine: '_bt_check_unique' immich_server | }, immich_server | sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', immich_server | params: [ immich_server | 'e2a65a24-ea47-4d20-b549-5f18fcf71389', immich_server | null, immich_server | <Buffer c7 b6 04 04 43 8e 02 c1 7b a3 b2 61 ed 75 71 d6 06 18 bc 7e>, immich_server | '/usr/src/app/upload/upload/e2a65a24-ea47-4d20-b549-5f18fcf71389/aa/5a/aa5a0a92-48b0-4d37-a481-8a1a6d109f2e.MOV', immich_server | 'D16A6D24-8F9B-479C-A679-06D08A9A9090/L0/001', immich_server | '86b1b8f7d69181603ff2aea4e5e00d644fb9fae7c20e321c7c6a3b739763330f', immich_server | 2025-08-15T03:59:17.106Z, immich_server | 2025-08-10T20:14:42.355Z, immich_server | 2025-08-15T03:59:17.106Z, immich_server | 'VIDEO', immich_server | false, immich_server | '0', immich_server | 'timeline', immich_server | 'IMG_0001.MOV' immich_server | ] immich_server | } ```
Author
Owner

@d1egoaz commented on GitHub (Aug 15, 2025):

 I forgot the data for when throws an error:

Image

IOS Logs

CLICK ME for ERROR LOGS

2025-08-14 21:20:40.172544 | warning  | StorageRepository    | Error getting file for asset 2F7381E1-A45D-4D12-A1C1-12CE482AFA57/L0/001 | PlatformException(PHPhotosErrorDomain (3169), The operation couldn’t be completed. (PHPhotosErrorDomain error 3169.), No failure reason provided, null) |
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370)
<asynchronous suspension>
#2      AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765)
<asynchronous suspension>
#3      StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16)
<asynchronous suspension>
#4      HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:60)
<asynchronous suspension>
#5      HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:43)
<asynchronous suspension>
#6      runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:52)
<asynchronous suspension>
#7      WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106)
<asynchronous suspension>

2025-08-14 21:20:13.380386 | severe   | IsolateLogger        | Error in runInIsolateGentle  | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
  Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null |
package:sqlite3/src/implementation/exception.dart 87                               throwException
package:sqlite3/src/implementation/statement.dart 109                              StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289                              StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81                                              CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131                                        Sqlite3Delegate.runBatchSync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched.<fn>
dart:async/future.dart 315                                                         new Future.sync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128                        _BaseExecutor.runBatched.<fn>
package:drift/src/runtime/executor/helpers/engines.dart 62                         _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122                        _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170                                      ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165                                    DriftCommunication.setRequestHandler.<fn>
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113                                    DriftCommunication.request
package:drift/src/remote/client_impl.dart 84                                       _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215                                       Batch._runWith
package:drift/src/runtime/api/batch.dart 199                                       Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107  SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 100                 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 91                  SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95      SyncApiRepository.streamChanges
package:immich_mobile/utils/isolate.dart 52                                        runInIsolateGentle.<fn>
package:worker_manager/src/worker/worker_io.dart 106                               WorkerImpl._anotherIsolate.<fn>

2025-08-14 21:20:13.380364 | severe   | SyncApiRepository    | Error processing stream | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
  Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null |
package:sqlite3/src/implementation/exception.dart 87                               throwException
package:sqlite3/src/implementation/statement.dart 109                              StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289                              StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81                                              CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131                                        Sqlite3Delegate.runBatchSync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched.<fn>
dart:async/future.dart 315                                                         new Future.sync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128                        _BaseExecutor.runBatched.<fn>
package:drift/src/runtime/executor/helpers/engines.dart 62                         _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122                        _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170                                      ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165                                    DriftCommunication.setRequestHandler.<fn>
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113                                    DriftCommunication.request
package:drift/src/remote/client_impl.dart 84                                       _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215                                       Batch._runWith
package:drift/src/runtime/api/batch.dart 199                                       Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107  SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 100                 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 91                  SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95      SyncApiRepository.streamChanges
package:immich_mobile/utils/isolate.dart 52                                        runInIsolateGentle.<fn>
package:worker_manager/src/worker/worker_io.dart 106                               WorkerImpl._anotherIsolate.<fn>

2025-08-14 21:20:13.379462 | severe   | DriftSyncStreamRepository | Error: updateAssetsV1 - user | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
  Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null |
package:sqlite3/src/implementation/exception.dart 87                               throwException
package:sqlite3/src/implementation/statement.dart 109                              StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289                              StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81                                              CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131                                        Sqlite3Delegate.runBatchSync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched.<fn>
dart:async/future.dart 315                                                         new Future.sync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128                        _BaseExecutor.runBatched.<fn>
package:drift/src/runtime/executor/helpers/engines.dart 62                         _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122                        _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170                                      ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165                                    DriftCommunication.setRequestHandler.<fn>
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113                                    DriftCommunication.request
package:drift/src/remote/client_impl.dart 84                                       _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215                                       Batch._runWith
package:drift/src/runtime/api/batch.dart 199                                       Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107  SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 100                 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 91                  SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95      SyncApiRepository.streamChanges
package:immich_mobile/utils/isolate.dart 52                                        runInIsolateGentle.<fn>
package:worker_manager/src/worker/worker_io.dart 106                               WorkerImpl._anotherIsolate.<fn>

2025-08-14 21:20:11.347745 | info     | DEV                  | Device sync took - 4714ms |
2025-08-14 21:20:11.347654 | info     | DeviceSyncService    | Device sync took - 4714ms |
2025-08-14 21:20:09.377781 | info     | DEV                  | Delta deleted: 0 |
2025-08-14 21:20:09.377716 | info     | DEV                  | Delta updated: 114 |
2025-08-14 21:20:06.634205 | info     | DEV                  | Remote sync request for user |
2025-08-14 21:20:06.634106 | info     | SyncStreamService    | Remote sync request for user |
2025-08-14 21:18:24.701215 | info     | DEV                  | Hashed 3/3 assets |
2025-08-14 21:18:23.967394 | severe   | IsolateLogger        | Error in runInIsolateGentle  | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
  Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null |
package:sqlite3/src/implementation/exception.dart 87                               throwException
package:sqlite3/src/implementation/statement.dart 109                              StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289                              StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81                                              CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131                                        Sqlite3Delegate.runBatchSync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched.<fn>
dart:async/future.dart 315                                                         new Future.sync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128                        _BaseExecutor.runBatched.<fn>
package:drift/src/runtime/executor/helpers/engines.dart 62                         _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122                        _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170                                      ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165                                    DriftCommunication.setRequestHandler.<fn>
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113                                    DriftCommunication.request
package:drift/src/remote/client_impl.dart 84                                       _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215                                       Batch._runWith
package:drift/src/runtime/api/batch.dart 199                                       Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107  SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 100                 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 91                  SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95      SyncApiRepository.streamChanges
package:immich_mobile/utils/isolate.dart 52                                        runInIsolateGentle.<fn>
package:worker_manager/src/worker/worker_io.dart 106                               WorkerImpl._anotherIsolate.<fn>

2025-08-14 21:18:23.967326 | severe   | SyncApiRepository    | Error processing stream | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
  Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null |
package:sqlite3/src/implementation/exception.dart 87                               throwException
package:sqlite3/src/implementation/statement.dart 109                              StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289                              StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81                                              CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131                                        Sqlite3Delegate.runBatchSync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched.<fn>
dart:async/future.dart 315                                                         new Future.sync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128                        _BaseExecutor.runBatched.<fn>
package:drift/src/runtime/executor/helpers/engines.dart 62                         _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122                        _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170                                      ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165                                    DriftCommunication.setRequestHandler.<fn>
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113                                    DriftCommunication.request
package:drift/src/remote/client_impl.dart 84                                       _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215                                       Batch._runWith
package:drift/src/runtime/api/batch.dart 199                                       Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107  SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 100                 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 91                  SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95      SyncApiRepository.streamChanges
package:immich_mobile/utils/isolate.dart 52                                        runInIsolateGentle.<fn>
package:worker_manager/src/worker/worker_io.dart 106                               WorkerImpl._anotherIsolate.<fn>

2025-08-14 21:18:23.964431 | severe   | DriftSyncStreamRepository | Error: updateAssetsV1 - user | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067)
  Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null |
package:sqlite3/src/implementation/exception.dart 87                               throwException
package:sqlite3/src/implementation/statement.dart 109                              StatementImplementation._execute
package:sqlite3/src/implementation/statement.dart 289                              StatementImplementation.executeWith
package:sqlite3/src/statement.dart 81                                              CommonPreparedStatement.execute
package:drift/src/sqlite3/database.dart 131                                        Sqlite3Delegate.runBatchSync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched.<fn>
dart:async/future.dart 315                                                         new Future.sync
package:drift/native.dart 373                                                      _NativeDelegate.runBatched
package:drift/src/runtime/executor/helpers/engines.dart 128                        _BaseExecutor.runBatched.<fn>
package:drift/src/runtime/executor/helpers/engines.dart 62                         _BaseExecutor._synchronized
package:drift/src/runtime/executor/helpers/engines.dart 122                        _BaseExecutor.runBatched
package:drift/src/remote/server_impl.dart 170                                      ServerImplementation._runBatched
package:drift/src/remote/communication.dart 165                                    DriftCommunication.setRequestHandler.<fn>
===== asynchronous gap ===========================
package:drift/src/remote/communication.dart 113                                    DriftCommunication.request
package:drift/src/remote/client_impl.dart 84                                       _BaseExecutor.runBatched
package:drift/src/runtime/api/batch.dart 215                                       Batch._runWith
package:drift/src/runtime/api/batch.dart 199                                       Batch._commit
package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107  SyncStreamRepository.updateAssetsV1
package:immich_mobile/domain/services/sync_stream.service.dart 100                 SyncStreamService._processBatch
package:immich_mobile/domain/services/sync_stream.service.dart 91                  SyncStreamService._handleEvents
package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95      SyncApiRepository.streamChanges
package:immich_mobile/utils/isolate.dart 52                                        runInIsolateGentle.<fn>
package:worker_manager/src/worker/worker_io.dart 106                               WorkerImpl._anotherIsolate.<fn>

2025-08-14 21:18:17.474107 | info     | DEV                  | Device sync took - 1364ms |
2025-08-14 21:18:17.474096 | info     | DeviceSyncService    | Device sync took - 1364ms |
2025-08-14 21:18:17.474088 | info     | DEV                  | Full device sync took - 1364ms |
2025-08-14 21:18:17.474006 | info     | DeviceSyncService    | Full device sync took - 1364ms |
2025-08-14 21:18:16.244629 | info     | SplashScreenPage     | Successfully updated auth info with access token: U9YOEsi2zLiw3ZjNAUnPWEcPah37uxYYkhLpfHgrVQ |
2025-08-14 21:18:16.111450 | info     | DEV                  | Remote sync request for user |
2025-08-14 21:18:16.111394 | info     | SyncStreamService    | Remote sync request for user |
2025-08-14 21:18:16.109707 | info     | DEV                  | Full sync request from user |
2025-08-14 21:18:16.072301 | info     | SplashScreenPage     | Resuming session at https://photos.lan.<mydomain>/api |
2025-08-14 21:05:38.656581 | warning  | StorageRepository    | Error getting motion file for asset 3C10EB08-5BD1-45D5-8D37-C92A27853257/L0/001, name: IMG_7655.HEIC, created on: 2025-04-19 11:31:46.000 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) |
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370)
<asynchronous suspension>
#2      AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765)
<asynchronous suspension>
#3      StorageRepository.getMotionFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:32)
<asynchronous suspension>
#4      UploadService._getUploadTask (package:immich_mobile/services/upload.service.dart:240)
<asynchronous suspension>
#5      UploadService.startBackup (package:immich_mobile/services/upload.service.dart:144)
<asynchronous suspension>
#6      _DriftBackupPageState.startBackup (package:immich_mobile/pages/backup/drift_backup.page.dart:43)
<asynchronous suspension>
#7      _DriftBackupPageState.build.<anonymous closure> (package:immich_mobile/pages/backup/drift_backup.page.dart:91)
<asynchronous suspension>

2025-08-14 21:05:38.405596 | info     | DEV                  | Hashed 108/108 assets |
2025-08-14 21:03:38.786610 | warning  | StorageRepository    | Error getting file for asset BE89ADB0-F708-40F4-A4D7-B26811CF6EE6/L0/001 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) |
#0      StandardMethodCodec.deco

```

</p>
</details>
@d1egoaz commented on GitHub (Aug 15, 2025):  I forgot the data for when throws an error: <img width="456" height="861" alt="Image" src="https://github.com/user-attachments/assets/c89e1e88-b73c-4660-908f-7b808d880839" /> ## IOS Logs <details><summary>CLICK ME for ERROR LOGS</summary> <p> ```` 2025-08-14 21:20:40.172544 | warning | StorageRepository | Error getting file for asset 2F7381E1-A45D-4D12-A1C1-12CE482AFA57/L0/001 | PlatformException(PHPhotosErrorDomain (3169), The operation couldn’t be completed. (PHPhotosErrorDomain error 3169.), No failure reason provided, null) | #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370) <asynchronous suspension> #2 AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765) <asynchronous suspension> #3 StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16) <asynchronous suspension> #4 HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:60) <asynchronous suspension> #5 HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:43) <asynchronous suspension> #6 runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:52) <asynchronous suspension> #7 WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106) <asynchronous suspension> 2025-08-14 21:20:13.380386 | severe | IsolateLogger | Error in runInIsolateGentle | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null | package:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107 SyncStreamRepository.updateAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 100 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 91 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95 SyncApiRepository.streamChanges package:immich_mobile/utils/isolate.dart 52 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn> 2025-08-14 21:20:13.380364 | severe | SyncApiRepository | Error processing stream | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null | package:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107 SyncStreamRepository.updateAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 100 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 91 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95 SyncApiRepository.streamChanges package:immich_mobile/utils/isolate.dart 52 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn> 2025-08-14 21:20:13.379462 | severe | DriftSyncStreamRepository | Error: updateAssetsV1 - user | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null | package:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107 SyncStreamRepository.updateAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 100 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 91 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95 SyncApiRepository.streamChanges package:immich_mobile/utils/isolate.dart 52 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn> 2025-08-14 21:20:11.347745 | info | DEV | Device sync took - 4714ms | 2025-08-14 21:20:11.347654 | info | DeviceSyncService | Device sync took - 4714ms | 2025-08-14 21:20:09.377781 | info | DEV | Delta deleted: 0 | 2025-08-14 21:20:09.377716 | info | DEV | Delta updated: 114 | 2025-08-14 21:20:06.634205 | info | DEV | Remote sync request for user | 2025-08-14 21:20:06.634106 | info | SyncStreamService | Remote sync request for user | 2025-08-14 21:18:24.701215 | info | DEV | Hashed 3/3 assets | 2025-08-14 21:18:23.967394 | severe | IsolateLogger | Error in runInIsolateGentle | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null | package:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107 SyncStreamRepository.updateAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 100 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 91 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95 SyncApiRepository.streamChanges package:immich_mobile/utils/isolate.dart 52 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn> 2025-08-14 21:18:23.967326 | severe | SyncApiRepository | Error processing stream | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null | package:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107 SyncStreamRepository.updateAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 100 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 91 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95 SyncApiRepository.streamChanges package:immich_mobile/utils/isolate.dart 52 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn> 2025-08-14 21:18:23.964431 | severe | DriftSyncStreamRepository | Error: updateAssetsV1 - user | SqliteException(2067): while executing statement, UNIQUE constraint failed: remote_asset_entity.owner_id, remote_asset_entity.checksum, constraint failed (code 2067) Causing statement: INSERT INTO "remote_asset_entity" ("name", "type", "created_at", "updated_at", "duration_in_seconds", "id", "checksum", "is_favorite", "owner_id", "local_date_time", "thumb_hash", "deleted_at", "live_photo_video_id", "visibility", "stack_id", "library_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT("id") DO UPDATE SET "name" = ?, "type" = ?, "created_at" = ?, "updated_at" = ?, "duration_in_seconds" = ?, "checksum" = ?, "is_favorite" = ?, "owner_id" = ?, "local_date_time" = ?, "thumb_hash" = ?, "deleted_at" = ?, "live_photo_video_id" = ?, "visibility" = ?, "stack_id" = ?, "library_id" = ?, parameters: IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, 7b04d3d4-2b02-438f-979f-be6a93870ebb, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null, IMG_0143.MP4, 2, 2020-01-07T00:46:34.000Z, 2025-07-26T03:38:24.000Z, 1, ReMiA2hNXmN/b726jBnD9UZIsNY=, 0, e2a65a24-ea47-4d20-b549-5f18fcf71389, 2020-01-06T19:46:34.000Z, null, 2025-08-03T05:52:53.353Z, null, 0, null, null | package:sqlite3/src/implementation/exception.dart 87 throwException package:sqlite3/src/implementation/statement.dart 109 StatementImplementation._execute package:sqlite3/src/implementation/statement.dart 289 StatementImplementation.executeWith package:sqlite3/src/statement.dart 81 CommonPreparedStatement.execute package:drift/src/sqlite3/database.dart 131 Sqlite3Delegate.runBatchSync package:drift/native.dart 373 _NativeDelegate.runBatched.<fn> dart:async/future.dart 315 new Future.sync package:drift/native.dart 373 _NativeDelegate.runBatched package:drift/src/runtime/executor/helpers/engines.dart 128 _BaseExecutor.runBatched.<fn> package:drift/src/runtime/executor/helpers/engines.dart 62 _BaseExecutor._synchronized package:drift/src/runtime/executor/helpers/engines.dart 122 _BaseExecutor.runBatched package:drift/src/remote/server_impl.dart 170 ServerImplementation._runBatched package:drift/src/remote/communication.dart 165 DriftCommunication.setRequestHandler.<fn> ===== asynchronous gap =========================== package:drift/src/remote/communication.dart 113 DriftCommunication.request package:drift/src/remote/client_impl.dart 84 _BaseExecutor.runBatched package:drift/src/runtime/api/batch.dart 215 Batch._runWith package:drift/src/runtime/api/batch.dart 199 Batch._commit package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart 107 SyncStreamRepository.updateAssetsV1 package:immich_mobile/domain/services/sync_stream.service.dart 100 SyncStreamService._processBatch package:immich_mobile/domain/services/sync_stream.service.dart 91 SyncStreamService._handleEvents package:immich_mobile/infrastructure/repositories/sync_api.repository.dart 95 SyncApiRepository.streamChanges package:immich_mobile/utils/isolate.dart 52 runInIsolateGentle.<fn> package:worker_manager/src/worker/worker_io.dart 106 WorkerImpl._anotherIsolate.<fn> 2025-08-14 21:18:17.474107 | info | DEV | Device sync took - 1364ms | 2025-08-14 21:18:17.474096 | info | DeviceSyncService | Device sync took - 1364ms | 2025-08-14 21:18:17.474088 | info | DEV | Full device sync took - 1364ms | 2025-08-14 21:18:17.474006 | info | DeviceSyncService | Full device sync took - 1364ms | 2025-08-14 21:18:16.244629 | info | SplashScreenPage | Successfully updated auth info with access token: U9YOEsi2zLiw3ZjNAUnPWEcPah37uxYYkhLpfHgrVQ | 2025-08-14 21:18:16.111450 | info | DEV | Remote sync request for user | 2025-08-14 21:18:16.111394 | info | SyncStreamService | Remote sync request for user | 2025-08-14 21:18:16.109707 | info | DEV | Full sync request from user | 2025-08-14 21:18:16.072301 | info | SplashScreenPage | Resuming session at https://photos.lan.<mydomain>/api | 2025-08-14 21:05:38.656581 | warning | StorageRepository | Error getting motion file for asset 3C10EB08-5BD1-45D5-8D37-C92A27853257/L0/001, name: IMG_7655.HEIC, created on: 2025-04-19 11:31:46.000 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) | #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370) <asynchronous suspension> #2 AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765) <asynchronous suspension> #3 StorageRepository.getMotionFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:32) <asynchronous suspension> #4 UploadService._getUploadTask (package:immich_mobile/services/upload.service.dart:240) <asynchronous suspension> #5 UploadService.startBackup (package:immich_mobile/services/upload.service.dart:144) <asynchronous suspension> #6 _DriftBackupPageState.startBackup (package:immich_mobile/pages/backup/drift_backup.page.dart:43) <asynchronous suspension> #7 _DriftBackupPageState.build.<anonymous closure> (package:immich_mobile/pages/backup/drift_backup.page.dart:91) <asynchronous suspension> 2025-08-14 21:05:38.405596 | info | DEV | Hashed 108/108 assets | 2025-08-14 21:03:38.786610 | warning | StorageRepository | Error getting file for asset BE89ADB0-F708-40F4-A4D7-B26811CF6EE6/L0/001 | PlatformException(PHPhotosErrorDomain (-1), The operation couldn’t be completed. (PHPhotosErrorDomain error -1.), No failure reason provided, null) | #0 StandardMethodCodec.deco ``` </p> </details>
Author
Owner

@mgnisia commented on GitHub (Aug 15, 2025):

I have a pretty much similar setup to @d1egoaz, exactly the same behaviour.

@mgnisia commented on GitHub (Aug 15, 2025): I have a pretty much similar setup to @d1egoaz, exactly the same behaviour.
Author
Owner

@chriswa81 commented on GitHub (Aug 15, 2025):

It's probably the same bug as #20899 and #20254!

@Jacajack and @chriswa81 can you guys help capturing the screenshot of the Beta Sync Stats in the app settings?

General conditions:
Immich-Server: 1.138.0
Immich-iOS-App: 1.138.0
iCloud-Sync: No
Immich-Beta-Mode: Yes
Reverse-Proxy: No

@alextran1502
Of course. Here is my screenshots of the 16 elements that need to be backed up repeatedly:

Image
Image
Image

Finally, here is the Immich server log during the upload:

Query failed : {
durationMs: 2.111700998619199,
error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26)
at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6)
at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9)
at Socket.emit (node:events:518:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
severity_local: 'ERROR',
severity: 'ERROR',
code: '23505',
detail: 'Key ("ownerId", checksum)=(115da467-e83f-4fe5-b5c6-6cf15fa8ce38, \xcde813fd7c7890e1afbde80f9c7358cf7414952f) already exists.',
schema_name: 'public',
table_name: 'asset',
constraint_name: 'UQ_assets_owner_checksum',
file: 'nbtinsert.c',
line: '663',
routine: '_bt_check_unique'
},
sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',
params: [
'115da467-e83f-4fe5-b5c6-6cf15fa8ce38',

,
<Buffer cd e8 13 fd 7c 78 90 e1 af bd e8 0f 9c 73 58 cf 74 14 95 2f>,
'/usr/src/app/upload/upload/115da467-e83f-4fe5-b5c6-6cf15fa8ce38/f4/b0/f4b01725-10ae-49cb-9de4-ad3a40330098.mov',
'932F6EAA-F6B0-4F33-B760-240A5E4AC1DB/L0/001',
'd672b373341415f4afc3b9bdcf2ae0adaa5f6588bbcbf20115e18edd0161bab4',
2025-07-25T06:55:50.092Z,
2024-05-25T18:10:12.400Z,
2025-07-25T06:55:50.092Z,

'VIDEO',
false,
'0',
'timeline',
'IMG_2287.MOV'
]
}

Here is another screenshot of the backup page without beta mode:

Image

No remaining items are displayed here. It works correctly this way.

Thanks for fixing.

@chriswa81 commented on GitHub (Aug 15, 2025): It's probably the same bug as [#20899](https://github.com/immich-app/immich/issues/20899) and [#20254](https://github.com/immich-app/immich/issues/20254)! > [@Jacajack](https://github.com/Jacajack) and [@chriswa81](https://github.com/chriswa81) can you guys help capturing the screenshot of the Beta Sync Stats in the app settings? **General conditions:** Immich-Server: 1.138.0 Immich-iOS-App: 1.138.0 iCloud-Sync: No Immich-Beta-Mode: Yes Reverse-Proxy: No @alextran1502 Of course. Here is my **screenshots** of the 16 elements that need to be backed up repeatedly: ![Image](https://github.com/user-attachments/assets/f26355b0-d9af-4a17-887f-8977002dc6a7) <img width="1179" height="2556" alt="Image" src="https://github.com/user-attachments/assets/ba00fe76-4be9-43a5-894e-beee9d098181" /> <img width="1179" height="2556" alt="Image" src="https://github.com/user-attachments/assets/0b58b185-cd5a-47e2-98d4-74d41bd629a7" /> Finally, here is the **Immich server log** during the upload: Query failed : { durationMs: 2.111700998619199, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:794:26) at handle (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:480:6) at Socket.data (/usr/src/app/server/node_modules/postgres/cjs/src/connection.js:315:9) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at TCP.onStreamRead (node:internal/stream_base_commons:189:23) at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { severity_local: 'ERROR', severity: 'ERROR', code: '23505', detail: 'Key ("ownerId", checksum)=(115da467-e83f-4fe5-b5c6-6cf15fa8ce38, \\xcde813fd7c7890e1afbde80f9c7358cf7414952f) already exists.', schema_name: 'public', table_name: 'asset', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '663', routine: '_bt_check_unique' }, sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', params: [ '115da467-e83f-4fe5-b5c6-6cf15fa8ce38',  , <Buffer cd e8 13 fd 7c 78 90 e1 af bd e8 0f 9c 73 58 cf 74 14 95 2f>, '/usr/src/app/upload/upload/115da467-e83f-4fe5-b5c6-6cf15fa8ce38/f4/b0/f4b01725-10ae-49cb-9de4-ad3a40330098.mov', '932F6EAA-F6B0-4F33-B760-240A5E4AC1DB/L0/001', 'd672b373341415f4afc3b9bdcf2ae0adaa5f6588bbcbf20115e18edd0161bab4', 2025-07-25T06:55:50.092Z, 2024-05-25T18:10:12.400Z, 2025-07-25T06:55:50.092Z,  'VIDEO', false, '0', 'timeline', 'IMG_2287.MOV' ] } Here is another screenshot of the backup page without beta mode: <img width="1179" height="2556" alt="Image" src="https://github.com/user-attachments/assets/f25da082-4705-447b-a7aa-9a58b5d28a19" /> No remaining items are displayed here. It works correctly this way. Thanks for fixing.
Author
Owner

@Jacajack commented on GitHub (Aug 15, 2025):

@alextran1502 I can try that in a couple of days when I'm back home, but I doubt that's the core issue since other people have other setups and similar problems. I looked at the server logs, but I don't see anything suspicious here during the failed uploads.

For what it's worth, the legacy upload page shows a mismatch between remote and local assets counts, but shows that there are 0 remaining assets to upload.

Image
@Jacajack commented on GitHub (Aug 15, 2025): @alextran1502 I can try that in a couple of days when I'm back home, but I doubt that's the core issue since other people have other setups and similar problems. I looked at the server logs, but I don't see anything suspicious here during the failed uploads. For what it's worth, the legacy upload page shows a mismatch between remote and local assets counts, but shows that there are 0 remaining assets to upload. <img width="33%" alt="Image" src="https://github.com/user-attachments/assets/fc9e3751-7c7f-4b5f-b4df-bebc47c08039" />
Author
Owner

@Magnus987 commented on GitHub (Aug 15, 2025):

For me it's a very similar behavior. With the beta turned off it shows correctly 318 images which are not uploaded, but with the beta on it doesn't recognize any of my Assets(of my phone) as uploaded. I only connect via my local IP to my Immich Server.
Image
Hope that helps, thanks for working on this!

@Magnus987 commented on GitHub (Aug 15, 2025): For me it's a very similar behavior. With the beta turned off it shows correctly 318 images which are not uploaded, but with the beta on it doesn't recognize any of my Assets(of my phone) as uploaded. I only connect via my local IP to my Immich Server. <img width="993" height="1103" alt="Image" src="https://github.com/user-attachments/assets/f86da778-660f-4b2c-8694-fa3335a00902" /> Hope that helps, thanks for working on this!
Author
Owner

@Magnus987 commented on GitHub (Aug 18, 2025):

Just for the record, this bug is not Fixed in v1.138.1

@Magnus987 commented on GitHub (Aug 18, 2025): Just for the record, this bug is not Fixed in [v1.138.1](https://github.com/immich-app/immich/releases/tag/v1.138.1)
Author
Owner

@chriswa81 commented on GitHub (Aug 18, 2025):

Unfortunately, I can confirm that.

@chriswa81 commented on GitHub (Aug 18, 2025): Unfortunately, I can confirm that.
Author
Owner

@phipz commented on GitHub (Aug 19, 2025):

I am a bit confused about what the current version with the beta timeline is actually expected to do. Have we moved to client-side hashing by now? @alextran1502 ?

I thought that the beta moves to client-side hashing and does not even start an upload when the local hash matches the server hash? There is a new stats field in the beta timeline stats about how many assets are already hashed, which however is growing only very slowly and only when the app is open. With an increase in the number of hashed assets, more pictures get the cloud symbol with the little tick.

However, I can also confirm that if I started an upload, the client re-uploads assets and the server correctly rejects them.

@phipz commented on GitHub (Aug 19, 2025): I am a bit confused about what the current version with the beta timeline is actually expected to do. Have we moved to client-side hashing by now? @alextran1502 ? I thought that the beta moves to client-side hashing and does not even start an upload when the local hash matches the server hash? There is a new stats field in the beta timeline stats about how many assets are already hashed, which however is growing only very slowly and only when the app is open. With an increase in the number of hashed assets, more pictures get the cloud symbol with the little tick. However, I can also confirm that if I started an upload, the client re-uploads assets and the server correctly rejects them.
Author
Owner

@alextran1502 commented on GitHub (Aug 19, 2025):

@phipz yeah we moved to client side hashing. One possible bug is if you are uploading LivePhotos? Can you help me confirm that? And if the rejection query is for an MOV file?

@alextran1502 commented on GitHub (Aug 19, 2025): @phipz yeah we moved to client side hashing. One possible bug is if you are uploading LivePhotos? Can you help me confirm that? And if the rejection query is for an MOV file?
Author
Owner

@mgnisia commented on GitHub (Aug 23, 2025):

After upgrading to the last version 139.2 I can see that lots of images are now finally uploaded that haven't been uploaded before (they were only marked as red). However after a while I run into the same issues before, I will monitor the solution.

@mgnisia commented on GitHub (Aug 23, 2025): After upgrading to the last version 139.2 I can see that lots of images are now finally uploaded that haven't been uploaded before (they were only marked as red). However after a while I run into the same issues before, I will monitor the solution.
Author
Owner

@Magnus987 commented on GitHub (Aug 23, 2025):

@alextran1502 unfortunately i cant confirm that this bug is only affecting live photos. in the new v139.2 i can see which assets it wants to upload again and its a mix of .JPG and .MP4 files. Not a single .MOV file in there.
However, it does not display all photos that the app indicates as not uploaded.
To test this even more I took 2 normal photos and one live Photo and uploaded them with the non Beta. Then I switched to beta and waited a few minutes. But the behavior is same as always:
The beta shows the 3 Assets from the server with the uploaded icon, but also shows the same 3 local assets as not uploaded and tries to upload them again.

Image
Let me know if you need more details or testing. I'm really looking forward to seeing this issue resolved!

@Magnus987 commented on GitHub (Aug 23, 2025): @alextran1502 unfortunately i cant confirm that this bug is only affecting live photos. in the new v139.2 i can see which assets it wants to upload again and its a mix of .JPG and .MP4 files. Not a single .MOV file in there. However, it does not display all photos that the app indicates as not uploaded. To test this even more I took 2 normal photos and one live Photo and uploaded them with the non Beta. Then I switched to beta and waited a few minutes. But the behavior is same as always: The beta shows the 3 Assets from the server with the uploaded icon, but also shows the same 3 local assets as not uploaded and tries to upload them again. ![Image](https://github.com/user-attachments/assets/9ac617e7-7161-4056-8bb7-5bfa195fc659) Let me know if you need more details or testing. I'm really looking forward to seeing this issue resolved!
Author
Owner

@Magnus987 commented on GitHub (Aug 25, 2025):

Just for the record, this bug is not Fixed in v1.139.4

@Magnus987 commented on GitHub (Aug 25, 2025): Just for the record, this bug is not Fixed in [v1.139.4](https://github.com/immich-app/immich/releases/tag/v1.139.4)
Author
Owner

@alextran1502 commented on GitHub (Aug 25, 2025):

@Magnus987 Can you share the Beta Sync Status page?

@alextran1502 commented on GitHub (Aug 25, 2025): @Magnus987 Can you share the Beta Sync Status page?
Author
Owner

@Magnus987 commented on GitHub (Aug 25, 2025):

@alextran1502 Sure image

@Magnus987 commented on GitHub (Aug 25, 2025): @alextran1502 Sure ![image](https://github.com/user-attachments/assets/804d4003-58ed-4106-9785-a5a37a18ebd0)
Author
Owner

@alextran1502 commented on GitHub (Aug 25, 2025):

Yeah the hashing needs to finish in order for the timeline to look correct

@alextran1502 commented on GitHub (Aug 25, 2025): Yeah the hashing needs to finish in order for the timeline to look correct
Author
Owner

@Magnus987 commented on GitHub (Aug 26, 2025):

@alextran1502 Okay, that makes sense! But is there any way to speed up the hashing? I had the app open in the foreground for 30 minutes and in the background for much longer. Even after 20+ hours total, I’ve barely made progress with only about 1000 more assets hashed, despite having a pretty powerful phone (iPhone 15).
Thanks for your help and time!

@Magnus987 commented on GitHub (Aug 26, 2025): @alextran1502 Okay, that makes sense! But is there any way to speed up the hashing? I had the app open in the foreground for 30 minutes and in the background for much longer. Even after 20+ hours total, I’ve barely made progress with only about 1000 more assets hashed, despite having a pretty powerful phone (iPhone 15). Thanks for your help and time!
Author
Owner

@maslanypotwor commented on GitHub (Aug 26, 2025):

@alextran1502 Okay, that makes sense! But is there any way to speed up the hashing? I had the app open in the foreground for 30 minutes and in the background for much longer. Even after 20+ hours total, I’ve barely made progress with only about 1000 more assets hashed, despite having a pretty powerful phone (iPhone 15).
Thanks for your help and time!

Do you by any chance use iCloud gallery optimization feature? (the one where you keep only info about photos on your phone but the full resolution pictures are kept only on iCloud servers)

My intuition is that if that is indeed the case then maybe it is why it takes so much time since (here I'm again, guessing) Immich needs to download full picture to calculate the hash.

@maslanypotwor commented on GitHub (Aug 26, 2025): > @alextran1502 Okay, that makes sense! But is there any way to speed up the hashing? I had the app open in the foreground for 30 minutes and in the background for much longer. Even after 20+ hours total, I’ve barely made progress with only about 1000 more assets hashed, despite having a pretty powerful phone (iPhone 15). > Thanks for your help and time! Do you by any chance use iCloud gallery optimization feature? (the one where you keep only info about photos on your phone but the full resolution pictures are kept only on iCloud servers) My intuition is that if that is indeed the case then maybe it is why it takes so much time since (here I'm again, guessing) Immich needs to download full picture to calculate the hash.
Author
Owner

@dvmbro commented on GitHub (Aug 26, 2025):

I think you've got it right._ I've closed all the apps on my iPhone, connected to the VPN I'm hosting and the download speed was 0. Opened Immich, went straight to beta status and it went off right away. Reached download speeds of up to 70MB/s. After closing Immich, it was downloading for ~5s more and went straight down to 0B/s. I assume there was a queue of media to download and it stopped downloading & hashing after exiting the app.

@dvmbro commented on GitHub (Aug 26, 2025): I think you've got it right._ I've closed all the apps on my iPhone, connected to the VPN I'm hosting and the download speed was 0. Opened Immich, went straight to beta status and it went off right away. Reached download speeds of up to 70MB/s. After closing Immich, it was downloading for ~5s more and went straight down to 0B/s. I assume there was a queue of media to download and it stopped downloading & hashing after exiting the app.
Author
Owner

@jkoopmann commented on GitHub (Aug 26, 2025):

Might be the same here. What I notice is no progress on the amount of hashed files on the status page. For minutes or longer. If I kill and reopen the app all of the sudden 200 more files are hashed.

Since everything was already uploaded once would it not be safe to disable iCloud only files? Or is this not available anymore in beta sync (at least I remember seeing such an option but cannot find it anymore).

If it is “only” the status/progress not increasing this feels like an easy fix and would eliminate a lot of doubt. 😂

@jkoopmann commented on GitHub (Aug 26, 2025): Might be the same here. What I notice is no progress on the amount of hashed files on the status page. For minutes or longer. If I kill and reopen the app all of the sudden 200 more files are hashed. Since everything was already uploaded once would it not be safe to disable iCloud only files? Or is this not available anymore in beta sync (at least I remember seeing such an option but cannot find it anymore). If it is “only” the status/progress not increasing this feels like an easy fix and would eliminate a lot of doubt. 😂
Author
Owner

@Magnus987 commented on GitHub (Aug 26, 2025):

@maslanypotwor Yeah, you're right! I've thought about this too, as this could really be the issue here. In this case it's not Immich's fault because downloading every single asset from apple servers is just taking too long.
So every user with this iCloud feature (or something similar) has to wait until every single asset is at some point downloaded, hashed and sent back to the cloud for the new timeline to function properly.
If this is really the case and there's no way around it, it's annoying but at least then we'll know what's causing this problem.
:)

@Magnus987 commented on GitHub (Aug 26, 2025): @maslanypotwor Yeah, you're right! I've thought about this too, as this could really be the issue here. In this case it's not Immich's fault because downloading every single asset from apple servers is just taking too long. So every user with this iCloud feature (or something similar) has to wait until every single asset is at some point downloaded, hashed and sent back to the cloud for the new timeline to function properly. If this is really the case and there's no way around it, it's annoying but at least then we'll know what's causing this problem. :)
Author
Owner

@jkoopmann commented on GitHub (Aug 26, 2025):

Mine hangs in 11374 hashed files for more than 5 minutes now (having 1 gbs downlink). Might be that it is downloading and hashing the mother of all videos. Without a proper status there is no way to be sure and this simply “feels” like a bug even if in the end all is correct.

@jkoopmann commented on GitHub (Aug 26, 2025): Mine hangs in 11374 hashed files for more than 5 minutes now (having 1 gbs downlink). Might be that it is downloading and hashing the mother of all videos. Without a proper status there is no way to be sure and this simply “feels” like a bug even if in the end all is correct.
Author
Owner

@alextran1502 commented on GitHub (Aug 26, 2025):

Yes, you are correct about the hashing. I think we can do something about the downloading process for hashing iCloud assets

@alextran1502 commented on GitHub (Aug 26, 2025): Yes, you are correct about the hashing. I think we can do something about the downloading process for hashing iCloud assets
Author
Owner

@maslanypotwor commented on GitHub (Aug 26, 2025):

I think this goes even further and if you are using iCloud shared albums - those assets sometimes CAN be in the cloud only (iOS handles this automatically I think, especially once you are low on storage on your phone) since I am not using iCloud gallery optimization but I noticed that for some shared albums I need to wait sometimes for the video to buffer or photo to download full res as well as I can see this "lag" behavior for some assets in Immich.

As it was mentioned - some indication what is happening in the background in such cases would be nice!

@maslanypotwor commented on GitHub (Aug 26, 2025): I think this goes even further and if you are using iCloud shared albums - those assets sometimes CAN be in the cloud only (iOS handles this automatically I think, especially once you are low on storage on your phone) since I am not using iCloud gallery optimization but I noticed that for some shared albums I need to wait sometimes for the video to buffer or photo to download full res as well as I can see this "lag" behavior for some assets in Immich. As it was mentioned - some indication what is happening in the background in such cases would be nice!
Author
Owner

@jkoopmann commented on GitHub (Aug 27, 2025):

Is the hashing supposed to be taking place in the background? Not only am I not able to see the hashing progress. I get the feeling it simply stops after some time. So I keep reminding myself, start my iPhone, start immich (which then looks as if it is stating from scratch with the immich flash screen) and go to settings and status of beta sync. Still 8000 to go and it seems to process a few hundred per hour. At this rate this is going to be a challenge....

@jkoopmann commented on GitHub (Aug 27, 2025): Is the hashing supposed to be taking place in the background? Not only am I not able to see the hashing progress. I get the feeling it simply stops after some time. So I keep reminding myself, start my iPhone, start immich (which then looks as if it is stating from scratch with the immich flash screen) and go to settings and status of beta sync. Still 8000 to go and it seems to process a few hundred per hour. At this rate this is going to be a challenge....
Author
Owner

@alextran1502 commented on GitHub (Aug 27, 2025):

The hashing isn't supposed to be running in the background at the moment. We will put them into background work in #21243 for faster process. I think the fastest is still leaving the phone opened while hashing is going

@alextran1502 commented on GitHub (Aug 27, 2025): The hashing isn't supposed to be running in the background at the moment. We will put them into background work in #21243 for faster process. I think the fastest is still leaving the phone opened while hashing is going
Author
Owner

@jkoopmann commented on GitHub (Aug 27, 2025):

After having it run in the foreground I have 20046 files hashed. Local are 20048. Log says:

2025-08-27 19:15:04.101005 | info     | DriftBackupNotifier  | Resuming backup tasks... |
2025-08-27 19:15:02.098684 | info     | HashService          | Hashing took - 112ms |
2025-08-27 19:15:02.097654 | warning  | StorageRepository    | Error getting file for asset 90734F3C-45E8-4558-BAAF-1FDDC3CAF67C/L0/001 | PlatformException(PHPhotosErrorDomain (-1), Der Vorgang konnte nicht abgeschlossen werden. (PHPhotosErrorDomain-Fehler -1.), No failure reason provided, null) |
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370)
<asynchronous suspension>
#2      AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765)
<asynchronous suspension>
#3      StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16)
<asynchronous suspension>
#4      HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:58)
<asynchronous suspension>
#5      HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:42)
<asynchronous suspension>
#6      runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:53)
<asynchronous suspension>
#7      WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106)
<asynchronous suspension>

2025-08-27 19:15:02.086371 | warning  | StorageRepository    | Error getting file for asset 8B6130F5-D59F-456E-A163-A439F07E74D2/L0/001 | PlatformException(PHPhotosErrorDomain (-1), Der Vorgang konnte nicht abgeschlossen werden. (PHPhotosErrorDomain-Fehler -1.), No failure reason provided, null) |
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370)
<asynchronous suspension>
#2      AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765)
<asynchronous suspension>
#3      StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16)
<asynchronous suspension>
#4      HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:58)
<asynchronous suspension>
#5      HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:42)
<asynchronous suspension>
#6      runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:53)
<asynchronous suspension>
#7      WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106)
<asynchronous suspension>

The sync page shows 594 remaining assets. If I let it on that sync page immich app eventually crashes. Neither are the two missing files being synced not can I get below the remaining 594 assets.

@jkoopmann commented on GitHub (Aug 27, 2025): After having it run in the foreground I have 20046 files hashed. Local are 20048. Log says: ``` 2025-08-27 19:15:04.101005 | info | DriftBackupNotifier | Resuming backup tasks... | 2025-08-27 19:15:02.098684 | info | HashService | Hashing took - 112ms | 2025-08-27 19:15:02.097654 | warning | StorageRepository | Error getting file for asset 90734F3C-45E8-4558-BAAF-1FDDC3CAF67C/L0/001 | PlatformException(PHPhotosErrorDomain (-1), Der Vorgang konnte nicht abgeschlossen werden. (PHPhotosErrorDomain-Fehler -1.), No failure reason provided, null) | #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370) <asynchronous suspension> #2 AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765) <asynchronous suspension> #3 StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16) <asynchronous suspension> #4 HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:58) <asynchronous suspension> #5 HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:42) <asynchronous suspension> #6 runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:53) <asynchronous suspension> #7 WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106) <asynchronous suspension> 2025-08-27 19:15:02.086371 | warning | StorageRepository | Error getting file for asset 8B6130F5-D59F-456E-A163-A439F07E74D2/L0/001 | PlatformException(PHPhotosErrorDomain (-1), Der Vorgang konnte nicht abgeschlossen werden. (PHPhotosErrorDomain-Fehler -1.), No failure reason provided, null) | #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370) <asynchronous suspension> #2 AssetEntity._getFile (package:photo_manager/src/types/entity.dart:765) <asynchronous suspension> #3 StorageRepository.getFileForAsset (package:immich_mobile/infrastructure/repositories/storage.repository.dart:16) <asynchronous suspension> #4 HashService._hashAssets (package:immich_mobile/domain/services/hash.service.dart:58) <asynchronous suspension> #5 HashService.hashAssets (package:immich_mobile/domain/services/hash.service.dart:42) <asynchronous suspension> #6 runInIsolateGentle.<anonymous closure> (package:immich_mobile/utils/isolate.dart:53) <asynchronous suspension> #7 WorkerImpl._anotherIsolate.<anonymous closure> (package:worker_manager/src/worker/worker_io.dart:106) <asynchronous suspension> ``` The sync page shows 594 remaining assets. If I let it on that sync page immich app eventually crashes. Neither are the two missing files being synced not can I get below the remaining 594 assets.
Author
Owner

@jkoopmann commented on GitHub (Aug 27, 2025):

And immich log shows:

Query failed : {
  durationMs: 3.2459210008382797,
  error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
      at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26)
      at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6)
      at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
      at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
    severity_local: 'ERROR',
    severity: 'ERROR',
    code: '23505',
    detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x5ea3812a0e5af81584b79b82c046f16aff239947) already exists.',
    schema_name: 'public',
    table_name: 'asset',
    constraint_name: 'UQ_assets_owner_checksum',
    file: 'nbtinsert.c',
    line: '666',
    routine: '_bt_check_unique'
  },
  sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',
  params: [
    '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc',
    null,
    <Buffer 5e a3 81 2a 0e 5a f8 15 84 b7 9b 82 c0 46 f1 6a ff 23 99 47>,
    '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/63/09/63094462-41dd-486b-b426-b85da78c6f95.MOV',
    'EC6A4771-568E-4E6B-8419-33015707C4D6/L0/001',
    '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d',
    2025-08-27T17:15:04.211Z,
    2025-08-26T16:32:34.092Z,
    2025-08-27T17:15:04.211Z,
    'VIDEO',
    false,
    '0',
    'timeline',
    'DF447F57-EDD9-45B7-8537-C0474D3DDA89.MOV'
  ]
}
Query failed : {
  durationMs: 3.8083189949393272,
  error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
      at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26)
      at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6)
      at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
      at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
    severity_local: 'ERROR',
    severity: 'ERROR',
    code: '23505',
    detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x5ea3812a0e5af81584b79b82c046f16aff239947) already exists.',
    schema_name: 'public',
    table_name: 'asset',
    constraint_name: 'UQ_assets_owner_checksum',
    file: 'nbtinsert.c',
    line: '666',
    routine: '_bt_check_unique'
  },
  sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',
  params: [
    '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc',
    null,
    <Buffer 5e a3 81 2a 0e 5a f8 15 84 b7 9b 82 c0 46 f1 6a ff 23 99 47>,
    '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/ae/83/ae834151-98ad-49e7-8b9d-d281359a593a.MOV',
    'EC6A4771-568E-4E6B-8419-33015707C4D6/L0/001',
    '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d',
    2025-08-27T17:16:37.320Z,
    2025-08-26T16:32:34.092Z,
    2025-08-27T17:16:37.320Z,
    'VIDEO',
    false,
    '0',
    'timeline',
    'DF447F57-EDD9-45B7-8537-C0474D3DDA89.MOV'
  ]
}
Query failed : {
  durationMs: 3.6917570009827614,
  error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
      at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26)
      at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6)
      at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
      at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
    severity_local: 'ERROR',
    severity: 'ERROR',
    code: '23505',
    detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x4b9f8b45413541793c0f7e60629249948544dcd5) already exists.',
    schema_name: 'public',
    table_name: 'asset',
    constraint_name: 'UQ_assets_owner_checksum',
    file: 'nbtinsert.c',
    line: '666',
    routine: '_bt_check_unique'
  },
  sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',
  params: [
    '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc',
    null,
    <Buffer 4b 9f 8b 45 41 35 41 79 3c 0f 7e 60 62 92 49 94 85 44 dc d5>,
    '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/ad/08/ad08f281-974f-4259-91c7-cf823521c52e.MOV',
    'DE0C228E-0C68-4FAC-AF5A-F4ED40EE191E/L0/001',
    '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d',
    2025-08-27T17:16:37.328Z,
    2025-08-26T16:32:38.061Z,
    2025-08-27T17:16:37.328Z,
    'VIDEO',
    false,
    '0',
    'timeline',
    '62EEC3C0-438B-4BFF-AEA5-80F96817B2AE.MOV'
  ]
}
Query failed : {
  durationMs: 4.198060005903244,
  error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
      at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26)
      at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6)
      at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
      at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {
    severity_local: 'ERROR',
    severity: 'ERROR',
    code: '23505',
    detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x4b9f8b45413541793c0f7e60629249948544dcd5) already exists.',
    schema_name: 'public',
    table_name: 'asset',
    constraint_name: 'UQ_assets_owner_checksum',
    file: 'nbtinsert.c',
    line: '666',
    routine: '_bt_check_unique'
  },
  sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *',
  params: [
    '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc',
    null,
    <Buffer 4b 9f 8b 45 41 35 41 79 3c 0f 7e 60 62 92 49 94 85 44 dc d5>,
    '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/e4/9b/e49b2754-1df1-4cef-afe6-504ba14f81eb.MOV',
    'DE0C228E-0C68-4FAC-AF5A-F4ED40EE191E/L0/001',
    '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d',
    2025-08-27T17:15:04.220Z,
    2025-08-26T16:32:38.061Z,
    2025-08-27T17:15:04.220Z,
    'VIDEO',
    false,
    '0',
    'timeline',
    '62EEC3C0-438B-4BFF-AEA5-80F96817B2AE.MOV'
  ]
}

I am down to 593 remaining now (why ever) so something IS happening but since the app is crashing all the time....

@jkoopmann commented on GitHub (Aug 27, 2025): And immich log shows: ``` Query failed : { durationMs: 3.2459210008382797, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26) at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6) at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at TCP.onStreamRead (node:internal/stream_base_commons:189:23) at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { severity_local: 'ERROR', severity: 'ERROR', code: '23505', detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x5ea3812a0e5af81584b79b82c046f16aff239947) already exists.', schema_name: 'public', table_name: 'asset', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '666', routine: '_bt_check_unique' }, sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', params: [ '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc', null, <Buffer 5e a3 81 2a 0e 5a f8 15 84 b7 9b 82 c0 46 f1 6a ff 23 99 47>, '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/63/09/63094462-41dd-486b-b426-b85da78c6f95.MOV', 'EC6A4771-568E-4E6B-8419-33015707C4D6/L0/001', '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d', 2025-08-27T17:15:04.211Z, 2025-08-26T16:32:34.092Z, 2025-08-27T17:15:04.211Z, 'VIDEO', false, '0', 'timeline', 'DF447F57-EDD9-45B7-8537-C0474D3DDA89.MOV' ] } Query failed : { durationMs: 3.8083189949393272, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26) at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6) at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at TCP.onStreamRead (node:internal/stream_base_commons:189:23) at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { severity_local: 'ERROR', severity: 'ERROR', code: '23505', detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x5ea3812a0e5af81584b79b82c046f16aff239947) already exists.', schema_name: 'public', table_name: 'asset', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '666', routine: '_bt_check_unique' }, sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', params: [ '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc', null, <Buffer 5e a3 81 2a 0e 5a f8 15 84 b7 9b 82 c0 46 f1 6a ff 23 99 47>, '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/ae/83/ae834151-98ad-49e7-8b9d-d281359a593a.MOV', 'EC6A4771-568E-4E6B-8419-33015707C4D6/L0/001', '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d', 2025-08-27T17:16:37.320Z, 2025-08-26T16:32:34.092Z, 2025-08-27T17:16:37.320Z, 'VIDEO', false, '0', 'timeline', 'DF447F57-EDD9-45B7-8537-C0474D3DDA89.MOV' ] } Query failed : { durationMs: 3.6917570009827614, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26) at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6) at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at TCP.onStreamRead (node:internal/stream_base_commons:189:23) at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { severity_local: 'ERROR', severity: 'ERROR', code: '23505', detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x4b9f8b45413541793c0f7e60629249948544dcd5) already exists.', schema_name: 'public', table_name: 'asset', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '666', routine: '_bt_check_unique' }, sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', params: [ '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc', null, <Buffer 4b 9f 8b 45 41 35 41 79 3c 0f 7e 60 62 92 49 94 85 44 dc d5>, '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/ad/08/ad08f281-974f-4259-91c7-cf823521c52e.MOV', 'DE0C228E-0C68-4FAC-AF5A-F4ED40EE191E/L0/001', '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d', 2025-08-27T17:16:37.328Z, 2025-08-26T16:32:38.061Z, 2025-08-27T17:16:37.328Z, 'VIDEO', false, '0', 'timeline', '62EEC3C0-438B-4BFF-AEA5-80F96817B2AE.MOV' ] } Query failed : { durationMs: 4.198060005903244, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:794:26) at handle (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:480:6) at Socket.data (/app/immich/server/node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/cjs/src/connection.js:315:9) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at TCP.onStreamRead (node:internal/stream_base_commons:189:23) at TCP.callbackTrampoline (node:internal/async_hooks:130:17) { severity_local: 'ERROR', severity: 'ERROR', code: '23505', detail: 'Key ("ownerId", checksum)=(11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc, \\x4b9f8b45413541793c0f7e60629249948544dcd5) already exists.', schema_name: 'public', table_name: 'asset', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '666', routine: '_bt_check_unique' }, sql: 'insert into "asset" ("ownerId", "libraryId", "checksum", "originalPath", "deviceAssetId", "deviceId", "fileCreatedAt", "fileModifiedAt", "localDateTime", "type", "isFavorite", "duration", "visibility", "originalFileName") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) returning *', params: [ '11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc', null, <Buffer 4b 9f 8b 45 41 35 41 79 3c 0f 7e 60 62 92 49 94 85 44 dc d5>, '/photos/upload/11f17f72-8e1d-46b3-b1cc-a9d71c5a6ccc/e4/9b/e49b2754-1df1-4cef-afe6-504ba14f81eb.MOV', 'DE0C228E-0C68-4FAC-AF5A-F4ED40EE191E/L0/001', '0f38820daf328d269ba07c16f746709f8b66f93405c0a118fe8dda82fe99759d', 2025-08-27T17:15:04.220Z, 2025-08-26T16:32:38.061Z, 2025-08-27T17:15:04.220Z, 'VIDEO', false, '0', 'timeline', '62EEC3C0-438B-4BFF-AEA5-80F96817B2AE.MOV' ] } ``` I am down to 593 remaining now (why ever) so something IS happening but since the app is crashing all the time....
Author
Owner

@jkoopmann commented on GitHub (Aug 27, 2025):

Immich_log_2025-08-27T19:15:24.484328.log

There seem to be other errors as well. The remaining files are HEIC, JPG and MOV. So not limited to Live Photos etc.

@jkoopmann commented on GitHub (Aug 27, 2025): [Immich_log_2025-08-27T19:15:24.484328.log](https://github.com/user-attachments/files/22010928/Immich_log_2025-08-27T19.15.24.484328.log) There seem to be other errors as well. The remaining files are HEIC, JPG and MOV. So not limited to Live Photos etc.
Author
Owner

@jkoopmann commented on GitHub (Aug 29, 2025):

It is still stuck and new photos are not being synced. Is there anything I can do to assist you guys? Otherwise I will have to switch of beta timeline once again to get things working.

@jkoopmann commented on GitHub (Aug 29, 2025): It is still stuck and new photos are not being synced. Is there anything I can do to assist you guys? Otherwise I will have to switch of beta timeline once again to get things working.
Author
Owner

@alextran1502 commented on GitHub (Aug 29, 2025):

@jkoopmann can you share the screen capture of the backup page when you toggle the backup button?

@alextran1502 commented on GitHub (Aug 29, 2025): @jkoopmann can you share the screen capture of the backup page when you toggle the backup button?
Author
Owner

@jkoopmann commented on GitHub (Aug 29, 2025):

Image

Sure

@jkoopmann commented on GitHub (Aug 29, 2025): ![Image](https://github.com/user-attachments/assets/9f2e4eb4-5ca1-439d-ab33-e1858e10615b) Sure
Author
Owner

@alextran1502 commented on GitHub (Aug 29, 2025):

@jkoopmann If you toggle that button, what happens? can you do a screen recording?

Additionally, do you mind get the screen capture for the Beta Sync Stats in the App Setting page?

@alextran1502 commented on GitHub (Aug 29, 2025): @jkoopmann If you toggle that button, what happens? can you do a screen recording? Additionally, do you mind get the screen capture for the Beta Sync Stats in the App Setting page?
Author
Owner

@jkoopmann commented on GitHub (Aug 29, 2025):

@jkoopmann If you toggle that button, what happens? can you do a screen recording?

Short answer: Nothing just the button toggle.

https://github.com/user-attachments/assets/b87a51ab-ed8f-4ba8-ac75-efbc56c660a1

Additionally, do you mind get the screen capture for the Beta Sync Stats in the App Setting page?

Image

@jkoopmann commented on GitHub (Aug 29, 2025): > [@jkoopmann](https://github.com/jkoopmann) If you toggle that button, what happens? can you do a screen recording? Short answer: Nothing just the button toggle. https://github.com/user-attachments/assets/b87a51ab-ed8f-4ba8-ac75-efbc56c660a1 > > Additionally, do you mind get the screen capture for the Beta Sync Stats in the App Setting page? ![Image](https://github.com/user-attachments/assets/d911f1e7-edff-420c-a5fc-f6264594aa2d)
Author
Owner

@jkoopmann commented on GitHub (Aug 29, 2025):

The hash seems to have consistent problems with getting/hashing two files.

@jkoopmann commented on GitHub (Aug 29, 2025): The hash seems to have consistent problems with getting/hashing two files.
Author
Owner

@Jacajack commented on GitHub (Aug 29, 2025):

Unfortunately uploading photos with the beta timelime still doesn't work for me on v1.140.

I also tried disabling the automatic backup and uploading photos one by one. This also fails in the same manner.

@Jacajack commented on GitHub (Aug 29, 2025): Unfortunately uploading photos with the beta timelime still doesn't work for me on v1.140. I also tried disabling the automatic backup and uploading photos one by one. This also fails in the same manner.
Author
Owner

@alextran1502 commented on GitHub (Aug 29, 2025):

@jkoopmann and @Jacajack do you guys by chance a developer and can help with running a debug build in your environment?

I am still not sure what could possibly block the queuing process here

@alextran1502 commented on GitHub (Aug 29, 2025): @jkoopmann and @Jacajack do you guys by chance a developer and can help with running a debug build in your environment? I am still not sure what could possibly block the queuing process here
Author
Owner

@jkoopmann commented on GitHub (Aug 29, 2025):

Developer in general yes. iOS so far no. But a quick learner. We can “meet” online and you can talk me through it. Willing to help.

@jkoopmann commented on GitHub (Aug 29, 2025): Developer in general yes. iOS so far no. But a quick learner. We can “meet” online and you can talk me through it. Willing to help.
Author
Owner

@Jacajack commented on GitHub (Aug 29, 2025):

I am and can give it a go when I'm back home from holiday in a couple of days. I don't have much experience with mobile and web development, so that will be something new.

@Jacajack commented on GitHub (Aug 29, 2025): I am and can give it a go when I'm back home from holiday in a couple of days. I don't have much experience with mobile and web development, so that will be something new.
Author
Owner

@alextran1502 commented on GitHub (Aug 29, 2025):

@jkoopmann Sounds great, do you have a mac? you can ping me on Discord and we can figure out a time

@alextran1502 commented on GitHub (Aug 29, 2025): @jkoopmann Sounds great, do you have a mac? you can ping me on Discord and we can figure out a time
Author
Owner

@jkoopmann commented on GitHub (Aug 29, 2025):

Yes. I am busy tomorrow. We will figure something out. How can I reach you on discord?

@jkoopmann commented on GitHub (Aug 29, 2025): Yes. I am busy tomorrow. We will figure something out. How can I reach you on discord?
Author
Owner

@d1egoaz commented on GitHub (Sep 2, 2025):

I disabled iCloud Photos sync and ran the rehash asset job. However, Immich was stuck in a loop, re-uploading existing files. So, I tapped "Clear File Cache" and "Reset SQLite Database" on iOS, killed the app. After that, it hashed the files again and uploaded the expected ones. Now I'm fully synced, I don't need to re-enable iCloud Photos since I'm moving away from it.

@d1egoaz commented on GitHub (Sep 2, 2025): I disabled iCloud Photos sync and ran the rehash asset job. However, Immich was stuck in a loop, re-uploading existing files. So, I tapped "Clear File Cache" and "Reset SQLite Database" on iOS, killed the app. After that, it hashed the files again and uploaded the expected ones. Now I'm fully synced, I don't need to re-enable iCloud Photos since I'm moving away from it.
Author
Owner

@Jacajack commented on GitHub (Sep 4, 2025):

@jkoopmann, @alextran1502 Did you manage to meet and figure something out?

@Jacajack commented on GitHub (Sep 4, 2025): @jkoopmann, @alextran1502 Did you manage to meet and figure something out?
Author
Owner

@jkoopmann commented on GitHub (Sep 4, 2025):

Not yet but this is mainly because in order to debug this the debug-build hash to rehash my >20k files which is now in day 3 of hopefully 3. :-) Once that is finished Alex will take a look!

@jkoopmann commented on GitHub (Sep 4, 2025): Not yet but this is mainly because in order to debug this the debug-build hash to rehash my >20k files which is now in day 3 of hopefully 3. :-) Once that is finished Alex will take a look!
Author
Owner

@jkoopmann commented on GitHub (Sep 12, 2025):

Ok. Not sure if I can recall everything that happened... But some insights.

During hashing I frequently (in the log) encountered problems that immich was not able to access iCloud Photos with error 1005. I am pretty sure what happens: When you ask the iCloud Photos API for a fully copy (which is needed for hashing) this is downloaded and stored in a temporary area. This one can fill up. Whenever I encountered the 1005 scenario it came in batches. When I went into Photos the account button was yellow and when I clicked this it told me that there is no space left on the device (which was bullshit since there were 115 GB free). After a few moments this disappeared. The account tab was ok and when I restarted hashing in immich all was fine until it started again. This seems to be a limitation in the API stack and as much as this sucks there is nothing @alextran1502 will be able to do about it. Maybe they can react to it better.

Suggestion: When you encounter a certain amount of 1005 errors... Halt the process. let it rest. Then restart it.

Once all of that was finished two out of >20k images remained unwashed. I was able to identify them on my Photos app on the iPhone. The were "white". When I hit the white (i) on the lower right an error said that it was not able to load the "higher quality version" of the file. When I looked at the details there was a yellow cloud icon. When I hit that a hidden album popped up with two images. Album name "Hochladen nicht möglich" (Not able to upload). I deleted those two files. Then all was hashed.

So I enabled backup mode. Things started to queue and upload then the app crashed with "No space left on device". Turns out that the library used for uploading is running into a similar "temporary storage fills up" error. The library is not catching this and the crash occurs. The guys will file a PR with the library developer so that the error is catchable. Looks as if the concurrency leads to too many big files being downloaded into the temporary storage which fills up and then causes the crash. "We" (meaning the brilliant @alextran1502 telling me what to do) removed the concurrency and the remaining images started uploading. However: That also eventually stalled and did not finish. It ran into "no space left" once and then in some batches I was able to upload all but ONE image. I was able to identify that image.

Asset 6E7D02B3-2DFD-4F0D-8A3B-E77AC0020578/L0/001 does not have a Live-Photo

So I looked it up in Photos App and while the still image was there the live part was not and there was a warning error in Photos as well (essentially also stating that the higher quality version of the file was not loadable). Killed that one. And now: ALL IS WORKING (for the time being). :-)

So there are quite some learnings and I am very confident that @alextran1502 and @shenlong-tanwen will figure out ways to deal with this. Ideas include: config options for reducing/disabling concurrency. Catching and handling of no space left on device (in hashing and once possible in backup/sync). If hashing/backup encounters iCloud issue at least show the images with Name/date and make it possible for the user to find then in Photos and nuke them.

I am extremely grateful to @alextran1502 and @shenlong-tanwen who took an enormous amount of time to help me debug this!

@jkoopmann commented on GitHub (Sep 12, 2025): Ok. Not sure if I can recall everything that happened... But some insights. During hashing I frequently (in the log) encountered problems that immich was not able to access iCloud Photos with error 1005. I am pretty sure what happens: When you ask the iCloud Photos API for a fully copy (which is needed for hashing) this is downloaded and stored in a temporary area. This one can fill up. Whenever I encountered the 1005 scenario it came in batches. When I went into Photos the account button was yellow and when I clicked this it told me that there is no space left on the device (which was bullshit since there were 115 GB free). After a few moments this disappeared. The account tab was ok and when I restarted hashing in immich all was fine until it started again. This seems to be a limitation in the API stack and as much as this sucks there is nothing @alextran1502 will be able to do about it. Maybe they can react to it better. Suggestion: When you encounter a certain amount of 1005 errors... Halt the process. let it rest. Then restart it. Once all of that was finished two out of >20k images remained unwashed. I was able to identify them on my Photos app on the iPhone. The were "white". When I hit the white (i) on the lower right an error said that it was not able to load the "higher quality version" of the file. When I looked at the details there was a yellow cloud icon. When I hit that a hidden album popped up with two images. Album name "Hochladen nicht möglich" (Not able to upload). I deleted those two files. Then all was hashed. So I enabled backup mode. Things started to queue and upload then the app crashed with "No space left on device". Turns out that the library used for uploading is running into a similar "temporary storage fills up" error. The library is not catching this and the crash occurs. The guys will file a PR with the library developer so that the error is catchable. Looks as if the concurrency leads to too many big files being downloaded into the temporary storage which fills up and then causes the crash. "We" (meaning the brilliant @alextran1502 telling me what to do) removed the concurrency and the remaining images started uploading. However: That also eventually stalled and did not finish. It ran into "no space left" once and then in some batches I was able to upload all but ONE image. I was able to identify that image. Asset 6E7D02B3-2DFD-4F0D-8A3B-E77AC0020578/L0/001 does not have a Live-Photo So I looked it up in Photos App and while the still image was there the live part was not and there was a warning error in Photos as well (essentially also stating that the higher quality version of the file was not loadable). Killed that one. And now: ALL IS WORKING (for the time being). :-) So there are quite some learnings and I am very confident that @alextran1502 and @shenlong-tanwen will figure out ways to deal with this. Ideas include: config options for reducing/disabling concurrency. Catching and handling of no space left on device (in hashing and once possible in backup/sync). If hashing/backup encounters iCloud issue at least show the images with Name/date and make it possible for the user to find then in Photos and nuke them. I am extremely grateful to @alextran1502 and @shenlong-tanwen who took an enormous amount of time to help me debug this!
Author
Owner

@Magnus987 commented on GitHub (Sep 12, 2025):

@jkoopmann @alextran1502 @shenlong-tanwen Very Interesting how a “small bug” turned into much more ;)
I managed to hash all my assets after some hours of display time in Immich, now the beta works perfectly fine for me.
Huge thanks for taking the time to look in to that and identify these issues 🫡

@Magnus987 commented on GitHub (Sep 12, 2025): @jkoopmann @alextran1502 @shenlong-tanwen Very Interesting how a “small bug” turned into much more ;) I managed to hash all my assets after some hours of display time in Immich, now the beta works perfectly fine for me. Huge thanks for taking the time to look in to that and identify these issues 🫡
Author
Owner

@azomDev commented on GitHub (Sep 21, 2025):

I am getting the same problem on android (GrapheneOS). I made an initial backup of all the images. Then if I go back on the app later (closing it also does this), it makes the amount of remainder assets to the total assets on my phone, even thought I see all the images on the web app. I am getting "Error processing stream" and "Error in runInIsolateGentle for remote-sync" errors quite often. This seems to be pretty close to what others here are having as problems although I am on android, so let me know if this is the right place or not and I can try giving more log details and stuff.

@azomDev commented on GitHub (Sep 21, 2025): I am getting the same problem on android (GrapheneOS). I made an initial backup of all the images. Then if I go back on the app later (closing it also does this), it makes the amount of remainder assets to the total assets on my phone, even thought I see all the images on the web app. I am getting "Error processing stream" and "Error in runInIsolateGentle for remote-sync" errors quite often. This seems to be pretty close to what others here are having as problems although I am on android, so let me know if this is the right place or not and I can try giving more log details and stuff.
Author
Owner

@alextran1502 commented on GitHub (Sep 21, 2025):

@azomDev When you run into that error, it is likely that you server is out of date. Please check and update your server

@alextran1502 commented on GitHub (Sep 21, 2025): @azomDev When you run into that error, it is likely that you server is out of date. Please check and update your server
Author
Owner

@azomDev commented on GitHub (Sep 21, 2025):

Thanks for the help! I am using nixos-stable so I'm a few versions behind so that would explain why. (v135-ish vs v142-ish)

I added package = pkgs.unstable.immich; to the immich service and it now works using the latest server version.

If anyone on nixos wants to make this works, I'm pretty sure you also need this at the top of the config file

{ config, pkgs, ... }:
# This is for unstable (including "let" and "in")
let
	# Add the unstable channel declaratively
	unstableTarball =
		fetchTarball
			"https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz";
in
{
	# This is for unstable
	nixpkgs.config = {
		packageOverrides = pkgs: {
			unstable = import unstableTarball {
				config = config.nixpkgs.config;
			};
		};
	};
...

EDIT: I added the problem and solution directly on the nixos wiki so it's easier for others to fix it

@azomDev commented on GitHub (Sep 21, 2025): Thanks for the help! I am using nixos-stable so I'm a few versions behind so that would explain why. (v135-ish vs v142-ish) I added `package = pkgs.unstable.immich;` to the immich service and it now works using the latest server version. If anyone on nixos wants to make this works, I'm pretty sure you also need this at the top of the config file ``` { config, pkgs, ... }: # This is for unstable (including "let" and "in") let # Add the unstable channel declaratively unstableTarball = fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz"; in { # This is for unstable nixpkgs.config = { packageOverrides = pkgs: { unstable = import unstableTarball { config = config.nixpkgs.config; }; }; }; ... ``` EDIT: I added the problem and solution directly on the nixos wiki so it's easier for others to fix it
Author
Owner

@Jacajack commented on GitHub (Sep 23, 2025):

Just for the record, I'm still having issues with 1.143.1, but I assume this is expected. I reinstalled the app on my phone and let it re-hash all the 13k images. It correctly hashed everything and identified the 360 most recent photos that need syncing, but fails to upload them.

On the plus side, I can see that in the newer versions the background upload service wakes up quite often and attempts to sync. It's just that the upload fails.

@Jacajack commented on GitHub (Sep 23, 2025): Just for the record, I'm still having issues with 1.143.1, but I assume this is expected. I reinstalled the app on my phone and let it re-hash all the 13k images. It correctly hashed everything and identified the 360 most recent photos that need syncing, but fails to upload them. On the plus side, I can see that in the newer versions the background upload service wakes up quite often and attempts to sync. It's just that the upload fails.
Author
Owner

@shenlong-tanwen commented on GitHub (Sep 23, 2025):

It's just that the upload fails.

Anything on the logs as to why the upload is failing? Also, Can you try manually uploading one such failing asset?

@shenlong-tanwen commented on GitHub (Sep 23, 2025): > It's just that the upload fails. Anything on the logs as to why the upload is failing? Also, Can you try manually uploading one such failing asset?
Author
Owner

@Jacajack commented on GitHub (Sep 23, 2025):

@shenlong-tanwen Unfortunately I can't see any errors in the FINE logs. The assets just become red in the upload queue and report 0B size. Doesn't matter if they are queued by the automatic sync or manual upload.

If you like, maybe we can discuss/troubleshoot this on Discord to not further overload this thread here?

@Jacajack commented on GitHub (Sep 23, 2025): @shenlong-tanwen Unfortunately I can't see any errors in the FINE logs. The assets just become red in the upload queue and report 0B size. Doesn't matter if they are queued by the automatic sync or manual upload. If you like, maybe we can discuss/troubleshoot this on Discord to not further overload this thread here?
Author
Owner

@shenlong-tanwen commented on GitHub (Sep 23, 2025):

If you like, maybe we can discuss/troubleshoot this on Discord to not further overload this thread here?

That'd be great. Please open a help desk thread there and ping me

@shenlong-tanwen commented on GitHub (Sep 23, 2025): > If you like, maybe we can discuss/troubleshoot this on Discord to not further overload this thread here? That'd be great. Please open a help desk thread there and ping me
Author
Owner

@maslanypotwor commented on GitHub (Oct 3, 2025):

I had some time to test and stare at uploads/hashing today and I noticed an interesting pattern.

Each time I open Immich, for some reason it tries to rehash ~1400 assets. It happens every time when I cold start the app.
I noticed that all of those assets comes from the shared albums. It looks as if it thinks that the assets changed while they did not (hence the rehash is usually fast (but not always)).

There seems to be some issue with how assets that are inside of the shared albums are handled and Immich thinks that they changed while that's not true.

PS. Side note - I do not use storage optimization on iOS though AFAIU, shared albums, by design, can be not downloaded till you try to look at them for the first time (in the native gallery) and they can be also deleted from local phone storage (!) if you have not enough space (regardless of your storage optimization setting). I guess this might be worth mentioning.

@maslanypotwor commented on GitHub (Oct 3, 2025): I had some time to test and stare at uploads/hashing today and I noticed an interesting pattern. Each time I open Immich, for some reason it tries to rehash ~1400 assets. It happens every time when I cold start the app. I noticed that all of those assets comes from the shared albums. It looks as if it thinks that the assets changed while they did not (hence the rehash is usually fast (but not always)). There seems to be some issue with how assets that are inside of the shared albums are handled and Immich thinks that they changed while that's not true. PS. Side note - I do not use storage optimization on iOS though AFAIU, shared albums, by design, can be not downloaded till you try to look at them for the first time (in the native gallery) and they can be also deleted from local phone storage (!) if you have not enough space (regardless of your storage optimization setting). I guess this might be worth mentioning.
Author
Owner

@maslanypotwor commented on GitHub (Oct 15, 2025):

Just for the record - on v2.1.0 the behavior I described in the previous comment still works the same. Every time I open the app and (new thing i noticed I think) there is some new assets to be uploaded, all assets from shared albums are being hashed again (and upon realization that this hash is already on the server - dropped from uploading).

@maslanypotwor commented on GitHub (Oct 15, 2025): Just for the record - on v2.1.0 the behavior I described in the previous comment still works the same. Every time I open the app and (new thing i noticed I think) there is some new assets to be uploaded, all assets from shared albums are being hashed again (and upon realization that this hash is already on the server - dropped from uploading).
Author
Owner

@maslanypotwor commented on GitHub (Nov 24, 2025):

I think this is it - there seems to be no issue with iCloud assets in shared albums in version 2.3.1!
I tested it couple of times by relaunching the app last couple of hours and every time it worked as expected (refreshing assets but never trying to rehash those from shared albums).

I hope it will stay that way :)

Thank you Dev Team!!!

@maslanypotwor commented on GitHub (Nov 24, 2025): I think this is it - there seems to be no issue with iCloud assets in shared albums in version 2.3.1! I tested it couple of times by relaunching the app last couple of hours and every time it worked as expected (refreshing assets but never trying to rehash those from shared albums). I hope it will stay that way :) Thank you Dev Team!!!
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/immich#6141
No description provided.