Inconsistency between iOS and Web app for people picture #8151

Closed
opened 2026-02-05 13:33:49 +03:00 by OVERLORD · 5 comments
Owner

Originally created by @corsac-s on GitHub (Dec 28, 2025).

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

  • Yes

The bug

I'm using Immich mainly with an external library, with a bit less than 100 000 photos (with some duplicates, not sure how they are counted).

The face detection and clustering went fine and I have few people with around 10 000 recognized picture. Unfortunately, I have some examples where there are inconsistencies between the web app and the iOS app.

For one people, I have

  • on the web app, 9857 pictures from 2010 to 2025
  • on the iOS app, 9930 pictures from 2004 to 2025

All the pictures from 2004-2009 (and some others) are wrong detection which I think I've manually removed from the web app. That removal apparently weren't propagated to the iOS app (there might be other inconsistencies but I'm not able to identify them yet in the midst of those thousands photos)

The OS that Immich Server is running on

Debian

Version of Immich Server

v2.4.1

Version of Immich Mobile App

v2.4.1

Platform with the issue

  • Server
  • Web
  • Mobile

Device make and model

iPhone 13 mini

Your docker-compose.yml content

#
# WARNING: To install Immich, follow our guide: https://docs.immich.app/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}:/data
      - /etc/localtime:/etc/localtime:ro
      - /srv/photos:/srv/photos:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: 2


  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://docs.immich.app/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
    deploy:
      resources:
        limits:
          cpus: 2
          memory: 4G

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
    deploy:
      resources:
        limits:
          memory: 1G

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
    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
    shm_size: 128mb
    restart: always
    deploy:
      resources:
        limits:
          memory: 1G

volumes:
  model-cache:

Your .env content

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

# The location where your uploaded files are stored
UPLOAD_LOCATION=/srv/immich/library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=/srv/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=Etc/UTC
TZ=Europe/Paris

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

# 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=<redacted>

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

Reproduction steps

...

Relevant log output


Additional information

No response

Originally created by @corsac-s on GitHub (Dec 28, 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'm using Immich mainly with an external library, with a bit less than 100 000 photos (with some duplicates, not sure how they are counted). The face detection and clustering went fine and I have few people with around 10 000 recognized picture. Unfortunately, I have some examples where there are inconsistencies between the web app and the iOS app. For one people, I have - on the web app, 9857 pictures from 2010 to 2025 - on the iOS app, 9930 pictures from 2004 to 2025 All the pictures from 2004-2009 (and some others) are wrong detection which I think I've manually removed from the web app. That removal apparently weren't propagated to the iOS app (there might be other inconsistencies but I'm not able to identify them yet in the midst of those thousands photos) ### The OS that Immich Server is running on Debian ### Version of Immich Server v2.4.1 ### Version of Immich Mobile App v2.4.1 ### Platform with the issue - [ ] Server - [x] Web - [x] Mobile ### Device make and model iPhone 13 mini ### Your docker-compose.yml content ```YAML # # WARNING: To install Immich, follow our guide: https://docs.immich.app/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}:/data - /etc/localtime:/etc/localtime:ro - /srv/photos:/srv/photos:ro env_file: - .env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false deploy: resources: limits: memory: 2G cpus: 2 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://docs.immich.app/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 deploy: resources: limits: cpus: 2 memory: 4G redis: container_name: immich_redis image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571 healthcheck: test: redis-cli ping || exit 1 restart: always deploy: resources: limits: memory: 1G database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23 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 shm_size: 128mb restart: always deploy: resources: limits: memory: 1G volumes: model-cache: ``` ### Your .env content ```Shell # You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=/srv/immich/library # The location where your database files are stored. Network shares are not supported for the database DB_DATA_LOCATION=/srv/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=Etc/UTC TZ=Europe/Paris # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=v2 # 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=<redacted> # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich ``` ### Reproduction steps 1. 2. 3. ... ### Relevant log output ```shell ``` ### Additional information _No response_
Author
Owner

@bo0tzz commented on GitHub (Dec 28, 2025):

If you log out and back in on the app, does that fix it? How are you connected to the server?

@bo0tzz commented on GitHub (Dec 28, 2025): If you log out and back in on the app, does that fix it? How are you connected to the server?
Author
Owner

@corsac-s commented on GitHub (Dec 28, 2025):

If you log out and back in on the app, does that fix it? How are you connected to the server?

Tried to log out and back in and it didn't change anything. I'll retry with a reset of the SQLite database as well.

I'm connected through a reverse proxy (HAproxy, in case it matters).

@corsac-s commented on GitHub (Dec 28, 2025): > If you log out and back in on the app, does that fix it? How are you connected to the server? Tried to log out and back in and it didn't change anything. I'll retry with a reset of the SQLite database as well. I'm connected through a reverse proxy (HAproxy, in case it matters).
Author
Owner

@corsac-s commented on GitHub (Dec 28, 2025):

Reseting the SQLite database didn't change anything. I've tried to switch to the direct/internal URL without RP and it didn't fix the issue. I now have 10 018 items for that people (there are face jobs running at the moment though) but they still have those pictures from 2004-2009.

The web view now has 9945 items for that people (so +15 from last time, likely because of the running jobs)

@corsac-s commented on GitHub (Dec 28, 2025): Reseting the SQLite database didn't change anything. I've tried to switch to the direct/internal URL without RP and it didn't fix the issue. I now have 10 018 items for that people (there are face jobs running at the moment though) but they still have those pictures from 2004-2009. The web view now has 9945 items for that people (so +15 from last time, likely because of the running jobs)
Author
Owner

@corsac-s commented on GitHub (Dec 31, 2025):

I've tried using the API to check statistics. For that people:

  • immich web says 9639 photos
  • api says 9639 photos
  • iOS application says 9710 photos

So it looks like a synchronization issue or something. I've checked the application log (deleting them, closing the application, starting it, letting it do its sync) and there's nothing apparent in the log (no warning/error). I have a Remote Sync completed in 4754ms message which seems successful.

@bo0tzz if you need more information don't hesitate to ask.

@corsac-s commented on GitHub (Dec 31, 2025): I've tried using the API to check statistics. For that people: - immich web says 9639 photos - api says 9639 photos - iOS application says 9710 photos So it looks like a synchronization issue or something. I've checked the application log (deleting them, closing the application, starting it, letting it do its sync) and there's nothing apparent in the log (no warning/error). I have a `Remote Sync completed in 4754ms` message which seems successful. @bo0tzz if you need more information don't hesitate to ask.
Author
Owner

@alextran1502 commented on GitHub (Jan 1, 2026):

on iOS it also reports the video files of the MotionPhotos and LivePhotos, that is where the difference coming from

@alextran1502 commented on GitHub (Jan 1, 2026): on iOS it also reports the video files of the MotionPhotos and LivePhotos, that is where the difference coming from
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#8151