immich-app / immich

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

Error generating thumbnails in v1.118 #13465

Closed AFumi39 closed 1 hour ago

AFumi39 commented 1 day ago

The bug

Uploading jpeg images, immich v1.118.0 can't generate the preview images (thumbnails, etc), but the downloaded image is working. See the attachment IMG-20220103-WA0014

The OS that Immich Server is running on

Docker

Version of Immich Server

V1.118.0

Version of Immich Mobile App

1.117.0

Platform with the issue

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}
    # 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:rw
      - /etc/localtime:/etc/localtime:ro
      - /volume1/docker/immich-app/ext-library:/mnt/media/ext-library:rw
    env_file:
      - stack.env
    ports:
      - 2283:2283
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false
    labels:
      - 'wud.tag.include=v^([0-9]\d*)\.([0-9]\d*)\.([0-9]\d*)$$'
      - 'wud.watch.digest=true'
      - 'wud.link.template=https://github.com/immich-app/immich/releases/tag/$${raw}'
      - 'wud.display.name=Immich server'
      - 'wud.display.icon=mdi:image-multiple-outline'

  immich-machine-learning:
    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}
    # 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, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache:rw
    env_file:
      - stack.env
    restart: always
    healthcheck:
      disable: false
    labels:
      - 'wud.watch=false'

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
    labels:
      - 'wud.watch=false'

  database:
    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:rw
    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
    labels:
      - 'wud.watch=false'

  backup:
    container_name: immich_db_dumper
    image: prodrigestivill/postgres-backup-local:14
    restart: always
    env_file:
      - stack.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:
      - /volume1/backup/immich_db_backup:/db_dumps:rw
    depends_on:
      - database
    labels:
      - 'wud.watch=false'

volumes:
  model-cache:

Your .env content

UPLOAD_LOCATION=/volume1/docker/immich-app/library
DB_DATA_LOCATION=/volume1/docker/immich-app/postgres
TZ=Europe/Rome
IMMICH_VERSION=v1.118.0
DB_PASSWORD=***
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Reproduction steps

1. 2. 3. ...

Relevant log output

st] 7  - 10/15/2024, 4:33:48 PM   ERROR [Microservices:JobService] Unable to run job handler (thumbnailGeneration/generate-thumbnails): Error: VipsJpeg: ./lib/jpegli/decode_marker.cc:285: DHT marker: no Huffman table found

[Nest] 7  - 10/15/2024, 4:33:48 PM   ERROR [Microservices:JobService] Error: VipsJpeg: ./lib/jpegli/decode_marker.cc:285: DHT marker: no Huffman table found

    at Sharp.toBuffer (/usr/src/app/node_modules/sharp/lib/output.js:163:17)

    at MediaRepository.decodeImage (/usr/src/app/dist/repositories/media.repository.js:57:68)

    at MediaService.generateImageThumbnails (/usr/src/app/dist/services/media.service.js:153:63)

    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

    at async MediaService.handleGenerateThumbnails (/usr/src/app/dist/services/media.service.js:101:25)

    at async /usr/src/app/dist/services/job.service.js:163:36

    at async Worker.processJob (/usr/src/app/node_modules/bullmq/dist/cjs/classes/worker.js:394:28)

    at async Worker.retryIfFailed (/usr/src/app/node_modules/bullmq/dist/cjs/classes/worker.js:581:24)

[Nest] 7  - 10/15/2024, 4:33:48 PM   ERROR [Microservices:JobService] Object:

{

  "id": "e35ef6e8-4b48-4441-83b3-a36613c54e77"

}

Additional information

No response

Blotz commented 1 day ago

I'm also getting this error. Here are some sample images which cause the error.

images.zip

marderbot commented 1 day ago

Seems to happen with all or nearly all images received using Whatsapp, maybe because Whatsapp strips all metadata including huffman tables and the new library doesn't use a default one in that case?

Blotz commented 1 day ago

I dont think its all whatsapp images. I managed to upload some images without issue

AFumi39 commented 1 day ago

I think this can be the reason. Even if some WA images are processed correctly

marderbot commented 1 day ago

you have the option to send HD images or no in whatsapp, maybe that affects the metadata they use?

AFumi39 commented 1 day ago

I just checked, but no, that's not the case 🤔 2 similar images sent by the same person, in the same day: 1 ok, the other one no preview

nesalkiN commented 1 day ago

I see the same and the asset I looked at happened to be from Whatsapp.

[Nest] 7  - 10/15/2024, 4:25:08 PM   ERROR [Microservices:JobService] Unable to run job handler (thumbnailGeneration/generate-thumbnails): Error: VipsJpeg: ./lib/jpegli/decode_marker.cc:285: DHT marker: no Huffman table found
[Nest] 7  - 10/15/2024, 4:25:08 PM   ERROR [Microservices:JobService] Error: VipsJpeg: ./lib/jpegli/decode_marker.cc:285: DHT marker: no Huffman table found
    at Sharp.toBuffer (/usr/src/app/node_modules/sharp/lib/output.js:163:17)
    at MediaRepository.decodeImage (/usr/src/app/dist/repositories/media.repository.js:57:68)
    at MediaService.generateImageThumbnails (/usr/src/app/dist/services/media.service.js:153:63)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async MediaService.handleGenerateThumbnails (/usr/src/app/dist/services/media.service.js:101:25)
    at async /usr/src/app/dist/services/job.service.js:163:36
    at async Worker.processJob (/usr/src/app/node_modules/bullmq/dist/cjs/classes/worker.js:394:28)
    at async Worker.retryIfFailed (/usr/src/app/node_modules/bullmq/dist/cjs/classes/worker.js:581:24)
mertalev commented 1 day ago

This is technically out of spec for JPEG and the jpegli decoder doesn't handle it (unlike other decoders). I've raised the issue upstream and will proceed based on their response.

Xsoft32 commented 1 day ago

Same issue here, all whatsapp images and some other ones are showing "error loading image" both in the thumbnail and in the actual preview, downloading the image or opening from the server volume work fine. Trying to reload the thumbnail gives the same log error.

chriswa81 commented 1 day ago

Exactly the same for me!

simoaica commented 1 day ago

Same for me

chriswa81 commented 7 hours ago

Could the error be fixed? Is the bug fix included in the next update?

Thanks.

sammyke007 commented 6 hours ago

Ok, I was already wondering why my rerun of all thumbnails kept throwing errors and a lot of faces lost their thumbnail in the people section.

mertalev commented 6 hours ago

I patched jpegli with a fix and tested with the sample images here. We'll make a hotfix for it.

mertalev commented 1 hour ago

Should be fixed as of 1.118.2

chriswa81 commented 1 hour ago

I cannot confirm this. Some photos can now be loaded, but not all of them. IMG_4140

mertalev commented 55 minutes ago

You should run thumbnail generation in the Jobs page.

chriswa81 commented 52 minutes ago

You should run thumbnail generation in the Jobs page.

Has already been carried out several times. Unfortunately without success!

mertalev commented 35 minutes ago

Can you share the logs?