immich-app / immich

High performance self-hosted photo and video management solution.
https://immich.app
GNU Affero General Public License v3.0
53.21k stars 2.82k forks source link

Large HEIC Image causes app to crash on load #12580

Open Gofven opened 2 months ago

Gofven commented 2 months ago

The bug

After adding a HEIC image at 200 MP resolution, it causes subsequent freezes & crashes when opening the image

The OS that Immich Server is running on

Arch linux 2024.09.01

Version of Immich Server

1.114.0

Version of Immich Mobile App

1.114.0

Platform with the issue

Your docker-compose.yml content

name: immich

services:
  immich-server:
    user: 1000:1000
    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:
      # 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:3001
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    user: 1000:1000
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] 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: cuda # set to one of [armnn, cuda, openvino, openvino-wsl] 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/redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    user: 1000:1000
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    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
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
    restart: always

  backup:
    user: 1000:1000
    container_name: immich_db_dumper
    image: prodrigestivill/postgres-backup-local:14
    restart: always
    env_file:
      - .env
    environment:
      POSTGRES_HOST: database
      POSTGRES_CLUSTER: 'TRUE'
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      SCHEDULE: "@daily"
      POSTGRES_EXTRA_OPTS: '--clean --if-exists'
      BACKUP_DIR: /db_dumps
    volumes:
      - ./db_dumps:/db_dumps
    depends_on:
      - database

volumes:
  model-cache:

Your .env content

UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
TZ=Europe/Stockholm
IMMICH_VERSION=release
DB_PASSWORD=example
DB_USERNAME=example
DB_DATABASE_NAME=example

Reproduction steps

  1. Start the app
  2. Open the large image, an image next to the large image works aswell
  3. Freeze and frequent crashes

Relevant log output

2024-09-11 20:34:50.642106 | INFO     | AssetNotifier        | Load assets: 970ms |
2024-09-11 20:34:50.642054 | INFO     | AlbumService         | Syncing completed. Changes: false |
2024-09-11 20:34:50.600286 | INFO     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2024-09-11 20:34:50.600237 | INFO     | AlbumService         | Found 11 device albums |
2024-09-11 20:34:50.471471 | INFO     | AlbumService         | Syncing completed. Changes: false |
2024-09-11 20:34:49.807202 | INFO     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2024-09-11 20:34:49.807070 | INFO     | AlbumService         | Found 11 device albums |
2024-09-11 20:34:49.719474 | INFO     | BackupNotifier       | _getBackupAlbumsInfo: Found 11 available albums |
2024-09-11 20:34:49.700141 | INFO     | BackupNotifier       | Found 11 local albums |
2024-09-11 20:34:49.622051 | INFO     | BackupNotifier       | [_resumeBackup] Start back up |
2024-09-11 20:34:10.832739 | INFO     | AssetNotifier        | Load assets: 3206ms |
2024-09-11 20:34:10.832679 | INFO     | AlbumService         | Syncing completed. Changes: false |
2024-09-11 20:34:10.805543 | INFO     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2024-09-11 20:34:10.805482 | INFO     | AlbumService         | Found 11 device albums |
2024-09-11 20:34:10.714366 | INFO     | AlbumService         | Syncing completed. Changes: false |
2024-09-11 20:34:07.737604 | INFO     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2024-09-11 20:34:07.737541 | INFO     | AlbumService         | Found 11 device albums |
2024-09-11 20:34:07.675151 | INFO     | BackupNotifier       | _getBackupAlbumsInfo: Found 11 available albums |
2024-09-11 20:34:07.672099 | INFO     | BackupNotifier       | Found 11 local albums |
2024-09-11 20:34:07.635395 | INFO     | BackupNotifier       | [_resumeBackup] Start back up |
2024-09-11 20:33:58.658005 | INFO     | AssetNotifier        | Load assets: 377ms |
2024-09-11 20:33:58.657947 | INFO     | AlbumService         | Syncing completed. Changes: false |
2024-09-11 20:33:58.595887 | INFO     | AlbumService         | 'Recents' is not selected, keeping only selected albums |
2024-09-11 20:33:58.595835 | INFO     | AlbumService         | Found 11 device albums |
2024-09-11 20:33:58.367132 | INFO     | BackupNotifier       | _getBackupAlbumsInfo: Found 11 available albums |
2024-09-11 20:33:58.340277 | INFO     | BackupNotifier       | Found 11 local albums |
2024-09-11 20:33:58.309798 | INFO     | BackupNotifier       | [_resumeBackup] Start back up |

Additional information

Sample file (zip due to github limitation): 20240911_193836.zip

alextran1502 commented 2 months ago

Can you attach a sample file so we can easily test?

Gofven commented 2 months ago

Can you attach a sample file so we can easily test?

Naturally c: I added the sample file to the bottom of the issue!

alextran1502 commented 2 months ago

@Gofven thanks 😁

Gofven commented 2 months ago

I can additionally note that this issue occurs solely when the advanced option "Prefer remote images" is disabled.