[Android] Inconsistent assets figure between mobile and server (sync problem) #6021

Closed
opened 2026-02-20 04:07:28 -05:00 by deekerman · 1 comment
Owner

Originally created by @ngdangtu-vn on GitHub (Jul 22, 2025).

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

  • Yes

The bug

I accidentally deleted a local photo (during syncing) then quickly restore the file. The mobile stats are 448 total assets but 449 backup assets. This seems wrong as I expect the number should be equalled after completed sync. So I try again and the ratio between total and backup a the same. However the value of both are decrease by 1, 447 total assets and 448 backup assets (see the screenshot in additional info section). Then I double checked on web version and I saw 449 assets total.

I suspect something went wrong in the server, see the log at time 2025-07-22 06:56:42.392157.

The OS that Immich Server is running on

Linux hostname 6.12.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26) aarch64 GNU/Linux

Version of Immich Server

v1.135.3

Version of Immich Mobile App

v1.135.3

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# 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: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD'
    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=$P_DB/immich/gallery

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=$P_DB/immich/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=Asia/Ho_Chi_Minh

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

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=**************************

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

Reproduction steps

  1. open immich app
  2. select album to backup
  3. do foreground backup
  4. attempt to remove a photo (in immich app)
    a. view a photo
    b. select the trash can icon
    c. cancel the remove action
    d. go to trash can section
    e. restore the remove file (which it should not be here since the action support to be cancelled)
  5. Do the step 4 again

Relevant log output

Query failed : {
  durationMs: 13.25985400006175,
  error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum"
      at ErrorResponse (/usr/src/app/node_modules/postgres/cjs/src/connection.js:790:26)
      at handle (/usr/src/app/node_modules/postgres/cjs/src/connection.js:476:6)
      at Socket.data (/usr/src/app/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)=(20097e3a-aa2b-47a1-9150-3ee91648d012, \\x98a52d2503a2e8c2565af0d52771c94f353636be) already exists.',
    schema_name: 'public',
    table_name: 'assets',
    constraint_name: 'UQ_assets_owner_checksum',
    file: 'nbtinsert.c',
    line: '663',
    routine: '_bt_check_unique'
  },
  sql: 'insert into "assets" ("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: [
    '20097e3a-aa2b-47a1-9150-3ee91648d012',
    null,
    <Buffer 98 a5 2d 25 03 a2 e8 c2 56 5a f0 d5 27 71 c9 4f 35 36 36 be>,
    'upload/upload/20097e3a-aa2b-47a1-9150-3ee91648d012/46/f8/46f8cd17-5d4e-4b18-b900-3f6ea7ab5b77.jpg',
    '1000004211',
    '2d50f8e0e541db0844a4121f4552038e5310e6f46b4ad8ed20868c3d19ee66ed',
    2022-12-18T08:31:12.000Z,
    2022-12-18T08:31:12.000Z,
    2022-12-18T08:31:12.000Z,
    'IMAGE',
    false,
    '0:00:00.000000',
    'timeline',
    '20221218_153111.jpg'
  ]
}
2025-07-23 00:48:11.750880 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-23 00:48:11.174862 | info     | BackupNotifier       | Found 23 local albums |
2025-07-23 00:48:08.708859 | info     | AssetNotifier        | Load assets: 590ms |
2025-07-23 00:48:08.708755 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-23 00:48:08.708740 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-23 00:48:08.688960 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-23 00:48:08.683223 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-23 00:48:08.683203 | info     | AlbumService         | Found 23 device albums |
2025-07-23 00:48:05.615799 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-23 00:48:05.141293 | severe   | ImmichErrorLogger    | PlatformDispatcher - Catch all | PlatformException(-3, No Widget found with Name com.immich.widget.random. Argument 'name' must be the same as your AppWidgetProvider you wish to update, java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random
	at java.lang.Class.classForName(Native Method)
	at java.lang.Class.forName(Class.java:597)
	at java.lang.Class.forName(Class.java:502)
	at U4.a.onMethodCall(Unknown Source:590)
	at h2.c.j(Unknown Source:20)
	at c5.c.run(Unknown Source:127)
	at android.os.Handler.handleCallback(Handler.java:958)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:230)
	at android.os.Looper.loop(Looper.java:319)
	at android.app.ActivityThread.main(ActivityThread.java:8919)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random
	... 14 more
, 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      WidgetRepository.refresh (package:immich_mobile/repositories/widget.repository.dart:17)
<asynchronous suspension>
#3      WidgetService.refreshWidgets (package:immich_mobile/services/widget.service.dart:37)
<asynchronous suspension>

2025-07-23 00:48:04.953104 | info     | BackupNotifier       | Found 23 local albums |
2025-07-23 00:48:03.775577 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-23 00:48:03.521186 | info     | AssetNotifier        | Load assets: 1180ms |
2025-07-23 00:48:03.521108 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-23 00:48:03.521088 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-23 00:48:03.379571 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-23 00:48:03.256965 | info     | SyncService          | Upserted 448 assets into the DB |
2025-07-23 00:48:03.231697 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-23 00:48:03.231669 | info     | AlbumService         | Found 23 device albums |
2025-07-23 00:48:02.912231 | info     | SyncService          | Upserted 1 assets into the DB |
2025-07-23 00:48:02.900578 | info     | BackupNotifier       | Found 23 local albums |
2025-07-23 00:48:02.297030 | info     | BackupNotifier       | [_resumeBackup] Start back up |
2025-07-22 09:24:47.918535 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 09:24:47.319834 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 09:24:41.956037 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 09:24:41.119607 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 09:24:39.083689 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 09:24:38.237428 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 09:24:35.762896 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 09:24:35.420495 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 09:24:35.005627 | info     | BackupNotifier       | [_resumeBackup] Start back up |
2025-07-22 07:10:41.459886 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 07:10:40.756429 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 07:09:20.831547 | info     | AssetNotifier        | Load assets: 808ms |
2025-07-22 07:09:20.831454 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 07:09:20.831441 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:09:20.816681 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:09:20.816066 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:09:20.816053 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:09:20.534297 | info     | SyncService          | Upserted 1 assets into the DB |
2025-07-22 07:09:10.821558 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: Null check operator used on a null value
Library: image resource service
Context: Instance of 'ErrorDescription' |
#0      ImageCache._checkCacheSize (package:flutter/src/painting/image_cache.dart:504)
#1      ImageCache._touch (package:flutter/src/painting/image_cache.dart:291)
#2      ImageCache.putIfAbsent.listener (package:flutter/src/painting/image_cache.dart:417)
#3      ImageStreamCompleter.setImage (package:flutter/src/painting/image_stream.dart:767)
#4      MultiFrameImageStreamCompleter._emitFrame (package:flutter/src/painting/image_stream.dart:1136)
#5      MultiImageStreamCompleter._decodeNextFrameAndSchedule (package:cached_network_image/src/image_provider/multi_image_stream_completer.dart:154)
<asynchronous suspension>

2025-07-22 07:09:09.951603 | info     | AssetNotifier        | Load assets: 847ms |
2025-07-22 07:09:09.951452 | info     | AlbumService         | Syncing completed. Changes: true |
2025-07-22 07:09:09.951430 | info     | SyncService          | Synced changes of local album Test bak-album to DB |
2025-07-22 07:09:09.932414 | info     | SyncService          | Linking assets to add with existing from db. 0 existing, 0 to update |
2025-07-22 07:09:09.932378 | info     | SyncService          | Syncing local album Test bak-album. 0 assets to add, 448 to update, 0 to delete |
2025-07-22 07:09:09.784885 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:09:09.784871 | info     | SyncService          | Local album Test bak-album has changed. Syncing... |
2025-07-22 07:09:09.770917 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:09:09.770057 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:09:09.770029 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:09:09.565815 | info     | SyncService          | Upserted 1 assets into the DB |
2025-07-22 07:08:47.363563 | info     | AssetNotifier        | Load assets: 732ms |
2025-07-22 07:08:47.363418 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 07:08:47.363396 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:08:47.340913 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:08:47.338570 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:08:47.338557 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:08:47.095183 | info     | SyncService          | Upserted 1 assets into the DB |
2025-07-22 07:08:36.108903 | info     | AssetNotifier        | Load assets: 1097ms |
2025-07-22 07:08:36.108806 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 07:08:36.108791 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:08:36.092207 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:08:36.091364 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:08:36.091351 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:08:35.804346 | info     | SyncService          | Upserted 3 assets into the DB |
2025-07-22 07:08:12.652315 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 07:08:12.165422 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 07:08:04.860458 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 07:08:03.948217 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 07:05:45.691264 | info     | AssetNotifier        | Load assets: 925ms |
2025-07-22 07:05:45.691126 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 07:05:45.691110 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:05:45.668846 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:05:45.667843 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:05:45.667832 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:05:45.407508 | info     | SyncService          | Upserted 58 assets into the DB |
2025-07-22 07:05:44.255403 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 07:05:43.909089 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 07:05:43.721392 | info     | BackupNotifier       | [_resumeBackup] Start back up |
2025-07-22 07:03:11.653515 | info     | AssetNotifier        | Load assets: 1087ms |
2025-07-22 07:03:11.653383 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 07:03:11.653368 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:03:11.635138 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:03:11.634571 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:03:11.634560 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:03:11.387361 | info     | SyncService          | Upserted 8 assets into the DB |
2025-07-22 07:02:48.142802 | info     | AssetNotifier        | Load assets: 1244ms |
2025-07-22 07:02:48.142652 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 07:02:48.142632 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 07:02:48.109483 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 07:02:48.108440 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 07:02:48.108420 | info     | AlbumService         | Found 23 device albums |
2025-07-22 07:02:47.770765 | info     | SyncService          | Upserted 138 assets into the DB |
2025-07-22 06:58:59.143921 | info     | AssetNotifier        | Load assets: 1472ms |
2025-07-22 06:58:59.143825 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 06:58:59.143811 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 06:58:59.126349 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 06:58:59.125727 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 06:58:59.125715 | info     | AlbumService         | Found 23 device albums |
2025-07-22 06:58:58.898496 | info     | SyncService          | Upserted 141 assets into the DB |
2025-07-22 06:58:54.257752 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 06:58:53.707425 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 06:58:53.503879 | info     | BackupNotifier       | [_resumeBackup] Start back up |
2025-07-22 06:56:42.392157 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/3d49b37e-ff66-43cf-9215-9494a00bae75/thumbnail
Library: image resource service
Context: Instance of 'ErrorDescription' |

2025-07-22 06:56:42.376207 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/b81fc48f-81bd-4873-95ad-7cb851b46398/thumbnail
Library: image resource service
Context: Instance of 'ErrorDescription' |

2025-07-22 06:56:38.911314 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/3d49b37e-ff66-43cf-9215-9494a00bae75/thumbnail
Library: image resource service
Context: Instance of 'ErrorDescription' |

2025-07-22 06:56:38.878557 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/b81fc48f-81bd-4873-95ad-7cb851b46398/thumbnail
Library: image resource service
Context: Instance of 'ErrorDescription' |

2025-07-22 06:56:35.775391 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/b81fc48f-81bd-4873-95ad-7cb851b46398/thumbnail
Library: image resource service
Context: Instance of 'ErrorDescription' |

2025-07-22 06:56:35.731103 | severe   | ImmichErrorLogger    | FlutterError - Catch all | Instance of 'FlutterErrorDetails'
Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/3d49b37e-ff66-43cf-9215-9494a00bae75/thumbnail
Library: image resource service
Context: Instance of 'ErrorDescription' |

2025-07-22 06:56:15.929738 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 06:56:15.929713 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 06:56:15.890933 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 06:56:15.889596 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 06:56:15.889472 | info     | AlbumService         | Found 23 device albums |
2025-07-22 06:56:08.625399 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 06:56:07.841064 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 06:55:10.676999 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 06:55:10.304633 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 06:55:10.120964 | info     | BackupNotifier       | [_resumeBackup] Start back up |
2025-07-22 06:52:09.796498 | severe   | ImmichErrorLogger    | PlatformDispatcher - Catch all | PlatformException(-3, No Widget found with Name com.immich.widget.random. Argument 'name' must be the same as your AppWidgetProvider you wish to update, java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random
	at java.lang.Class.classForName(Native Method)
	at java.lang.Class.forName(Class.java:597)
	at java.lang.Class.forName(Class.java:502)
	at U4.a.onMethodCall(Unknown Source:590)
	at h2.c.j(Unknown Source:20)
	at c5.c.run(Unknown Source:127)
	at android.os.Handler.handleCallback(Handler.java:958)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:230)
	at android.os.Looper.loop(Looper.java:319)
	at android.app.ActivityThread.main(ActivityThread.java:8919)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random
	... 14 more
, 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      WidgetRepository.refresh (package:immich_mobile/repositories/widget.repository.dart:17)
<asynchronous suspension>
#3      WidgetService.refreshWidgets (package:immich_mobile/services/widget.service.dart:37)
<asynchronous suspension>

2025-07-22 06:52:07.700362 | info     | BackupNotifier       | _getBackupAlbumsInfo: Found 23 available albums |
2025-07-22 06:52:07.527014 | info     | AssetNotifier        | Load assets: 588ms |
2025-07-22 06:52:07.526896 | info     | AlbumService         | Syncing completed. Changes: false |
2025-07-22 06:52:07.526870 | info     | SyncService          | Local album Test bak-album has not changed. Skipping sync. |
2025-07-22 06:52:07.508016 | info     | SyncService          | Syncing a local album to DB: Test bak-album |
2025-07-22 06:52:07.507411 | info     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2025-07-22 06:52:07.507383 | info     | AlbumService         | Found 23 device albums |
2025-07-22 06:52:07.087347 | info     | BackupNotifier       | Found 23 local albums |
2025-07-22 06:52:06.900587 | info     | BackupNotifier       | [_resumeBackup] Start back up |

Additional information

This is the mobile screenshot on the second trashing a photo: the second trashing a photo
But the figure is completely off on the web version: Image

About the server information

  • Hosting is a raspberry pi 4 with 8GB ram and 60GB SSD
  • It was installed following the docker guide (recommend one): https://immich.app/docs/install/docker-compose
  • The whole installation process was done through SSH local network and no error was found
Originally created by @ngdangtu-vn on GitHub (Jul 22, 2025). ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug I accidentally deleted a local photo (during syncing) then quickly restore the file. The mobile stats are 448 total assets but 449 backup assets. This seems wrong as I expect the number should be equalled after completed sync. So I try again and the ratio between total and backup a the same. However the value of both are decrease by 1, 447 total assets and 448 backup assets (see the screenshot in additional info section). Then I double checked on web version and I saw 449 assets total. I suspect something went wrong in the server, see the log at time `2025-07-22 06:56:42.392157`. ### The OS that Immich Server is running on Linux hostname 6.12.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26) aarch64 GNU/Linux ### Version of Immich Server v1.135.3 ### Version of Immich Mobile App v1.135.3 ### Platform with the issue - [x] Server - [ ] Web - [x] Mobile <details> <summary> <h3>Your docker-compose.yml content</h3> </summary> ```YAML # # WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose # # 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: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177 healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs # DB_STORAGE_TYPE: 'HDD' 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: ``` </details> ### 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=$P_DB/immich/gallery # The location where your database files are stored. Network shares are not supported for the database DB_DATA_LOCATION=$P_DB/immich/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=Asia/Ho_Chi_Minh # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password # Please use only the characters `A-Za-z0-9`, without special characters or spaces DB_PASSWORD=************************** # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich ``` ### Reproduction steps 1. open immich app 2. select album to backup 3. do foreground backup 4. attempt to remove a photo (in immich app) a. view a photo b. select the trash can icon c. cancel the remove action d. go to trash can section e. restore the remove file (which it should not be here since the action support to be cancelled) 5. Do the step 4 again <details> <summary> <h3>Relevant log output</h3> </summary> ```shell Query failed : { durationMs: 13.25985400006175, error: PostgresError: duplicate key value violates unique constraint "UQ_assets_owner_checksum" at ErrorResponse (/usr/src/app/node_modules/postgres/cjs/src/connection.js:790:26) at handle (/usr/src/app/node_modules/postgres/cjs/src/connection.js:476:6) at Socket.data (/usr/src/app/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)=(20097e3a-aa2b-47a1-9150-3ee91648d012, \\x98a52d2503a2e8c2565af0d52771c94f353636be) already exists.', schema_name: 'public', table_name: 'assets', constraint_name: 'UQ_assets_owner_checksum', file: 'nbtinsert.c', line: '663', routine: '_bt_check_unique' }, sql: 'insert into "assets" ("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: [ '20097e3a-aa2b-47a1-9150-3ee91648d012', null, <Buffer 98 a5 2d 25 03 a2 e8 c2 56 5a f0 d5 27 71 c9 4f 35 36 36 be>, 'upload/upload/20097e3a-aa2b-47a1-9150-3ee91648d012/46/f8/46f8cd17-5d4e-4b18-b900-3f6ea7ab5b77.jpg', '1000004211', '2d50f8e0e541db0844a4121f4552038e5310e6f46b4ad8ed20868c3d19ee66ed', 2022-12-18T08:31:12.000Z, 2022-12-18T08:31:12.000Z, 2022-12-18T08:31:12.000Z, 'IMAGE', false, '0:00:00.000000', 'timeline', '20221218_153111.jpg' ] } ``` ```shell 2025-07-23 00:48:11.750880 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-23 00:48:11.174862 | info | BackupNotifier | Found 23 local albums | 2025-07-23 00:48:08.708859 | info | AssetNotifier | Load assets: 590ms | 2025-07-23 00:48:08.708755 | info | AlbumService | Syncing completed. Changes: false | 2025-07-23 00:48:08.708740 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-23 00:48:08.688960 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-23 00:48:08.683223 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-23 00:48:08.683203 | info | AlbumService | Found 23 device albums | 2025-07-23 00:48:05.615799 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-23 00:48:05.141293 | severe | ImmichErrorLogger | PlatformDispatcher - Catch all | PlatformException(-3, No Widget found with Name com.immich.widget.random. Argument 'name' must be the same as your AppWidgetProvider you wish to update, java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:597) at java.lang.Class.forName(Class.java:502) at U4.a.onMethodCall(Unknown Source:590) at h2.c.j(Unknown Source:20) at c5.c.run(Unknown Source:127) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:230) at android.os.Looper.loop(Looper.java:319) at android.app.ActivityThread.main(ActivityThread.java:8919) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) Caused by: java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random ... 14 more , 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 WidgetRepository.refresh (package:immich_mobile/repositories/widget.repository.dart:17) <asynchronous suspension> #3 WidgetService.refreshWidgets (package:immich_mobile/services/widget.service.dart:37) <asynchronous suspension> 2025-07-23 00:48:04.953104 | info | BackupNotifier | Found 23 local albums | 2025-07-23 00:48:03.775577 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-23 00:48:03.521186 | info | AssetNotifier | Load assets: 1180ms | 2025-07-23 00:48:03.521108 | info | AlbumService | Syncing completed. Changes: false | 2025-07-23 00:48:03.521088 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-23 00:48:03.379571 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-23 00:48:03.256965 | info | SyncService | Upserted 448 assets into the DB | 2025-07-23 00:48:03.231697 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-23 00:48:03.231669 | info | AlbumService | Found 23 device albums | 2025-07-23 00:48:02.912231 | info | SyncService | Upserted 1 assets into the DB | 2025-07-23 00:48:02.900578 | info | BackupNotifier | Found 23 local albums | 2025-07-23 00:48:02.297030 | info | BackupNotifier | [_resumeBackup] Start back up | 2025-07-22 09:24:47.918535 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 09:24:47.319834 | info | BackupNotifier | Found 23 local albums | 2025-07-22 09:24:41.956037 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 09:24:41.119607 | info | BackupNotifier | Found 23 local albums | 2025-07-22 09:24:39.083689 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 09:24:38.237428 | info | BackupNotifier | Found 23 local albums | 2025-07-22 09:24:35.762896 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 09:24:35.420495 | info | BackupNotifier | Found 23 local albums | 2025-07-22 09:24:35.005627 | info | BackupNotifier | [_resumeBackup] Start back up | 2025-07-22 07:10:41.459886 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 07:10:40.756429 | info | BackupNotifier | Found 23 local albums | 2025-07-22 07:09:20.831547 | info | AssetNotifier | Load assets: 808ms | 2025-07-22 07:09:20.831454 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 07:09:20.831441 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:09:20.816681 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:09:20.816066 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:09:20.816053 | info | AlbumService | Found 23 device albums | 2025-07-22 07:09:20.534297 | info | SyncService | Upserted 1 assets into the DB | 2025-07-22 07:09:10.821558 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: Null check operator used on a null value Library: image resource service Context: Instance of 'ErrorDescription' | #0 ImageCache._checkCacheSize (package:flutter/src/painting/image_cache.dart:504) #1 ImageCache._touch (package:flutter/src/painting/image_cache.dart:291) #2 ImageCache.putIfAbsent.listener (package:flutter/src/painting/image_cache.dart:417) #3 ImageStreamCompleter.setImage (package:flutter/src/painting/image_stream.dart:767) #4 MultiFrameImageStreamCompleter._emitFrame (package:flutter/src/painting/image_stream.dart:1136) #5 MultiImageStreamCompleter._decodeNextFrameAndSchedule (package:cached_network_image/src/image_provider/multi_image_stream_completer.dart:154) <asynchronous suspension> 2025-07-22 07:09:09.951603 | info | AssetNotifier | Load assets: 847ms | 2025-07-22 07:09:09.951452 | info | AlbumService | Syncing completed. Changes: true | 2025-07-22 07:09:09.951430 | info | SyncService | Synced changes of local album Test bak-album to DB | 2025-07-22 07:09:09.932414 | info | SyncService | Linking assets to add with existing from db. 0 existing, 0 to update | 2025-07-22 07:09:09.932378 | info | SyncService | Syncing local album Test bak-album. 0 assets to add, 448 to update, 0 to delete | 2025-07-22 07:09:09.784885 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:09:09.784871 | info | SyncService | Local album Test bak-album has changed. Syncing... | 2025-07-22 07:09:09.770917 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:09:09.770057 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:09:09.770029 | info | AlbumService | Found 23 device albums | 2025-07-22 07:09:09.565815 | info | SyncService | Upserted 1 assets into the DB | 2025-07-22 07:08:47.363563 | info | AssetNotifier | Load assets: 732ms | 2025-07-22 07:08:47.363418 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 07:08:47.363396 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:08:47.340913 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:08:47.338570 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:08:47.338557 | info | AlbumService | Found 23 device albums | 2025-07-22 07:08:47.095183 | info | SyncService | Upserted 1 assets into the DB | 2025-07-22 07:08:36.108903 | info | AssetNotifier | Load assets: 1097ms | 2025-07-22 07:08:36.108806 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 07:08:36.108791 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:08:36.092207 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:08:36.091364 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:08:36.091351 | info | AlbumService | Found 23 device albums | 2025-07-22 07:08:35.804346 | info | SyncService | Upserted 3 assets into the DB | 2025-07-22 07:08:12.652315 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 07:08:12.165422 | info | BackupNotifier | Found 23 local albums | 2025-07-22 07:08:04.860458 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 07:08:03.948217 | info | BackupNotifier | Found 23 local albums | 2025-07-22 07:05:45.691264 | info | AssetNotifier | Load assets: 925ms | 2025-07-22 07:05:45.691126 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 07:05:45.691110 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:05:45.668846 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:05:45.667843 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:05:45.667832 | info | AlbumService | Found 23 device albums | 2025-07-22 07:05:45.407508 | info | SyncService | Upserted 58 assets into the DB | 2025-07-22 07:05:44.255403 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 07:05:43.909089 | info | BackupNotifier | Found 23 local albums | 2025-07-22 07:05:43.721392 | info | BackupNotifier | [_resumeBackup] Start back up | 2025-07-22 07:03:11.653515 | info | AssetNotifier | Load assets: 1087ms | 2025-07-22 07:03:11.653383 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 07:03:11.653368 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:03:11.635138 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:03:11.634571 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:03:11.634560 | info | AlbumService | Found 23 device albums | 2025-07-22 07:03:11.387361 | info | SyncService | Upserted 8 assets into the DB | 2025-07-22 07:02:48.142802 | info | AssetNotifier | Load assets: 1244ms | 2025-07-22 07:02:48.142652 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 07:02:48.142632 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 07:02:48.109483 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 07:02:48.108440 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 07:02:48.108420 | info | AlbumService | Found 23 device albums | 2025-07-22 07:02:47.770765 | info | SyncService | Upserted 138 assets into the DB | 2025-07-22 06:58:59.143921 | info | AssetNotifier | Load assets: 1472ms | 2025-07-22 06:58:59.143825 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 06:58:59.143811 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 06:58:59.126349 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 06:58:59.125727 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 06:58:59.125715 | info | AlbumService | Found 23 device albums | 2025-07-22 06:58:58.898496 | info | SyncService | Upserted 141 assets into the DB | 2025-07-22 06:58:54.257752 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 06:58:53.707425 | info | BackupNotifier | Found 23 local albums | 2025-07-22 06:58:53.503879 | info | BackupNotifier | [_resumeBackup] Start back up | 2025-07-22 06:56:42.392157 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/3d49b37e-ff66-43cf-9215-9494a00bae75/thumbnail Library: image resource service Context: Instance of 'ErrorDescription' | 2025-07-22 06:56:42.376207 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/b81fc48f-81bd-4873-95ad-7cb851b46398/thumbnail Library: image resource service Context: Instance of 'ErrorDescription' | 2025-07-22 06:56:38.911314 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/3d49b37e-ff66-43cf-9215-9494a00bae75/thumbnail Library: image resource service Context: Instance of 'ErrorDescription' | 2025-07-22 06:56:38.878557 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/b81fc48f-81bd-4873-95ad-7cb851b46398/thumbnail Library: image resource service Context: Instance of 'ErrorDescription' | 2025-07-22 06:56:35.775391 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/b81fc48f-81bd-4873-95ad-7cb851b46398/thumbnail Library: image resource service Context: Instance of 'ErrorDescription' | 2025-07-22 06:56:35.731103 | severe | ImmichErrorLogger | FlutterError - Catch all | Instance of 'FlutterErrorDetails' Exception: HttpException: Invalid statusCode: 404, uri = http://abc.xyz.jkl.123:2283/api/assets/3d49b37e-ff66-43cf-9215-9494a00bae75/thumbnail Library: image resource service Context: Instance of 'ErrorDescription' | 2025-07-22 06:56:15.929738 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 06:56:15.929713 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 06:56:15.890933 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 06:56:15.889596 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 06:56:15.889472 | info | AlbumService | Found 23 device albums | 2025-07-22 06:56:08.625399 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 06:56:07.841064 | info | BackupNotifier | Found 23 local albums | 2025-07-22 06:55:10.676999 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 06:55:10.304633 | info | BackupNotifier | Found 23 local albums | 2025-07-22 06:55:10.120964 | info | BackupNotifier | [_resumeBackup] Start back up | 2025-07-22 06:52:09.796498 | severe | ImmichErrorLogger | PlatformDispatcher - Catch all | PlatformException(-3, No Widget found with Name com.immich.widget.random. Argument 'name' must be the same as your AppWidgetProvider you wish to update, java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:597) at java.lang.Class.forName(Class.java:502) at U4.a.onMethodCall(Unknown Source:590) at h2.c.j(Unknown Source:20) at c5.c.run(Unknown Source:127) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:230) at android.os.Looper.loop(Looper.java:319) at android.app.ActivityThread.main(ActivityThread.java:8919) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) Caused by: java.lang.ClassNotFoundException: app.alextran.immich.com.immich.widget.random ... 14 more , 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 WidgetRepository.refresh (package:immich_mobile/repositories/widget.repository.dart:17) <asynchronous suspension> #3 WidgetService.refreshWidgets (package:immich_mobile/services/widget.service.dart:37) <asynchronous suspension> 2025-07-22 06:52:07.700362 | info | BackupNotifier | _getBackupAlbumsInfo: Found 23 available albums | 2025-07-22 06:52:07.527014 | info | AssetNotifier | Load assets: 588ms | 2025-07-22 06:52:07.526896 | info | AlbumService | Syncing completed. Changes: false | 2025-07-22 06:52:07.526870 | info | SyncService | Local album Test bak-album has not changed. Skipping sync. | 2025-07-22 06:52:07.508016 | info | SyncService | Syncing a local album to DB: Test bak-album | 2025-07-22 06:52:07.507411 | info | AlbumService | 'Recents' is not selected, keeping only selected albums | 2025-07-22 06:52:07.507383 | info | AlbumService | Found 23 device albums | 2025-07-22 06:52:07.087347 | info | BackupNotifier | Found 23 local albums | 2025-07-22 06:52:06.900587 | info | BackupNotifier | [_resumeBackup] Start back up | ``` </details> ### Additional information <details> <summary> This is the mobile screenshot on the second trashing a photo: </summary> <img width="320" alt="the second trashing a photo" src="https://github.com/user-attachments/assets/49e78ba5-7476-469d-92d0-4217c0a5282f" /> </details> <details> <summary> But the figure is completely off on the web version: </summary> <img width="2880" height="1602" alt="Image" src="https://github.com/user-attachments/assets/44fcae67-d459-4cd6-b924-684d584f80d1" /> </details> **About the server information** - Hosting is a raspberry pi 4 with 8GB ram and 60GB SSD - It was installed following the docker guide (recommend one): https://immich.app/docs/install/docker-compose - The whole installation process was done through SSH local network and no error was found
Author
Owner

@mmomjian commented on GitHub (Jul 22, 2025):

The backup counts in the app do not perfectly match, so this is currently a known issue. #2567

@mmomjian commented on GitHub (Jul 22, 2025): The backup counts in the app do not perfectly match, so this is currently a known issue. #2567
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#6021
No description provided.