BUG: machine learning remote server, "Cannot Identify Image File" #4446

Closed
opened 2026-02-05 10:29:19 +03:00 by OVERLORD · 8 comments
Owner

Originally created by @jordanlambrecht on GitHub (Sep 30, 2024).

The bug

When sending an image for Smart Search to my remote machine for ML (nvidia GTX 4800ti), immich-ml throws the error below for each attempted image.

The OS that Immich Server is running on

Server: Docker Desktop for Mac, ML: Docker Desktop w/ WSL2 & Ubuntu VM

Version of Immich Server

v1.116.2@8bbcd5c31

Version of Immich Mobile App

N/A

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

Remote Machine Learning container:

services:
  immich-machine-learning:
    container_name: immich_machine_learning
    restart: always
    tty: true
    logging:
      driver: json-file
      options:
        tag: "{{.Name}}"
        max-size: "10m"
        max-file: "36"
    image: ghcr.io/immich-app/immich-machine-learning:release-cuda
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities:
                - gpu
    environment:
      IMMICH_LOG_LEVEL: verbose
      TZ: America/Chicago
      MACHINE_LEARNING_WORKER_TIMEOUT: 1600
      MACHINE_LEARNING_PRELOAD__CLIP: ViT-H-14-378-quickgelu__dfn5b
      MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION: buffalo_l
      MACHINE_LEARNING_MODEL_TTL: 0
      MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S: 15
    volumes:
      - model-cache:/cache:rw
      - /var/run/docker.sock:/var/run/docker.sock
    extra_hosts:
      - host.docker.internal:host-gateway
    ports:
      - 3003:3003
      - 3001:3001
    networks:
      network_universal:
    labels:
      com.centurylinklabs.watchtower.enable: "true"
      autoheal: true
      diun.enable: true
    healthcheck:
      test: ["CMD", "bash", "-c", "exec 5<>/dev/tcp/127.0.0.1/3003"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  model-cache:

Immich Server:

---
name: immich

# ╔══════════════════════════════════════════════════════════╗
# ║                                                          ║
# ║                      Immich  Server                      ║
# ║                                                          ║
# ╚══════════════════════════════════════════════════════════╝

# ════════════════════════════════════
#          ANCHORS/FRAGMENTS
# ════════════════════════════════════
x-common-config: &common-config
  restart: always
  tty: true
  stdin_open: true
  logging:
    driver: json-file
    options:
      tag: "{{.Name}}"
      max-size: "10m"
      max-file: "36"
  env_file:
    - .env

x-common-labels: &common-labels
  com.centurylinklabs.watchtower.enable: true
  autoheal: false
  diun.enable: false

x-kuma-labels: &kuma-labels
  kuma.{{ container_name }}-docker.docker.parent_name: "immich"
  kuma.{{ container_name }}-docker.docker.name: "{{ container_name }}"
  kuma.{{ container_name }}-docker.docker.active: true

x-common-env: &common-env
  PUID: ${PUID}
  PGID: ${PGID}
  TZ: ${TZ}

x-common-networks: &common-networks
  network_universal:
  network_autokuma:
  default:

# ════════════════════════════════════
#                Services
# ════════════════════════════════════
services:
  # ┌──────────────────────────────────────┐
  # |            Immich Server             |
  # └──────────────────────────────────────┘
  immich:
    <<: *common-config
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      # - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - ./tmp:/tmp:rw
      - ./immich/config:/config:rw
      - ${STORAGE_LOCATION}/photos:/usr/src/app/upload:rw
      - ${STORAGE_LOCATION}/thumbs:/usr/src/app/upload/thumbs:rw
      - ${STORAGE_LOCATION}/encoded-videos:/usr/src/app/upload/encoded-video:rw
      - ${STORAGE_LOCATION}/profiles:/usr/src/app/upload/profile:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro # TODO: needed?
      - /etc/localtime:/etc/localtime:to # TODO: redundant?
    environment:
      <<: *common-env
      IMMICH_METRICS: true
      IMMICH_HOST_METRICS: true
      IMMICH_IO_METRICS: true
      IMMICH_JOB_METRICS: true
      IMMICH_LOG_LEVEL: verbose
      DB_HOSTNAME: ${DB_HOSTNAME}
      DB_DATABASE_NAME: ${DB_DATABASE_NAME}
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
      REDIS_HOSTNAME: ${REDIS_HOSTNAME}
      REDIS_PORT: 6379
    ports:
      - <redacted>:3001
      - <redacted>:8081
      - <redacted>:8082
    depends_on:
      - redis
      - database
    labels:
      <<: [*common-labels, *kuma-labels]
    networks:
      <<: *common-networks
    healthcheck:
      test:
        [
          "CMD-SHELL",
          'curl --fail http://immich_server:3001/api/server-info/ping | grep -q ''{"res":"pong"}'' || exit 1',
        ]
      interval: 1m
      timeout: 10s
      retries: 3
      disable: false

  # ┌──────────────────────────────────────┐
  # |                Redis                 |
  # └──────────────────────────────────────┘
  redis:
    <<: *common-config
    image: redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e
    container_name: immich_redis
    environment:
      <<: *common-env
    ports:
      - 6379:6379 # TODO: remove and test, rely on stack network only
    volumes:
      - ./redis_data:/data
      - ./tmp:/tmp
    networks:
      <<: *common-networks
    labels:
      <<: *common-labels
    healthcheck:
      test: redis-cli ping || exit 1

  # ┌──────────────────────────────────────┐
  # |               Postgres               |
  # └──────────────────────────────────────┘
  database:
    <<: *common-config
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    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",
      ]
    environment:
      <<: *common-env
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: "--data-checksums"
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data:rw
      - /etc/localtime:/etc/localtime:to # TODO: redundant?
    ports:
      - ${DB_PORT}:5432
    labels:
      <<: *common-labels
    networks:
      <<: *common-networks
    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

# ------------------------end of services------------------------ #


# ════════════════════════════════════
#               NETWORKS
# ════════════════════════════════════
networks:
  default:
    name: network_default_immich
  network_universal:
    external: true
  network_autokuma:
    external: true

Your .env content

#  Immich Server .env

STORAGE_LOCATION=/Volumes/<REDACTED>
IMMICH_VERSION=release

DB_DATA_LOCATION=./pgdata
PROFILE_LOCATION=/Volumes/<REDACTED>
DB_PASSWORD=<REDACTED>

DB_HOSTNAME=immich_postgres
DB_USERNAME=immich
DB_DATABASE_NAME=immich
DB_PORT=5432

REDIS_HOSTNAME=immich_redis

TZ=America/Chicago
PUID=10000
PGID=10000
UMASK=002

Reproduction steps

  1. Immich Server is running on my primary docker machine via Docker Desktop for Mac
  2. Immich ML is running on my PC via WSL2, Ubuntu VM, and Docker Desktop
  3. Connection is stable
  4. Using ViT-H-14-378-quickgelu__dfn5b for the clip
  5. Error happens when the server attempts to send a file for smart search recognition. The connection is stable and communication happens. Error repeats for every attempted image sent.

Relevant log output

[09/30/24 09:51:29] ERROR    Exception in ASGI application

                             ╭─────── Traceback (most recent call last) ───────╮
                             │ /usr/src/app/main.py:147 in predict             │
                             │                                                 │
                             │   144 │   text: str | None = Form(default=None) │
                             │   145 ) -> Any:                                 │
                             │   146if image is not None:                 │
                             │ ❱ 147 │   │   inputs: Image | str = await run(l │
                             │   148elif text is not None:                │
                             │   149 │   │   inputs = text                     │
                             │   150else:                                 │
                             │                                                 │
                             │ ╭────────────────── locals ───────────────────╮ │
                             │ │ entries = (                                 │ │
                             │ │           │   [                             │ │
                             │ │           │   │   {                         │ │
                             │ │           │   │   │   'name':               │ │
                             │ │           'ViT-H-14-378-quickgelu__dfn5b',  │ │
                             │ │           │   │   │   'task': 'clip',       │ │
                             │ │           │   │   │   'type': 'visual',     │ │
                             │ │           │   │   │   'options': {}         │ │
                             │ │           │   │   }                         │ │
                             │ │           │   ],                            │ │
                             │ │           │   []                            │ │
                             │ │           )                                 │ │
                             │ │   image = b''                               │ │
                             │ │    text = None                              │ │
                             │ ╰─────────────────────────────────────────────╯ │
                             │                                                 │
                             │ /usr/src/app/main.py:188 in run                 │
                             │                                                 │
                             │   185if thread_pool is None:               │
                             │   186 │   │   return func(*args, **kwargs)      │
                             │   187partial_func = partial(func, *args, * │
                             │ ❱ 188return await asyncio.get_running_loop │
                             │   189                                           │
                             │   190                                           │
                             │   191 async def load(model: InferenceModel) ->  │
                             │                                                 │
                             │ ╭────────────────── locals ───────────────────╮ │
                             │ │         args = ()                           │ │
                             │ │         func = <function                    │ │
                             │ │                predict.<locals>.<lambda> at │ │
                             │ │                0x7f3c572be980>              │ │
                             │ │       kwargs = {}                           │ │
                             │ │ partial_func = functools.partial(<function  │ │
                             │ │                predict.<locals>.<lambda> at │ │
                             │ │                0x7f3c572be980>)             │ │
                             │ ╰─────────────────────────────────────────────╯ │
                             │                                                 │
                             │ /usr/local/lib/python3.11/concurrent/futures/th │
                             │ read.py:58 in run                               │
                             │                                                 │
                             │ /usr/src/app/main.py:147 in <lambda>            │
                             │                                                 │
                             │   144 │   text: str | None = Form(default=None) │
                             │   145 ) -> Any:                                 │
                             │   146if image is not None:                 │
                             │ ❱ 147 │   │   inputs: Image | str = await run(l │
                             │   148elif text is not None:                │
                             │   149 │   │   inputs = text                     │
                             │   150else:                                 │
                             │                                                 │
                             │ ╭── locals ───╮                                 │
                             │ │ image = b'' │                                 │
                             │ ╰─────────────╯                                 │
                             │                                                 │
                             │ /usr/src/app/models/transforms.py:52 in         │
                             │ decode_pil                                      │
                             │                                                 │
                             │   49 def decode_pil(image_bytes: bytes | IO[byt │
                             │   50if isinstance(image_bytes, Image.Image │
                             │   51 │   │   return image_bytes                 │
                             │ ❱ 52 │   image: Image.Image = Image.open(BytesI │
                             │      bytes) else image_bytes)                   │
                             │   53 │   image.load()                           │
                             │   54if not image.mode == "RGB":            │
                             │   55 │   │   image = image.convert("RGB")       │
                             │                                                 │
                             │ ╭───── locals ──────╮                           │
                             │ │ image_bytes = b'' │                           │
                             │ ╰───────────────────╯                           │
                             │                                                 │
                             │ /opt/venv/lib/python3.11/site-packages/PIL/Imag │
                             │ e.py:3498 in open                               │
                             │                                                 │
                             │   3495for message in warning_messages:     │
                             │   3496 │   │   warnings.warn(message)           │
                             │   3497msg = "cannot identify image file %r │
                             │ ❱ 3498 │   raise UnidentifiedImageError(msg)    │
                             │   3499                                          │
                             │   3500                                          │
                             │   3501 #                                        │
                             │                                                 │
                             │ ╭────────────────── locals ───────────────────╮ │
                             │ │       _open_core = <function                │ │
                             │ │                    open.<locals>._open_core │ │
                             │ │                    at 0x7f3bf2936160>       │ │
                             │ │  checked_formats = [                        │ │
                             │ │                    │   'PNG',               │ │
                             │ │                    │   'BMP',               │ │
                             │ │                    │   'DIB',               │ │
                             │ │                    │   'GIF',               │ │
                             │ │                    │   'JPEG',              │ │
                             │ │                    │   'PPM',               │ │
                             │ │                    │   'BLP',               │ │
                             │ │                    │   'BUFR',              │ │
                             │ │                    │   'CUR',               │ │
                             │ │                    │   'PCX',               │ │
                             │ │                    │   ... +32              │ │
                             │ │                    ]                        │ │
                             │ │     exclusive_fp = False                    │ │
                             │ │         filename = ''                       │ │
                             │ │          formats = [                        │ │
                             │ │                    │   'PNG',               │ │
                             │ │                    │   'BMP',               │ │
                             │ │                    │   'DIB',               │ │
                             │ │                    │   'GIF',               │ │
                             │ │                    │   'JPEG',              │ │
                             │ │                    │   'PPM',               │ │
                             │ │                    │   'BLP',               │ │
                             │ │                    │   'BUFR',              │ │
                             │ │                    │   'CUR',               │ │
                             │ │                    │   'PCX',               │ │
                             │ │                    │   ... +32              │ │
                             │ │                    ]                        │ │
                             │ │               fp = <_io.BytesIO object at   │ │
                             │ │                    0x7f3c572073d0>          │ │
                             │ │               im = None                     │ │
                             │ │             mode = 'r'                      │ │
                             │ │              msg = 'cannot identify image   │ │
                             │ │                    file <_io.BytesIO object │ │
                             │ │                    at 0x7f3c572073d0>'      │ │
                             │ │           prefix = b''                      │ │
                             │ │ warning_messages = []                       │ │
                             │ ╰─────────────────────────────────────────────╯ │
                             ╰─────────────────────────────────────────────────╯
                             UnidentifiedImageError: cannot identify image file
                             <_io.BytesIO object at 0x7f3c572073d0>
[09/30/24 09:51:29] ERROR    Exception in ASGI application

                             ╭─────── Traceback (most recent call last) ───────╮
                             │ /usr/src/app/main.py:147 in predict             │
                             │                                                 │
                             │   144 │   text: str | None = Form(default=None) │
                             │   145 ) -> Any:                                 │
                             │   146 │   if image is not None:                 │
                             │ ❱ 147 │   │   inputs: Image | str = await run(l │
                             │   148 │   elif text is not None:                │
                             │   149 │   │   inputs = text                     │
                             │   150 │   else:                                 │
                             │                                                 │
                             │ ╭────────────────── locals ───────────────────╮ │
                             │ │ entries = (                                 │ │
                             │ │           │   [                             │ │
                             │ │           │   │   {                         │ │
                             │ │           │   │   │   'name':               │ │
                             │ │           'ViT-H-14-378-quickgelu__dfn5b',  │ │
                             │ │           │   │   │   'task': 'clip',       │ │
                             │ │           │   │   │   'type': 'visual',     │ │
                             │ │           │   │   │   'options': {}         │ │
                             │ │           │   │   }                         │ │
                             │ │           │   ],                            │ │
                             │ │           │   []                            │ │
                             │ │           )                                 │ │
                             │ │   image = b''                               │ │
                             │ │    text = None                              │ │
                             │ ╰─────────────────────────────────────────────╯ │
                             │                                                 │
                             │ /usr/src/app/main.py:188 in run                 │
                             │                                                 │
                             │   185 │   if thread_pool is None:               │
                             │   186 │   │   return func(*args, **kwargs)      │
                             │   187 │   partial_func = partial(func, *args, * │
                             │ ❱ 188 │   return await asyncio.get_running_loop │
                             │   189                                           │
                             │   190                                           │
                             │   191 async def load(model: InferenceModel) ->  │
                             │                                                 │
                             │ ╭────────────────── locals ───────────────────╮ │
                             │ │         args = ()                           │ │
                             │ │         func = <function                    │ │
                             │ │                predict.<locals>.<lambda> at │ │
                             │ │                0x7f3ca8679da0>              │ │
                             │ │       kwargs = {}                           │ │
                             │ │ partial_func = functools.partial(<function  │ │
                             │ │                predict.<locals>.<lambda> at │ │
                             │ │                0x7f3ca8679da0>)             │ │
                             │ ╰─────────────────────────────────────────────╯ │
                             │                                                 │
                             │ /usr/local/lib/python3.11/concurrent/futures/th │
                             │ read.py:58 in run                               │
                             │                                                 │
                             │ /usr/src/app/main.py:147 in <lambda>            │
                             │                                                 │
                             │   144 │   text: str | None = Form(default=None) │
                             │   145 ) -> Any:                                 │
                             │   146 │   if image is not None:                 │
                             │ ❱ 147 │   │   inputs: Image | str = await run(l │
                             │   148 │   elif text is not None:                │
                             │   149 │   │   inputs = text                     │
                             │   150 │   else:                                 │
                             │                                                 │
                             │ ╭── locals ───╮                                 │
                             │ │ image = b'' │                                 │
                             │ ╰─────────────╯                                 │
                             │                                                 │
                             │ /usr/src/app/models/transforms.py:52 in         │
                             │ decode_pil                                      │
                             │                                                 │
                             │   49 def decode_pil(image_bytes: bytes | IO[byt │
                             │   50 │   if isinstance(image_bytes, Image.Image │
                             │   51 │   │   return image_bytes                 │
                             │ ❱ 52 │   image: Image.Image = Image.open(BytesI │
                             │      bytes) else image_bytes)                   │
                             │   53 │   image.load()                           │
                             │   54 │   if not image.mode == "RGB":            │
                             │   55 │   │   image = image.convert("RGB")       │
                             │                                                 │
                             │ ╭───── locals ──────╮                           │
                             │ │ image_bytes = b'' │                           │
                             │ ╰───────────────────╯                           │
                             │                                                 │
                             │ /opt/venv/lib/python3.11/site-packages/PIL/Imag │
                             │ e.py:3498 in open                               │
                             │                                                 │
                             │   3495 │   for message in warning_messages:     │
                             │   3496 │   │   warnings.warn(message)           │
                             │   3497 │   msg = "cannot identify image file %r │
                             │ ❱ 3498 │   raise UnidentifiedImageError(msg)    │
                             │   3499                                          │
                             │   3500                                          │
                             │   3501 #                                        │
                             │                                                 │
                             │ ╭────────────────── locals ───────────────────╮ │
                             │ │       _open_core = <function                │ │
                             │ │                    open.<locals>._open_core │ │
                             │ │                    at 0x7f3c5731fba0>       │ │
                             │ │  checked_formats = [                        │ │
                             │ │                    │   'PNG',               │ │
                             │ │                    │   'BMP',               │ │
                             │ │                    │   'DIB',               │ │
                             │ │                    │   'GIF',               │ │
                             │ │                    │   'JPEG',              │ │
                             │ │                    │   'PPM',               │ │
                             │ │                    │   'BLP',               │ │
                             │ │                    │   'BUFR',              │ │
                             │ │                    │   'CUR',               │ │
                             │ │                    │   'PCX',               │ │
                             │ │                    │   ... +32              │ │
                             │ │                    ]                        │ │
                             │ │     exclusive_fp = False                    │ │
                             │ │         filename = ''                       │ │
                             │ │          formats = [                        │ │
                             │ │                    │   'PNG',               │ │
                             │ │                    │   'BMP',               │ │
                             │ │                    │   'DIB',               │ │
                             │ │                    │   'GIF',               │ │
                             │ │                    │   'JPEG',              │ │
                             │ │                    │   'PPM',               │ │
                             │ │                    │   'BLP',               │ │
                             │ │                    │   'BUFR',              │ │
                             │ │                    │   'CUR',               │ │
                             │ │                    │   'PCX',               │ │
                             │ │                    │   ... +32              │ │
                             │ │                    ]                        │ │
                             │ │               fp = <_io.BytesIO object at   │ │
                             │ │                    0x7f3c572078d0>          │ │
                             │ │               im = None                     │ │
                             │ │             mode = 'r'                      │ │
                             │ │              msg = 'cannot identify image   │ │
                             │ │                    file <_io.BytesIO object │ │
                             │ │                    at 0x7f3c572078d0>'      │ │
                             │ │           prefix = b''                      │ │
                             │ │ warning_messages = []                       │ │
                             │ ╰─────────────────────────────────────────────╯ │
                             ╰─────────────────────────────────────────────────╯
                             UnidentifiedImageError: cannot identify image file
                             <_io.BytesIO object at 0x7f3c572078d0>
Originally created by @jordanlambrecht on GitHub (Sep 30, 2024). ### The bug When sending an image for Smart Search to my remote machine for ML (nvidia GTX 4800ti), immich-ml throws the error below for each attempted image. ### The OS that Immich Server is running on Server: Docker Desktop for Mac, ML: Docker Desktop w/ WSL2 & Ubuntu VM ### Version of Immich Server v1.116.2@8bbcd5c31 ### Version of Immich Mobile App N/A ### Platform with the issue - [X] Server - [ ] Web - [ ] Mobile ### Your docker-compose.yml content **Remote Machine Learning container:** ```YAML services: immich-machine-learning: container_name: immich_machine_learning restart: always tty: true logging: driver: json-file options: tag: "{{.Name}}" max-size: "10m" max-file: "36" image: ghcr.io/immich-app/immich-machine-learning:release-cuda deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: - gpu environment: IMMICH_LOG_LEVEL: verbose TZ: America/Chicago MACHINE_LEARNING_WORKER_TIMEOUT: 1600 MACHINE_LEARNING_PRELOAD__CLIP: ViT-H-14-378-quickgelu__dfn5b MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION: buffalo_l MACHINE_LEARNING_MODEL_TTL: 0 MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S: 15 volumes: - model-cache:/cache:rw - /var/run/docker.sock:/var/run/docker.sock extra_hosts: - host.docker.internal:host-gateway ports: - 3003:3003 - 3001:3001 networks: network_universal: labels: com.centurylinklabs.watchtower.enable: "true" autoheal: true diun.enable: true healthcheck: test: ["CMD", "bash", "-c", "exec 5<>/dev/tcp/127.0.0.1/3003"] interval: 10s timeout: 5s retries: 5 volumes: model-cache: ``` **Immich Server:** ```YAML --- name: immich # ╔══════════════════════════════════════════════════════════╗ # ║ ║ # ║ Immich Server ║ # ║ ║ # ╚══════════════════════════════════════════════════════════╝ # ════════════════════════════════════ # ANCHORS/FRAGMENTS # ════════════════════════════════════ x-common-config: &common-config restart: always tty: true stdin_open: true logging: driver: json-file options: tag: "{{.Name}}" max-size: "10m" max-file: "36" env_file: - .env x-common-labels: &common-labels com.centurylinklabs.watchtower.enable: true autoheal: false diun.enable: false x-kuma-labels: &kuma-labels kuma.{{ container_name }}-docker.docker.parent_name: "immich" kuma.{{ container_name }}-docker.docker.name: "{{ container_name }}" kuma.{{ container_name }}-docker.docker.active: true x-common-env: &common-env PUID: ${PUID} PGID: ${PGID} TZ: ${TZ} x-common-networks: &common-networks network_universal: network_autokuma: default: # ════════════════════════════════════ # Services # ════════════════════════════════════ services: # ┌──────────────────────────────────────┐ # | Immich Server | # └──────────────────────────────────────┘ immich: <<: *common-config container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} volumes: # - ${UPLOAD_LOCATION}:/usr/src/app/upload - ./tmp:/tmp:rw - ./immich/config:/config:rw - ${STORAGE_LOCATION}/photos:/usr/src/app/upload:rw - ${STORAGE_LOCATION}/thumbs:/usr/src/app/upload/thumbs:rw - ${STORAGE_LOCATION}/encoded-videos:/usr/src/app/upload/encoded-video:rw - ${STORAGE_LOCATION}/profiles:/usr/src/app/upload/profile:rw - /var/run/docker.sock:/var/run/docker.sock:ro # TODO: needed? - /etc/localtime:/etc/localtime:to # TODO: redundant? environment: <<: *common-env IMMICH_METRICS: true IMMICH_HOST_METRICS: true IMMICH_IO_METRICS: true IMMICH_JOB_METRICS: true IMMICH_LOG_LEVEL: verbose DB_HOSTNAME: ${DB_HOSTNAME} DB_DATABASE_NAME: ${DB_DATABASE_NAME} DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} REDIS_HOSTNAME: ${REDIS_HOSTNAME} REDIS_PORT: 6379 ports: - <redacted>:3001 - <redacted>:8081 - <redacted>:8082 depends_on: - redis - database labels: <<: [*common-labels, *kuma-labels] networks: <<: *common-networks healthcheck: test: [ "CMD-SHELL", 'curl --fail http://immich_server:3001/api/server-info/ping | grep -q ''{"res":"pong"}'' || exit 1', ] interval: 1m timeout: 10s retries: 3 disable: false # ┌──────────────────────────────────────┐ # | Redis | # └──────────────────────────────────────┘ redis: <<: *common-config image: redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e container_name: immich_redis environment: <<: *common-env ports: - 6379:6379 # TODO: remove and test, rely on stack network only volumes: - ./redis_data:/data - ./tmp:/tmp networks: <<: *common-networks labels: <<: *common-labels healthcheck: test: redis-cli ping || exit 1 # ┌──────────────────────────────────────┐ # | Postgres | # └──────────────────────────────────────┘ database: <<: *common-config container_name: immich_postgres image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 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", ] environment: <<: *common-env POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: "--data-checksums" volumes: - ${DB_DATA_LOCATION}:/var/lib/postgresql/data:rw - /etc/localtime:/etc/localtime:to # TODO: redundant? ports: - ${DB_PORT}:5432 labels: <<: *common-labels networks: <<: *common-networks 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 # ------------------------end of services------------------------ # # ════════════════════════════════════ # NETWORKS # ════════════════════════════════════ networks: default: name: network_default_immich network_universal: external: true network_autokuma: external: true ``` ### Your .env content ```dotenv # Immich Server .env STORAGE_LOCATION=/Volumes/<REDACTED> IMMICH_VERSION=release DB_DATA_LOCATION=./pgdata PROFILE_LOCATION=/Volumes/<REDACTED> DB_PASSWORD=<REDACTED> DB_HOSTNAME=immich_postgres DB_USERNAME=immich DB_DATABASE_NAME=immich DB_PORT=5432 REDIS_HOSTNAME=immich_redis TZ=America/Chicago PUID=10000 PGID=10000 UMASK=002 ``` ### Reproduction steps 1. Immich Server is running on my primary docker machine via Docker Desktop for Mac 2. Immich ML is running on my PC via WSL2, Ubuntu VM, and Docker Desktop 3. Connection is stable 4. Using `ViT-H-14-378-quickgelu__dfn5b` for the clip 5. Error happens when the server attempts to send a file for smart search recognition. The connection is stable and communication happens. Error repeats for every attempted image sent. ### Relevant log output ```shell [09/30/24 09:51:29] ERROR Exception in ASGI application ╭─────── Traceback (most recent call last) ───────╮ │ /usr/src/app/main.py:147 in predict │ │ │ │ 144 │ text: str | None = Form(default=None) │ │ 145 ) -> Any: │ │ 146 │ if image is not None: │ │ ❱ 147 │ │ inputs: Image | str = await run(l │ │ 148 │ elif text is not None: │ │ 149 │ │ inputs = text │ │ 150 │ else: │ │ │ │ ╭────────────────── locals ───────────────────╮ │ │ │ entries = ( │ │ │ │ │ [ │ │ │ │ │ │ { │ │ │ │ │ │ │ 'name': │ │ │ │ 'ViT-H-14-378-quickgelu__dfn5b', │ │ │ │ │ │ │ 'task': 'clip', │ │ │ │ │ │ │ 'type': 'visual', │ │ │ │ │ │ │ 'options': {} │ │ │ │ │ │ } │ │ │ │ │ ], │ │ │ │ │ [] │ │ │ │ ) │ │ │ │ image = b'' │ │ │ │ text = None │ │ │ ╰─────────────────────────────────────────────╯ │ │ │ │ /usr/src/app/main.py:188 in run │ │ │ │ 185 │ if thread_pool is None: │ │ 186 │ │ return func(*args, **kwargs) │ │ 187 │ partial_func = partial(func, *args, * │ │ ❱ 188 │ return await asyncio.get_running_loop │ │ 189 │ │ 190 │ │ 191 async def load(model: InferenceModel) -> │ │ │ │ ╭────────────────── locals ───────────────────╮ │ │ │ args = () │ │ │ │ func = <function │ │ │ │ predict.<locals>.<lambda> at │ │ │ │ 0x7f3c572be980> │ │ │ │ kwargs = {} │ │ │ │ partial_func = functools.partial(<function │ │ │ │ predict.<locals>.<lambda> at │ │ │ │ 0x7f3c572be980>) │ │ │ ╰─────────────────────────────────────────────╯ │ │ │ │ /usr/local/lib/python3.11/concurrent/futures/th │ │ read.py:58 in run │ │ │ │ /usr/src/app/main.py:147 in <lambda> │ │ │ │ 144 │ text: str | None = Form(default=None) │ │ 145 ) -> Any: │ │ 146 │ if image is not None: │ │ ❱ 147 │ │ inputs: Image | str = await run(l │ │ 148 │ elif text is not None: │ │ 149 │ │ inputs = text │ │ 150 │ else: │ │ │ │ ╭── locals ───╮ │ │ │ image = b'' │ │ │ ╰─────────────╯ │ │ │ │ /usr/src/app/models/transforms.py:52 in │ │ decode_pil │ │ │ │ 49 def decode_pil(image_bytes: bytes | IO[byt │ │ 50 │ if isinstance(image_bytes, Image.Image │ │ 51 │ │ return image_bytes │ │ ❱ 52 │ image: Image.Image = Image.open(BytesI │ │ bytes) else image_bytes) │ │ 53 │ image.load() │ │ 54 │ if not image.mode == "RGB": │ │ 55 │ │ image = image.convert("RGB") │ │ │ │ ╭───── locals ──────╮ │ │ │ image_bytes = b'' │ │ │ ╰───────────────────╯ │ │ │ │ /opt/venv/lib/python3.11/site-packages/PIL/Imag │ │ e.py:3498 in open │ │ │ │ 3495 │ for message in warning_messages: │ │ 3496 │ │ warnings.warn(message) │ │ 3497 │ msg = "cannot identify image file %r │ │ ❱ 3498 │ raise UnidentifiedImageError(msg) │ │ 3499 │ │ 3500 │ │ 3501 # │ │ │ │ ╭────────────────── locals ───────────────────╮ │ │ │ _open_core = <function │ │ │ │ open.<locals>._open_core │ │ │ │ at 0x7f3bf2936160> │ │ │ │ checked_formats = [ │ │ │ │ │ 'PNG', │ │ │ │ │ 'BMP', │ │ │ │ │ 'DIB', │ │ │ │ │ 'GIF', │ │ │ │ │ 'JPEG', │ │ │ │ │ 'PPM', │ │ │ │ │ 'BLP', │ │ │ │ │ 'BUFR', │ │ │ │ │ 'CUR', │ │ │ │ │ 'PCX', │ │ │ │ │ ... +32 │ │ │ │ ] │ │ │ │ exclusive_fp = False │ │ │ │ filename = '' │ │ │ │ formats = [ │ │ │ │ │ 'PNG', │ │ │ │ │ 'BMP', │ │ │ │ │ 'DIB', │ │ │ │ │ 'GIF', │ │ │ │ │ 'JPEG', │ │ │ │ │ 'PPM', │ │ │ │ │ 'BLP', │ │ │ │ │ 'BUFR', │ │ │ │ │ 'CUR', │ │ │ │ │ 'PCX', │ │ │ │ │ ... +32 │ │ │ │ ] │ │ │ │ fp = <_io.BytesIO object at │ │ │ │ 0x7f3c572073d0> │ │ │ │ im = None │ │ │ │ mode = 'r' │ │ │ │ msg = 'cannot identify image │ │ │ │ file <_io.BytesIO object │ │ │ │ at 0x7f3c572073d0>' │ │ │ │ prefix = b'' │ │ │ │ warning_messages = [] │ │ │ ╰─────────────────────────────────────────────╯ │ ╰─────────────────────────────────────────────────╯ UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f3c572073d0> [09/30/24 09:51:29] ERROR Exception in ASGI application ╭─────── Traceback (most recent call last) ───────╮ │ /usr/src/app/main.py:147 in predict │ │ │ │ 144 │ text: str | None = Form(default=None) │ │ 145 ) -> Any: │ │ 146 │ if image is not None: │ │ ❱ 147 │ │ inputs: Image | str = await run(l │ │ 148 │ elif text is not None: │ │ 149 │ │ inputs = text │ │ 150 │ else: │ │ │ │ ╭────────────────── locals ───────────────────╮ │ │ │ entries = ( │ │ │ │ │ [ │ │ │ │ │ │ { │ │ │ │ │ │ │ 'name': │ │ │ │ 'ViT-H-14-378-quickgelu__dfn5b', │ │ │ │ │ │ │ 'task': 'clip', │ │ │ │ │ │ │ 'type': 'visual', │ │ │ │ │ │ │ 'options': {} │ │ │ │ │ │ } │ │ │ │ │ ], │ │ │ │ │ [] │ │ │ │ ) │ │ │ │ image = b'' │ │ │ │ text = None │ │ │ ╰─────────────────────────────────────────────╯ │ │ │ │ /usr/src/app/main.py:188 in run │ │ │ │ 185 │ if thread_pool is None: │ │ 186 │ │ return func(*args, **kwargs) │ │ 187 │ partial_func = partial(func, *args, * │ │ ❱ 188 │ return await asyncio.get_running_loop │ │ 189 │ │ 190 │ │ 191 async def load(model: InferenceModel) -> │ │ │ │ ╭────────────────── locals ───────────────────╮ │ │ │ args = () │ │ │ │ func = <function │ │ │ │ predict.<locals>.<lambda> at │ │ │ │ 0x7f3ca8679da0> │ │ │ │ kwargs = {} │ │ │ │ partial_func = functools.partial(<function │ │ │ │ predict.<locals>.<lambda> at │ │ │ │ 0x7f3ca8679da0>) │ │ │ ╰─────────────────────────────────────────────╯ │ │ │ │ /usr/local/lib/python3.11/concurrent/futures/th │ │ read.py:58 in run │ │ │ │ /usr/src/app/main.py:147 in <lambda> │ │ │ │ 144 │ text: str | None = Form(default=None) │ │ 145 ) -> Any: │ │ 146 │ if image is not None: │ │ ❱ 147 │ │ inputs: Image | str = await run(l │ │ 148 │ elif text is not None: │ │ 149 │ │ inputs = text │ │ 150 │ else: │ │ │ │ ╭── locals ───╮ │ │ │ image = b'' │ │ │ ╰─────────────╯ │ │ │ │ /usr/src/app/models/transforms.py:52 in │ │ decode_pil │ │ │ │ 49 def decode_pil(image_bytes: bytes | IO[byt │ │ 50 │ if isinstance(image_bytes, Image.Image │ │ 51 │ │ return image_bytes │ │ ❱ 52 │ image: Image.Image = Image.open(BytesI │ │ bytes) else image_bytes) │ │ 53 │ image.load() │ │ 54 │ if not image.mode == "RGB": │ │ 55 │ │ image = image.convert("RGB") │ │ │ │ ╭───── locals ──────╮ │ │ │ image_bytes = b'' │ │ │ ╰───────────────────╯ │ │ │ │ /opt/venv/lib/python3.11/site-packages/PIL/Imag │ │ e.py:3498 in open │ │ │ │ 3495 │ for message in warning_messages: │ │ 3496 │ │ warnings.warn(message) │ │ 3497 │ msg = "cannot identify image file %r │ │ ❱ 3498 │ raise UnidentifiedImageError(msg) │ │ 3499 │ │ 3500 │ │ 3501 # │ │ │ │ ╭────────────────── locals ───────────────────╮ │ │ │ _open_core = <function │ │ │ │ open.<locals>._open_core │ │ │ │ at 0x7f3c5731fba0> │ │ │ │ checked_formats = [ │ │ │ │ │ 'PNG', │ │ │ │ │ 'BMP', │ │ │ │ │ 'DIB', │ │ │ │ │ 'GIF', │ │ │ │ │ 'JPEG', │ │ │ │ │ 'PPM', │ │ │ │ │ 'BLP', │ │ │ │ │ 'BUFR', │ │ │ │ │ 'CUR', │ │ │ │ │ 'PCX', │ │ │ │ │ ... +32 │ │ │ │ ] │ │ │ │ exclusive_fp = False │ │ │ │ filename = '' │ │ │ │ formats = [ │ │ │ │ │ 'PNG', │ │ │ │ │ 'BMP', │ │ │ │ │ 'DIB', │ │ │ │ │ 'GIF', │ │ │ │ │ 'JPEG', │ │ │ │ │ 'PPM', │ │ │ │ │ 'BLP', │ │ │ │ │ 'BUFR', │ │ │ │ │ 'CUR', │ │ │ │ │ 'PCX', │ │ │ │ │ ... +32 │ │ │ │ ] │ │ │ │ fp = <_io.BytesIO object at │ │ │ │ 0x7f3c572078d0> │ │ │ │ im = None │ │ │ │ mode = 'r' │ │ │ │ msg = 'cannot identify image │ │ │ │ file <_io.BytesIO object │ │ │ │ at 0x7f3c572078d0>' │ │ │ │ prefix = b'' │ │ │ │ warning_messages = [] │ │ │ ╰─────────────────────────────────────────────╯ │ ╰─────────────────────────────────────────────────╯ UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f3c572078d0> ```
Author
Owner

@bo0tzz commented on GitHub (Sep 30, 2024):

Can you share the output of docker container inspect immich_machine_learning, specifically the "Labels" section? Have you changed any of the thumbnail settings in the Immich server?

@bo0tzz commented on GitHub (Sep 30, 2024): Can you share the output of `docker container inspect immich_machine_learning`, specifically the "Labels" section? Have you changed any of the thumbnail settings in the Immich server?
Author
Owner

@jordanlambrecht commented on GitHub (Sep 30, 2024):

@bo0tzz You bet. I have a bind mount for thumbnails on immich-server: ${STORAGE_LOCATION}/thumbs:/usr/src/app/upload/thumbs:rw, otherwise thumbnail format is set to webp and thumbnail resolution is set to 480p

docker container inspect immich_machine_learning:

[
    {
        "Id": "5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a",
        "Created": "2024-09-30T18:03:46.756815493Z",
        "Path": "tini",
        "Args": [
            "--",
            "./start.sh"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 97150,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-09-30T18:03:47.44801137Z",
            "FinishedAt": "0001-01-01T00:00:00Z",
            "Health": {
                "Status": "healthy",
                "FailingStreak": 0,
                "Log": [
                    {
                        "Start": "2024-09-30T18:54:20.217328402Z",
                        "End": "2024-09-30T18:54:20.237449342Z",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2024-09-30T18:54:30.304948708Z",
                        "End": "2024-09-30T18:54:30.325647909Z",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2024-09-30T18:54:40.327216976Z",
                        "End": "2024-09-30T18:54:40.347006188Z",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2024-09-30T18:54:50.348210788Z",
                        "End": "2024-09-30T18:54:50.365981048Z",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2024-09-30T18:55:00.453259712Z",
                        "End": "2024-09-30T18:55:00.472924788Z",
                        "ExitCode": 0,
                        "Output": ""
                    }
                ]
            }
        },
        "Image": "sha256:ccfbc70d5e9a8f400ce1c349eab97086d571f94135f85abf09f11ab860af3e84",
        "ResolvConfPath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/hostname",
        "HostsPath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/hosts",
        "LogPath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a-json.log",
        "Name": "/immich_machine_learning",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/var/run/docker.sock:/var/run/docker.sock:rw",
                "/etc/localtime:/etc/localtime:ro"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-file": "36",
                    "max-size": "10m",
                    "tag": "{{.Name}}"
                }
            },
            "NetworkMode": "9349d3c58c25fe8732ca1dc2c76bd1b127f5a9b12197f0318f4ca3e400433802",
            "PortBindings": {
                "3001/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "3001"
                    }
                ],
                "3003/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "3003"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                0,
                0
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": null,
            "DnsOptions": null,
            "DnsSearch": null,
            "ExtraHosts": [
                "host.docker.internal:host-gateway"
            ],
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": null,
            "DeviceCgroupRules": null,
            "DeviceRequests": [
                {
                    "Driver": "nvidia",
                    "Count": 1,
                    "DeviceIDs": null,
                    "Capabilities": [
                        [
                            "gpu"
                        ]
                    ],
                    "Options": null
                }
            ],
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "Mounts": [
                {
                    "Type": "volume",
                    "Source": "immich-ml_model-cache",
                    "Target": "/cache",
                    "VolumeOptions": {}
                }
            ],
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware",
                "/sys/devices/virtual/powercap"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb-init/diff:/var/lib/docker/overlay2/49538f00d624355515b6e91d408d02917449d718ca00645b8307ead2c792ab59/diff:/var/lib/docker/overlay2/6afd3d9cb5ecf8ce5dac8d52e2c0d920f34416a0e29e2a0247a631cd37e98a31/diff:/var/lib/docker/overlay2/0a44cdc9af84ee68d76538ff2d75fc48363c02c75f89a3cd88b208b5e55a9133/diff:/var/lib/docker/overlay2/66f443205b6eb66ce477fbdac117ffe8fec9c49c8e201bcdf2f6e9d8d3f06bf3/diff:/var/lib/docker/overlay2/eed5db04991bd67622eee15882abb521186978e4444501455e660cf58d0e66b1/diff:/var/lib/docker/overlay2/1d2d967405034c5ebeff9c3818bba0466f723894967a6874d511271d941891d0/diff:/var/lib/docker/overlay2/fe58397c2df35181e927737c4482d2cb2a6f3c1c9f712d3467e545b11b63201f/diff:/var/lib/docker/overlay2/29070840a78bebf2ae24eda8a5b12aaf8058bfd381d553332a0a4ced055317b5/diff:/var/lib/docker/overlay2/3d873680cb373ab10b707b66ac245361fdebf65cf224f6e556126d093c404b04/diff:/var/lib/docker/overlay2/3a778bfa6123cf01004940b219ef28198047bf95e3039ff37047e3132b4c3182/diff:/var/lib/docker/overlay2/8cf5ff294535adbf2efd91ccec309d5f7c398dbce3af29f18dcfa03751c03299/diff:/var/lib/docker/overlay2/910d982cb9b7a85478ed7b3aaa3cf24d43d01638a051be77841b21a743f40e51/diff:/var/lib/docker/overlay2/f011ed7586a3d914efe065b6a37447ecb7291e544edee4785aab58dd2358e39a/diff:/var/lib/docker/overlay2/a90917eb4d438ca9e124830c5227f3a1c7767e70f68e572491e41fcc09b99613/diff:/var/lib/docker/overlay2/2e8466724457fc22cad1c747f478172974dc88a100670089abdf4fc85b28e825/diff:/var/lib/docker/overlay2/186f00fcd08ad5fe2934433910d67a3b1d68f7fcff746f2ac4d7126e7258b70f/diff:/var/lib/docker/overlay2/28b717b9614ecda439dce2d96642cd1ae8974f71007dfe55030eba9dee8b9993/diff:/var/lib/docker/overlay2/69193b1e090a24e0cea87f19558ae4a140deb1aacd988102b4bbe727341b52a6/diff:/var/lib/docker/overlay2/3e539cca60bcf0c5a82bce28ee10dcbdc1870c25471844f6d3c74c7434a560f7/diff:/var/lib/docker/overlay2/52d548903a2a0503d2ce1feadedae9bba8e89e2141bdb69cd199084631c05456/diff",
                "MergedDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb/merged",
                "UpperDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb/diff",
                "WorkDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/var/run/docker.sock",
                "Destination": "/var/run/docker.sock",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/etc/localtime",
                "Destination": "/etc/localtime",
                "Mode": "ro",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "immich-ml_model-cache",
                "Source": "/var/lib/docker/volumes/immich-ml_model-cache/_data",
                "Destination": "/cache",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "5873dd2becad",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "3001/tcp": {},
                "3003/tcp": {}
            },
            "Tty": true,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "MACHINE_LEARNING_WORKER_TIMEOUT=1600",
                "MACHINE_LEARNING_PRELOAD__CLIP=ViT-H-14-378-quickgelu__dfn5b",
                "MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l",
                "MACHINE_LEARNING_MODEL_TTL=0",
                "MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S=15",
                "IMMICH_LOG_LEVEL=verbose",
                "TZ=America/Chicago",
                "PATH=/opt/venv/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NVARCH=x86_64",
                "NVIDIA_REQUIRE_CUDA=cuda\u003e=12.2 brand=tesla,driver\u003e=470,driver\u003c471 brand=unknown,driver\u003e=470,driver\u003c471 brand=nvidia,driver\u003e=470,driver\u003c471 brand=nvidiartx,driver\u003e=470,driver\u003c471 brand=geforce,driver\u003e=470,driver\u003c471 brand=geforcertx,driver\u003e=470,driver\u003c471 brand=quadro,driver\u003e=470,driver\u003c471 brand=quadrortx,driver\u003e=470,driver\u003c471 brand=titan,driver\u003e=470,driver\u003c471 brand=titanrtx,driver\u003e=470,driver\u003c471 brand=tesla,driver\u003e=525,driver\u003c526 brand=unknown,driver\u003e=525,driver\u003c526 brand=nvidia,driver\u003e=525,driver\u003c526 brand=nvidiartx,driver\u003e=525,driver\u003c526 brand=geforce,driver\u003e=525,driver\u003c526 brand=geforcertx,driver\u003e=525,driver\u003c526 brand=quadro,driver\u003e=525,driver\u003c526 brand=quadrortx,driver\u003e=525,driver\u003c526 brand=titan,driver\u003e=525,driver\u003c526 brand=titanrtx,driver\u003e=525,driver\u003c526",
                "NV_CUDA_CUDART_VERSION=12.2.140-1",
                "NV_CUDA_COMPAT_PACKAGE=cuda-compat-12-2",
                "CUDA_VERSION=12.2.2",
                "LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64",
                "NVIDIA_VISIBLE_DEVICES=all",
                "NVIDIA_DRIVER_CAPABILITIES=compute,utility",
                "NV_CUDA_LIB_VERSION=12.2.2-1",
                "NV_NVTX_VERSION=12.2.140-1",
                "NV_LIBNPP_VERSION=12.2.1.4-1",
                "NV_LIBNPP_PACKAGE=libnpp-12-2=12.2.1.4-1",
                "NV_LIBCUSPARSE_VERSION=12.1.2.141-1",
                "NV_LIBCUBLAS_PACKAGE_NAME=libcublas-12-2",
                "NV_LIBCUBLAS_VERSION=12.2.5.6-1",
                "NV_LIBCUBLAS_PACKAGE=libcublas-12-2=12.2.5.6-1",
                "NV_LIBNCCL_PACKAGE_NAME=libnccl2",
                "NV_LIBNCCL_PACKAGE_VERSION=2.19.3-1",
                "NCCL_VERSION=2.19.3-1",
                "NV_LIBNCCL_PACKAGE=libnccl2=2.19.3-1+cuda12.2",
                "NVIDIA_PRODUCT_NAME=CUDA",
                "TRANSFORMERS_CACHE=/cache",
                "PYTHONDONTWRITEBYTECODE=1",
                "PYTHONUNBUFFERED=1",
                "PYTHONPATH=/usr/src",
                "DEVICE=cuda"
            ],
            "Cmd": [
                "./start.sh"
            ],
            "Healthcheck": {
                "Test": [
                    "CMD",
                    "bash",
                    "-c",
                    "exec 5\u003c\u003e/dev/tcp/127.0.0.1/3003"
                ],
                "Interval": 10000000000,
                "Timeout": 5000000000,
                "Retries": 5
            },
            "Image": "ghcr.io/immich-app/immich-machine-learning:release-cuda",
            "Volumes": null,
            "WorkingDir": "/usr/src/app",
            "Entrypoint": [
                "tini",
                "--"
            ],
            "OnBuild": null,
            "Labels": {
                "autoheal": "true",
                "com.centurylinklabs.watchtower.enable": "true",
                "com.docker.compose.config-hash": "de36f2d7695f655a166d8676b3e4ac3f2db6dae980388953c84844c161a15c0d",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.depends_on": "",
                "com.docker.compose.image": "sha256:ccfbc70d5e9a8f400ce1c349eab97086d571f94135f85abf09f11ab860af3e84",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "immich-ml",
                "com.docker.compose.project.config_files": "/home/jordanlambrecht/docker/stacks/immich-ml/docker-compose.yml",
                "com.docker.compose.project.working_dir": "/home/jordanlambrecht/docker/stacks/immich-ml",
                "com.docker.compose.replace": "6a0a91fb8351f8879226af897ae86c08d44c4d300dfdb6fb62d70a4a35c0cf05",
                "com.docker.compose.service": "immich-machine-learning",
                "com.docker.compose.version": "2.29.2",
                "desktop.docker.io/wsl-distro": "Ubuntu",
                "diun.enable": "true",
                "maintainer": "NVIDIA CORPORATION \u003ccudatools@nvidia.com\u003e",
                "org.opencontainers.image.created": "2024-09-27T18:45:11.094Z",
                "org.opencontainers.image.description": "High performance self-hosted photo and video management solution.",
                "org.opencontainers.image.licenses": "AGPL-3.0",
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.revision": "8bbcd5c31e4a227f92864ae2977c4033bc0c50b7",
                "org.opencontainers.image.source": "https://github.com/immich-app/immich",
                "org.opencontainers.image.title": "immich",
                "org.opencontainers.image.url": "https://github.com/immich-app/immich",
                "org.opencontainers.image.version": "v1.116.2-cuda"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "d444d85a05d2a32589ae2193a58c9f24c5d75db510180bb550589b040b424919",
            "SandboxKey": "/var/run/docker/netns/d444d85a05d2",
            "Ports": {
                "3001/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3001"
                    }
                ],
                "3003/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3003"
                    }
                ]
            },
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "network_universal": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "immich_machine_learning",
                        "immich-machine-learning"
                    ],
                    "MacAddress": "02:42:ac:12:00:06",
                    "DriverOpts": null,
                    "NetworkID": "9349d3c58c25fe8732ca1dc2c76bd1b127f5a9b12197f0318f4ca3e400433802",
                    "EndpointID": "6ceec61f70e3b20731742ad59c48da9638ead6bcc41eeda28355e25517d3fe9b",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.6",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": [
                        "immich_machine_learning",
                        "immich-machine-learning",
                        "5873dd2becad"
                    ]
                }
            }
        }
    }
]
@jordanlambrecht commented on GitHub (Sep 30, 2024): @bo0tzz You bet. I have a bind mount for thumbnails on immich-server: `${STORAGE_LOCATION}/thumbs:/usr/src/app/upload/thumbs:rw`, otherwise thumbnail format is set to `webp` and thumbnail resolution is set to `480p` **`docker container inspect immich_machine_learning`**: ```json [ { "Id": "5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a", "Created": "2024-09-30T18:03:46.756815493Z", "Path": "tini", "Args": [ "--", "./start.sh" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 97150, "ExitCode": 0, "Error": "", "StartedAt": "2024-09-30T18:03:47.44801137Z", "FinishedAt": "0001-01-01T00:00:00Z", "Health": { "Status": "healthy", "FailingStreak": 0, "Log": [ { "Start": "2024-09-30T18:54:20.217328402Z", "End": "2024-09-30T18:54:20.237449342Z", "ExitCode": 0, "Output": "" }, { "Start": "2024-09-30T18:54:30.304948708Z", "End": "2024-09-30T18:54:30.325647909Z", "ExitCode": 0, "Output": "" }, { "Start": "2024-09-30T18:54:40.327216976Z", "End": "2024-09-30T18:54:40.347006188Z", "ExitCode": 0, "Output": "" }, { "Start": "2024-09-30T18:54:50.348210788Z", "End": "2024-09-30T18:54:50.365981048Z", "ExitCode": 0, "Output": "" }, { "Start": "2024-09-30T18:55:00.453259712Z", "End": "2024-09-30T18:55:00.472924788Z", "ExitCode": 0, "Output": "" } ] } }, "Image": "sha256:ccfbc70d5e9a8f400ce1c349eab97086d571f94135f85abf09f11ab860af3e84", "ResolvConfPath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/resolv.conf", "HostnamePath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/hostname", "HostsPath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/hosts", "LogPath": "/var/lib/docker/containers/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a/5873dd2becad3147943f247e6fb994e7a78f8be130639986cf5b9c0d020bfb2a-json.log", "Name": "/immich_machine_learning", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": [ "/var/run/docker.sock:/var/run/docker.sock:rw", "/etc/localtime:/etc/localtime:ro" ], "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": { "max-file": "36", "max-size": "10m", "tag": "{{.Name}}" } }, "NetworkMode": "9349d3c58c25fe8732ca1dc2c76bd1b127f5a9b12197f0318f4ca3e400433802", "PortBindings": { "3001/tcp": [ { "HostIp": "", "HostPort": "3001" } ], "3003/tcp": [ { "HostIp": "", "HostPort": "3003" } ] }, "RestartPolicy": { "Name": "always", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "ConsoleSize": [ 0, 0 ], "CapAdd": null, "CapDrop": null, "CgroupnsMode": "host", "Dns": null, "DnsOptions": null, "DnsSearch": null, "ExtraHosts": [ "host.docker.internal:host-gateway" ], "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": null, "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": null, "DeviceCgroupRules": null, "DeviceRequests": [ { "Driver": "nvidia", "Count": 1, "DeviceIDs": null, "Capabilities": [ [ "gpu" ] ], "Options": null } ], "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": null, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "Mounts": [ { "Type": "volume", "Source": "immich-ml_model-cache", "Target": "/cache", "VolumeOptions": {} } ], "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware", "/sys/devices/virtual/powercap" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb-init/diff:/var/lib/docker/overlay2/49538f00d624355515b6e91d408d02917449d718ca00645b8307ead2c792ab59/diff:/var/lib/docker/overlay2/6afd3d9cb5ecf8ce5dac8d52e2c0d920f34416a0e29e2a0247a631cd37e98a31/diff:/var/lib/docker/overlay2/0a44cdc9af84ee68d76538ff2d75fc48363c02c75f89a3cd88b208b5e55a9133/diff:/var/lib/docker/overlay2/66f443205b6eb66ce477fbdac117ffe8fec9c49c8e201bcdf2f6e9d8d3f06bf3/diff:/var/lib/docker/overlay2/eed5db04991bd67622eee15882abb521186978e4444501455e660cf58d0e66b1/diff:/var/lib/docker/overlay2/1d2d967405034c5ebeff9c3818bba0466f723894967a6874d511271d941891d0/diff:/var/lib/docker/overlay2/fe58397c2df35181e927737c4482d2cb2a6f3c1c9f712d3467e545b11b63201f/diff:/var/lib/docker/overlay2/29070840a78bebf2ae24eda8a5b12aaf8058bfd381d553332a0a4ced055317b5/diff:/var/lib/docker/overlay2/3d873680cb373ab10b707b66ac245361fdebf65cf224f6e556126d093c404b04/diff:/var/lib/docker/overlay2/3a778bfa6123cf01004940b219ef28198047bf95e3039ff37047e3132b4c3182/diff:/var/lib/docker/overlay2/8cf5ff294535adbf2efd91ccec309d5f7c398dbce3af29f18dcfa03751c03299/diff:/var/lib/docker/overlay2/910d982cb9b7a85478ed7b3aaa3cf24d43d01638a051be77841b21a743f40e51/diff:/var/lib/docker/overlay2/f011ed7586a3d914efe065b6a37447ecb7291e544edee4785aab58dd2358e39a/diff:/var/lib/docker/overlay2/a90917eb4d438ca9e124830c5227f3a1c7767e70f68e572491e41fcc09b99613/diff:/var/lib/docker/overlay2/2e8466724457fc22cad1c747f478172974dc88a100670089abdf4fc85b28e825/diff:/var/lib/docker/overlay2/186f00fcd08ad5fe2934433910d67a3b1d68f7fcff746f2ac4d7126e7258b70f/diff:/var/lib/docker/overlay2/28b717b9614ecda439dce2d96642cd1ae8974f71007dfe55030eba9dee8b9993/diff:/var/lib/docker/overlay2/69193b1e090a24e0cea87f19558ae4a140deb1aacd988102b4bbe727341b52a6/diff:/var/lib/docker/overlay2/3e539cca60bcf0c5a82bce28ee10dcbdc1870c25471844f6d3c74c7434a560f7/diff:/var/lib/docker/overlay2/52d548903a2a0503d2ce1feadedae9bba8e89e2141bdb69cd199084631c05456/diff", "MergedDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb/merged", "UpperDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb/diff", "WorkDir": "/var/lib/docker/overlay2/8a3217d740f8131c1eb220ae06863ec5efde7866962f2a191911ad66c75e78eb/work" }, "Name": "overlay2" }, "Mounts": [ { "Type": "bind", "Source": "/var/run/docker.sock", "Destination": "/var/run/docker.sock", "Mode": "rw", "RW": true, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/etc/localtime", "Destination": "/etc/localtime", "Mode": "ro", "RW": false, "Propagation": "rprivate" }, { "Type": "volume", "Name": "immich-ml_model-cache", "Source": "/var/lib/docker/volumes/immich-ml_model-cache/_data", "Destination": "/cache", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ], "Config": { "Hostname": "5873dd2becad", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "ExposedPorts": { "3001/tcp": {}, "3003/tcp": {} }, "Tty": true, "OpenStdin": false, "StdinOnce": false, "Env": [ "MACHINE_LEARNING_WORKER_TIMEOUT=1600", "MACHINE_LEARNING_PRELOAD__CLIP=ViT-H-14-378-quickgelu__dfn5b", "MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l", "MACHINE_LEARNING_MODEL_TTL=0", "MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S=15", "IMMICH_LOG_LEVEL=verbose", "TZ=America/Chicago", "PATH=/opt/venv/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NVARCH=x86_64", "NVIDIA_REQUIRE_CUDA=cuda\u003e=12.2 brand=tesla,driver\u003e=470,driver\u003c471 brand=unknown,driver\u003e=470,driver\u003c471 brand=nvidia,driver\u003e=470,driver\u003c471 brand=nvidiartx,driver\u003e=470,driver\u003c471 brand=geforce,driver\u003e=470,driver\u003c471 brand=geforcertx,driver\u003e=470,driver\u003c471 brand=quadro,driver\u003e=470,driver\u003c471 brand=quadrortx,driver\u003e=470,driver\u003c471 brand=titan,driver\u003e=470,driver\u003c471 brand=titanrtx,driver\u003e=470,driver\u003c471 brand=tesla,driver\u003e=525,driver\u003c526 brand=unknown,driver\u003e=525,driver\u003c526 brand=nvidia,driver\u003e=525,driver\u003c526 brand=nvidiartx,driver\u003e=525,driver\u003c526 brand=geforce,driver\u003e=525,driver\u003c526 brand=geforcertx,driver\u003e=525,driver\u003c526 brand=quadro,driver\u003e=525,driver\u003c526 brand=quadrortx,driver\u003e=525,driver\u003c526 brand=titan,driver\u003e=525,driver\u003c526 brand=titanrtx,driver\u003e=525,driver\u003c526", "NV_CUDA_CUDART_VERSION=12.2.140-1", "NV_CUDA_COMPAT_PACKAGE=cuda-compat-12-2", "CUDA_VERSION=12.2.2", "LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64", "NVIDIA_VISIBLE_DEVICES=all", "NVIDIA_DRIVER_CAPABILITIES=compute,utility", "NV_CUDA_LIB_VERSION=12.2.2-1", "NV_NVTX_VERSION=12.2.140-1", "NV_LIBNPP_VERSION=12.2.1.4-1", "NV_LIBNPP_PACKAGE=libnpp-12-2=12.2.1.4-1", "NV_LIBCUSPARSE_VERSION=12.1.2.141-1", "NV_LIBCUBLAS_PACKAGE_NAME=libcublas-12-2", "NV_LIBCUBLAS_VERSION=12.2.5.6-1", "NV_LIBCUBLAS_PACKAGE=libcublas-12-2=12.2.5.6-1", "NV_LIBNCCL_PACKAGE_NAME=libnccl2", "NV_LIBNCCL_PACKAGE_VERSION=2.19.3-1", "NCCL_VERSION=2.19.3-1", "NV_LIBNCCL_PACKAGE=libnccl2=2.19.3-1+cuda12.2", "NVIDIA_PRODUCT_NAME=CUDA", "TRANSFORMERS_CACHE=/cache", "PYTHONDONTWRITEBYTECODE=1", "PYTHONUNBUFFERED=1", "PYTHONPATH=/usr/src", "DEVICE=cuda" ], "Cmd": [ "./start.sh" ], "Healthcheck": { "Test": [ "CMD", "bash", "-c", "exec 5\u003c\u003e/dev/tcp/127.0.0.1/3003" ], "Interval": 10000000000, "Timeout": 5000000000, "Retries": 5 }, "Image": "ghcr.io/immich-app/immich-machine-learning:release-cuda", "Volumes": null, "WorkingDir": "/usr/src/app", "Entrypoint": [ "tini", "--" ], "OnBuild": null, "Labels": { "autoheal": "true", "com.centurylinklabs.watchtower.enable": "true", "com.docker.compose.config-hash": "de36f2d7695f655a166d8676b3e4ac3f2db6dae980388953c84844c161a15c0d", "com.docker.compose.container-number": "1", "com.docker.compose.depends_on": "", "com.docker.compose.image": "sha256:ccfbc70d5e9a8f400ce1c349eab97086d571f94135f85abf09f11ab860af3e84", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "immich-ml", "com.docker.compose.project.config_files": "/home/jordanlambrecht/docker/stacks/immich-ml/docker-compose.yml", "com.docker.compose.project.working_dir": "/home/jordanlambrecht/docker/stacks/immich-ml", "com.docker.compose.replace": "6a0a91fb8351f8879226af897ae86c08d44c4d300dfdb6fb62d70a4a35c0cf05", "com.docker.compose.service": "immich-machine-learning", "com.docker.compose.version": "2.29.2", "desktop.docker.io/wsl-distro": "Ubuntu", "diun.enable": "true", "maintainer": "NVIDIA CORPORATION \u003ccudatools@nvidia.com\u003e", "org.opencontainers.image.created": "2024-09-27T18:45:11.094Z", "org.opencontainers.image.description": "High performance self-hosted photo and video management solution.", "org.opencontainers.image.licenses": "AGPL-3.0", "org.opencontainers.image.ref.name": "ubuntu", "org.opencontainers.image.revision": "8bbcd5c31e4a227f92864ae2977c4033bc0c50b7", "org.opencontainers.image.source": "https://github.com/immich-app/immich", "org.opencontainers.image.title": "immich", "org.opencontainers.image.url": "https://github.com/immich-app/immich", "org.opencontainers.image.version": "v1.116.2-cuda" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "d444d85a05d2a32589ae2193a58c9f24c5d75db510180bb550589b040b424919", "SandboxKey": "/var/run/docker/netns/d444d85a05d2", "Ports": { "3001/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "3001" } ], "3003/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "3003" } ] }, "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "MacAddress": "", "Networks": { "network_universal": { "IPAMConfig": null, "Links": null, "Aliases": [ "immich_machine_learning", "immich-machine-learning" ], "MacAddress": "02:42:ac:12:00:06", "DriverOpts": null, "NetworkID": "9349d3c58c25fe8732ca1dc2c76bd1b127f5a9b12197f0318f4ca3e400433802", "EndpointID": "6ceec61f70e3b20731742ad59c48da9638ead6bcc41eeda28355e25517d3fe9b", "Gateway": "172.18.0.1", "IPAddress": "172.18.0.6", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "DNSNames": [ "immich_machine_learning", "immich-machine-learning", "5873dd2becad" ] } } } } ] ```
Author
Owner

@jordanlambrecht commented on GitHub (Sep 30, 2024):

@bo0tzz And here's my Immich system settings:

{
  "ffmpeg": {
    "crf": 23,
    "threads": 0,
    "preset": "medium",
    "targetVideoCodec": "vp9",
    "acceptedVideoCodecs": [
      "vp9",
      "hevc",
      "h264"
    ],
    "targetAudioCodec": "aac",
    "acceptedAudioCodecs": [
      "aac",
      "mp3",
      "libopus"
    ],
    "acceptedContainers": [
      "mov",
      "ogg",
      "webm"
    ],
    "targetResolution": "original",
    "maxBitrate": "0",
    "bframes": -1,
    "refs": 0,
    "gopSize": 0,
    "npl": 0,
    "temporalAQ": true,
    "cqMode": "auto",
    "twoPass": true,
    "preferredHwDevice": "auto",
    "transcode": "required",
    "tonemap": "hable",
    "accel": "qsv",
    "accelDecode": false
  },
  "job": {
    "backgroundTask": {
      "concurrency": 5
    },
    "smartSearch": {
      "concurrency": 3
    },
    "metadataExtraction": {
      "concurrency": 20
    },
    "faceDetection": {
      "concurrency": 3
    },
    "search": {
      "concurrency": 5
    },
    "sidecar": {
      "concurrency": 2
    },
    "library": {
      "concurrency": 2
    },
    "migration": {
      "concurrency": 5
    },
    "thumbnailGeneration": {
      "concurrency": 2
    },
    "videoConversion": {
      "concurrency": 1
    },
    "notifications": {
      "concurrency": 5
    }
  },
  "logging": {
    "enabled": true,
    "level": "log"
  },
  "machineLearning": {
    "enabled": true,
    "url": <REDACTED>
    "clip": {
      "enabled": true,
      "modelName": "ViT-H-14-378-quickgelu__dfn5b"
    },
    "duplicateDetection": {
      "enabled": true,
      "maxDistance": 0.01
    },
    "facialRecognition": {
      "enabled": true,
      "modelName": "buffalo_l",
      "minScore": 0.7,
      "maxDistance": 0.5,
      "minFaces": 6
    }
  },
  "map": {
    "enabled": true,
    "lightStyle": "https://tiles.immich.cloud/v1/style/light.json",
    "darkStyle": "https://tiles.immich.cloud/v1/style/dark.json"
  },
  "reverseGeocoding": {
    "enabled": true
  },
  "metadata": {
    "faces": {
      "import": false
    }
  },
  "oauth": {
    "autoLaunch": false,
    "autoRegister": true,
    "buttonText": "Login with OAuth",
    "clientId": "",
    "clientSecret": "",
    "defaultStorageQuota": 0,
    "enabled": false,
    "issuerUrl": "",
    "mobileOverrideEnabled": false,
    "mobileRedirectUri": "",
    "scope": "openid email profile",
    "signingAlgorithm": "RS256",
    "profileSigningAlgorithm": "none",
    "storageLabelClaim": "preferred_username",
    "storageQuotaClaim": "immich_quota"
  },
  "passwordLogin": {
    "enabled": true
  },
  "storageTemplate": {
    "enabled": false,
    "hashVerificationEnabled": true,
    "template": "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"
  },
  "image": {
    "thumbnailFormat": "webp",
    "thumbnailSize": 480,
    "previewFormat": "webp",
    "previewSize": 1440,
    "quality": 100,
    "colorspace": "p3",
    "extractEmbedded": false
  },
  "newVersionCheck": {
    "enabled": true
  },
  "trash": {
    "enabled": true,
    "days": 30
  },
  "theme": {
    "customCss": ""
  },
  "library": {
    "scan": {
      "enabled": true,
      "cronExpression": "0 2 * * *"
    },
    "watch": {
      "enabled": false
    }
  },
  "server": {
    "externalDomain": <REDACTED>
    "loginPageMessage": "🤠 Yeehaw"
  },
  "notifications": {
    "smtp": {
      "enabled": true,
      "from": <REDACTED>,
      "replyTo": "",
      "transport": {
      <REDACTED>
      }
    }
  },
  "user": {
    "deleteDelay": 7
  }
}
@jordanlambrecht commented on GitHub (Sep 30, 2024): @bo0tzz And here's my Immich system settings: ```json { "ffmpeg": { "crf": 23, "threads": 0, "preset": "medium", "targetVideoCodec": "vp9", "acceptedVideoCodecs": [ "vp9", "hevc", "h264" ], "targetAudioCodec": "aac", "acceptedAudioCodecs": [ "aac", "mp3", "libopus" ], "acceptedContainers": [ "mov", "ogg", "webm" ], "targetResolution": "original", "maxBitrate": "0", "bframes": -1, "refs": 0, "gopSize": 0, "npl": 0, "temporalAQ": true, "cqMode": "auto", "twoPass": true, "preferredHwDevice": "auto", "transcode": "required", "tonemap": "hable", "accel": "qsv", "accelDecode": false }, "job": { "backgroundTask": { "concurrency": 5 }, "smartSearch": { "concurrency": 3 }, "metadataExtraction": { "concurrency": 20 }, "faceDetection": { "concurrency": 3 }, "search": { "concurrency": 5 }, "sidecar": { "concurrency": 2 }, "library": { "concurrency": 2 }, "migration": { "concurrency": 5 }, "thumbnailGeneration": { "concurrency": 2 }, "videoConversion": { "concurrency": 1 }, "notifications": { "concurrency": 5 } }, "logging": { "enabled": true, "level": "log" }, "machineLearning": { "enabled": true, "url": <REDACTED> "clip": { "enabled": true, "modelName": "ViT-H-14-378-quickgelu__dfn5b" }, "duplicateDetection": { "enabled": true, "maxDistance": 0.01 }, "facialRecognition": { "enabled": true, "modelName": "buffalo_l", "minScore": 0.7, "maxDistance": 0.5, "minFaces": 6 } }, "map": { "enabled": true, "lightStyle": "https://tiles.immich.cloud/v1/style/light.json", "darkStyle": "https://tiles.immich.cloud/v1/style/dark.json" }, "reverseGeocoding": { "enabled": true }, "metadata": { "faces": { "import": false } }, "oauth": { "autoLaunch": false, "autoRegister": true, "buttonText": "Login with OAuth", "clientId": "", "clientSecret": "", "defaultStorageQuota": 0, "enabled": false, "issuerUrl": "", "mobileOverrideEnabled": false, "mobileRedirectUri": "", "scope": "openid email profile", "signingAlgorithm": "RS256", "profileSigningAlgorithm": "none", "storageLabelClaim": "preferred_username", "storageQuotaClaim": "immich_quota" }, "passwordLogin": { "enabled": true }, "storageTemplate": { "enabled": false, "hashVerificationEnabled": true, "template": "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}" }, "image": { "thumbnailFormat": "webp", "thumbnailSize": 480, "previewFormat": "webp", "previewSize": 1440, "quality": 100, "colorspace": "p3", "extractEmbedded": false }, "newVersionCheck": { "enabled": true }, "trash": { "enabled": true, "days": 30 }, "theme": { "customCss": "" }, "library": { "scan": { "enabled": true, "cronExpression": "0 2 * * *" }, "watch": { "enabled": false } }, "server": { "externalDomain": <REDACTED> "loginPageMessage": "🤠 Yeehaw" }, "notifications": { "smtp": { "enabled": true, "from": <REDACTED>, "replyTo": "", "transport": { <REDACTED> } } }, "user": { "deleteDelay": 7 } } ```
Author
Owner

@bo0tzz commented on GitHub (Sep 30, 2024):

Hm, that all looks ok. What about the immich-server logs when smart search is running?

@bo0tzz commented on GitHub (Sep 30, 2024): Hm, that all looks ok. What about the immich-server logs when smart search is running?
Author
Owner

@jordanlambrecht commented on GitHub (Sep 30, 2024):

@bo0tzz Looks like it's all GET requests. The 'Waiting' counter via the UI is counting down rather quickly too- it'll decrease by around 30 every four seconds or so.

[Nest] 17  - 09/30/2024, 3:11:55 PM   DEBUG [Api:JobService~xm58dzdh] Handling command: queue=smartSearch,force=true
[Nest] 17  - 09/30/2024, 3:11:55 PM   DEBUG [Api:LoggingInterceptor~xm58dzdh] PUT /api/jobs/smartSearch 200 47.88ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:11:55 PM VERBOSE [Api:LoggingInterceptor~xm58dzdh] {"command":"start","force":true}
[Nest] 17  - 09/30/2024, 3:11:55 PM   DEBUG [Api:LoggingInterceptor~zrjmzznj] GET /api/jobs 200 21.67ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:00 PM   DEBUG [Api:LoggingInterceptor~yhi1sr6b] GET /api/jobs 200 16.74ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:05 PM   DEBUG [Api:LoggingInterceptor~cxf6vdeb] GET /api/jobs 200 27.45ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:10 PM   DEBUG [Api:LoggingInterceptor~2zs6un84] GET /api/jobs 200 59.44ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:15 PM   DEBUG [Api:LoggingInterceptor~wzlv4iqs] GET /api/jobs 200 29.01ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:21 PM   DEBUG [Api:LoggingInterceptor~5etd3lfm] GET /api/jobs 200 73.89ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:26 PM   DEBUG [Api:LoggingInterceptor~gt4xdsrt] GET /api/jobs 200 248.78ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:31 PM   DEBUG [Api:LoggingInterceptor~lju0zopm] GET /api/jobs 200 7.93ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:36 PM   DEBUG [Api:LoggingInterceptor~e236r5pd] GET /api/jobs 200 39.17ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:41 PM   DEBUG [Api:LoggingInterceptor~lehy0otp] GET /api/jobs 200 63.64ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:46 PM   DEBUG [Api:LoggingInterceptor~ec6afr8e] GET /api/jobs 200 66.33ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:52 PM   DEBUG [Api:LoggingInterceptor~y1027igf] GET /api/jobs 200 29.71ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:12:57 PM   DEBUG [Api:LoggingInterceptor~hnykj9st] GET /api/jobs 200 12.60ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:02 PM   DEBUG [Api:LoggingInterceptor~weatckns] GET /api/jobs 200 20.29ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:07 PM   DEBUG [Api:LoggingInterceptor~lcczd05k] GET /api/jobs 200 26.81ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:12 PM   DEBUG [Api:LoggingInterceptor~p3buhkvn] GET /api/jobs 200 23.49ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:17 PM   DEBUG [Api:LoggingInterceptor~au2sxv5w] GET /api/jobs 200 18.49ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:22 PM   DEBUG [Api:LoggingInterceptor~62aytufl] GET /api/jobs 200 8.66ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:27 PM   DEBUG [Api:LoggingInterceptor~r2hccsj9] GET /api/jobs 200 20.45ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:33 PM   DEBUG [Api:LoggingInterceptor~wme2vjk2] GET /api/jobs 200 37.93ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:38 PM   DEBUG [Api:LoggingInterceptor~dghpcdvp] GET /api/jobs 200 28.88ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:43 PM   DEBUG [Api:LoggingInterceptor~8xhevvxh] GET /api/jobs 200 17.85ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:48 PM   DEBUG [Api:LoggingInterceptor~7zusirym] GET /api/jobs 200 22.73ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:53 PM   DEBUG [Api:LoggingInterceptor~lczz6chr] GET /api/jobs 200 54.10ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:13:58 PM   DEBUG [Api:LoggingInterceptor~vn05cp86] GET /api/jobs 200 31.09ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:03 PM   DEBUG [Api:LoggingInterceptor~yhefi0un] GET /api/jobs 200 59.41ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:08 PM   DEBUG [Api:LoggingInterceptor~oicbr14q] GET /api/jobs 200 16.52ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:13 PM   DEBUG [Api:LoggingInterceptor~07h7e0lu] GET /api/jobs 200 18.48ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:19 PM   DEBUG [Api:LoggingInterceptor~d1v949lm] GET /api/jobs 200 30.21ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:24 PM   DEBUG [Api:LoggingInterceptor~dsd5mtqk] GET /api/jobs 200 16.29ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:29 PM   DEBUG [Api:LoggingInterceptor~3x9n3kyj] GET /api/jobs 200 36.79ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:34 PM   DEBUG [Api:LoggingInterceptor~ye0n9z7p] GET /api/jobs 200 76.28ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:40 PM   DEBUG [Api:LoggingInterceptor~543rf85b] GET /api/jobs 200 12.96ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:45 PM   DEBUG [Api:LoggingInterceptor~mme67zua] GET /api/jobs 200 35.04ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:50 PM   DEBUG [Api:LoggingInterceptor~t9u336lb] GET /api/jobs 200 47.13ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:14:55 PM   DEBUG [Api:LoggingInterceptor~vg08tk4m] GET /api/jobs 200 27.65ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:15:00 PM   DEBUG [Api:LoggingInterceptor~0ji84rdl] GET /api/jobs 200 14.20ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:15:05 PM   DEBUG [Api:LoggingInterceptor~ntxxfqqp] GET /api/jobs 200 28.97ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:15:10 PM   DEBUG [Api:LoggingInterceptor~j4xao5ha] GET /api/jobs 200 11.85ms 192.168.X.X
[Nest] 17  - 09/30/2024, 3:15:16 PM   DEBUG [Api:LoggingInterceptor~ngi4td3u] GET /api/jobs 200 93.58ms 192.168.X.X
@jordanlambrecht commented on GitHub (Sep 30, 2024): @bo0tzz Looks like it's all GET requests. The 'Waiting' counter via the UI is counting down rather quickly too- it'll decrease by around 30 every four seconds or so. ```shell [Nest] 17 - 09/30/2024, 3:11:55 PM DEBUG [Api:JobService~xm58dzdh] Handling command: queue=smartSearch,force=true [Nest] 17 - 09/30/2024, 3:11:55 PM DEBUG [Api:LoggingInterceptor~xm58dzdh] PUT /api/jobs/smartSearch 200 47.88ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:11:55 PM VERBOSE [Api:LoggingInterceptor~xm58dzdh] {"command":"start","force":true} [Nest] 17 - 09/30/2024, 3:11:55 PM DEBUG [Api:LoggingInterceptor~zrjmzznj] GET /api/jobs 200 21.67ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:00 PM DEBUG [Api:LoggingInterceptor~yhi1sr6b] GET /api/jobs 200 16.74ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:05 PM DEBUG [Api:LoggingInterceptor~cxf6vdeb] GET /api/jobs 200 27.45ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:10 PM DEBUG [Api:LoggingInterceptor~2zs6un84] GET /api/jobs 200 59.44ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:15 PM DEBUG [Api:LoggingInterceptor~wzlv4iqs] GET /api/jobs 200 29.01ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:21 PM DEBUG [Api:LoggingInterceptor~5etd3lfm] GET /api/jobs 200 73.89ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:26 PM DEBUG [Api:LoggingInterceptor~gt4xdsrt] GET /api/jobs 200 248.78ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:31 PM DEBUG [Api:LoggingInterceptor~lju0zopm] GET /api/jobs 200 7.93ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:36 PM DEBUG [Api:LoggingInterceptor~e236r5pd] GET /api/jobs 200 39.17ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:41 PM DEBUG [Api:LoggingInterceptor~lehy0otp] GET /api/jobs 200 63.64ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:46 PM DEBUG [Api:LoggingInterceptor~ec6afr8e] GET /api/jobs 200 66.33ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:52 PM DEBUG [Api:LoggingInterceptor~y1027igf] GET /api/jobs 200 29.71ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:12:57 PM DEBUG [Api:LoggingInterceptor~hnykj9st] GET /api/jobs 200 12.60ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:02 PM DEBUG [Api:LoggingInterceptor~weatckns] GET /api/jobs 200 20.29ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:07 PM DEBUG [Api:LoggingInterceptor~lcczd05k] GET /api/jobs 200 26.81ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:12 PM DEBUG [Api:LoggingInterceptor~p3buhkvn] GET /api/jobs 200 23.49ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:17 PM DEBUG [Api:LoggingInterceptor~au2sxv5w] GET /api/jobs 200 18.49ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:22 PM DEBUG [Api:LoggingInterceptor~62aytufl] GET /api/jobs 200 8.66ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:27 PM DEBUG [Api:LoggingInterceptor~r2hccsj9] GET /api/jobs 200 20.45ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:33 PM DEBUG [Api:LoggingInterceptor~wme2vjk2] GET /api/jobs 200 37.93ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:38 PM DEBUG [Api:LoggingInterceptor~dghpcdvp] GET /api/jobs 200 28.88ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:43 PM DEBUG [Api:LoggingInterceptor~8xhevvxh] GET /api/jobs 200 17.85ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:48 PM DEBUG [Api:LoggingInterceptor~7zusirym] GET /api/jobs 200 22.73ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:53 PM DEBUG [Api:LoggingInterceptor~lczz6chr] GET /api/jobs 200 54.10ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:13:58 PM DEBUG [Api:LoggingInterceptor~vn05cp86] GET /api/jobs 200 31.09ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:03 PM DEBUG [Api:LoggingInterceptor~yhefi0un] GET /api/jobs 200 59.41ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:08 PM DEBUG [Api:LoggingInterceptor~oicbr14q] GET /api/jobs 200 16.52ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:13 PM DEBUG [Api:LoggingInterceptor~07h7e0lu] GET /api/jobs 200 18.48ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:19 PM DEBUG [Api:LoggingInterceptor~d1v949lm] GET /api/jobs 200 30.21ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:24 PM DEBUG [Api:LoggingInterceptor~dsd5mtqk] GET /api/jobs 200 16.29ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:29 PM DEBUG [Api:LoggingInterceptor~3x9n3kyj] GET /api/jobs 200 36.79ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:34 PM DEBUG [Api:LoggingInterceptor~ye0n9z7p] GET /api/jobs 200 76.28ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:40 PM DEBUG [Api:LoggingInterceptor~543rf85b] GET /api/jobs 200 12.96ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:45 PM DEBUG [Api:LoggingInterceptor~mme67zua] GET /api/jobs 200 35.04ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:50 PM DEBUG [Api:LoggingInterceptor~t9u336lb] GET /api/jobs 200 47.13ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:14:55 PM DEBUG [Api:LoggingInterceptor~vg08tk4m] GET /api/jobs 200 27.65ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:15:00 PM DEBUG [Api:LoggingInterceptor~0ji84rdl] GET /api/jobs 200 14.20ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:15:05 PM DEBUG [Api:LoggingInterceptor~ntxxfqqp] GET /api/jobs 200 28.97ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:15:10 PM DEBUG [Api:LoggingInterceptor~j4xao5ha] GET /api/jobs 200 11.85ms 192.168.X.X [Nest] 17 - 09/30/2024, 3:15:16 PM DEBUG [Api:LoggingInterceptor~ngi4td3u] GET /api/jobs 200 93.58ms 192.168.X.X ```
Author
Owner

@jordanlambrecht commented on GitHub (Sep 30, 2024):

Here's the logs for when I rebuild/restart the ML container:

 ✔ Container immich_machine_learning  Started                                                                                          1.3s
[09/30/24 20:22:22] INFO     Starting gunicorn 23.0.0
[09/30/24 20:22:22] INFO     Listening at: http://[::]:3003 (9)
[09/30/24 20:22:22] INFO     Using worker: app.config.CustomUvicornWorker
[09/30/24 20:22:22] INFO     Booting worker with pid: 10
[09/30/24 20:22:23] DEBUG    Could not load ANN shared libraries, using ONNX:
                             libmali.so: cannot open shared object file: No such
                             file or directory
[09/30/24 20:22:26] INFO     Started server process [10]
[09/30/24 20:22:26] INFO     Waiting for application startup.
[09/30/24 20:22:26] INFO     Created in-memory cache with unloading disabled.
[09/30/24 20:22:26] INFO     Initialized request thread pool with 12 threads.
[09/30/24 20:22:26] INFO     Preloading models:
                             clip='ViT-H-14-378-quickgelu__dfn5b'
                             facial_recognition='buffalo_l'
[09/30/24 20:22:26] DEBUG    Setting model format to onnx
[09/30/24 20:22:26] INFO     Loading textual model
                             'ViT-H-14-378-quickgelu__dfn5b' to memory
[09/30/24 20:22:26] DEBUG    Available ORT providers: {'CPUExecutionProvider',
                             'TensorrtExecutionProvider',
                             'CUDAExecutionProvider'}
[09/30/24 20:22:26] INFO     Setting execution providers to
                             ['CUDAExecutionProvider', 'CPUExecutionProvider'],
                             in descending order of preference
[09/30/24 20:22:26] DEBUG    Setting execution provider options to
                             [{'arena_extend_strategy': 'kSameAsRequested'},
                             {'arena_extend_strategy': 'kSameAsRequested'}]
[09/30/24 20:22:26] DEBUG    Setting execution_mode to ORT_SEQUENTIAL
[09/30/24 20:22:26] DEBUG    Setting inter_op_num_threads to 0
[09/30/24 20:22:26] DEBUG    Setting intra_op_num_threads to 0
2024-09-30 20:22:28.736839973 [W:onnxruntime:, transformer_memcpy.cc:74 ApplyImpl] 2 Memcpy nodes are added
                              to the graph main_graph for CUDAExecutionProvider. It might have negative impact on
                              performance (including unable to run CUDA graph). 
                              Set session_options.log_severity_level=1 to see the detail logs before this message.
[09/30/24 20:22:29] DEBUG    Loading tokenizer for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Loading model config for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Loaded model config for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Loading tokenizer config for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Loaded tokenizer config for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Loaded tokenizer for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Setting model format to onnx
[09/30/24 20:22:29] INFO     Loading visual model
                             'ViT-H-14-378-quickgelu__dfn5b' to memory
[09/30/24 20:22:29] DEBUG    Loading visual preprocessing config for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Loaded visual preprocessing config for CLIP model
                             'ViT-H-14-378-quickgelu__dfn5b'
[09/30/24 20:22:29] DEBUG    Available ORT providers: {'CPUExecutionProvider',
                             'TensorrtExecutionProvider',
                             'CUDAExecutionProvider'}
[09/30/24 20:22:29] INFO     Setting execution providers to
                             ['CUDAExecutionProvider', 'CPUExecutionProvider'],
                             in descending order of preference
[09/30/24 20:22:29] DEBUG    Setting execution provider options to
                             [{'arena_extend_strategy': 'kSameAsRequested'},
                             {'arena_extend_strategy': 'kSameAsRequested'}]
[09/30/24 20:22:29] DEBUG    Setting execution_mode to ORT_SEQUENTIAL
[09/30/24 20:22:29] DEBUG    Setting inter_op_num_threads to 0
[09/30/24 20:22:29] DEBUG    Setting intra_op_num_threads to 0
[09/30/24 20:22:32] DEBUG    Setting model format to onnx
[09/30/24 20:22:32] INFO     Loading detection model 'buffalo_l' to memory
[09/30/24 20:22:32] DEBUG    Available ORT providers: {'CPUExecutionProvider',
                             'TensorrtExecutionProvider',
                             'CUDAExecutionProvider'}
[09/30/24 20:22:32] INFO     Setting execution providers to
                             ['CUDAExecutionProvider', 'CPUExecutionProvider'],
                             in descending order of preference
[09/30/24 20:22:32] DEBUG    Setting execution provider options to
                             [{'arena_extend_strategy': 'kSameAsRequested'},
                             {'arena_extend_strategy': 'kSameAsRequested'}]
[09/30/24 20:22:32] DEBUG    Setting execution_mode to ORT_SEQUENTIAL
[09/30/24 20:22:32] DEBUG    Setting inter_op_num_threads to 0
[09/30/24 20:22:32] DEBUG    Setting intra_op_num_threads to 0
[09/30/24 20:22:32] DEBUG    Setting model format to onnx
[09/30/24 20:22:32] INFO     Loading recognition model 'buffalo_l' to memory
[09/30/24 20:22:32] DEBUG    Available ORT providers: {'CPUExecutionProvider',
                             'TensorrtExecutionProvider',
                             'CUDAExecutionProvider'}
[09/30/24 20:22:32] INFO     Setting execution providers to
                             ['CUDAExecutionProvider', 'CPUExecutionProvider'],
                             in descending order of preference
[09/30/24 20:22:32] DEBUG    Setting execution provider options to
                             [{'arena_extend_strategy': 'kSameAsRequested'},
                             {'arena_extend_strategy': 'kSameAsRequested'}]
[09/30/24 20:22:32] DEBUG    Setting execution_mode to ORT_SEQUENTIAL
[09/30/24 20:22:32] DEBUG    Setting inter_op_num_threads to 0
[09/30/24 20:22:32] DEBUG    Setting intra_op_num_threads to 0
[09/30/24 20:22:33] INFO     Application startup complete.
@jordanlambrecht commented on GitHub (Sep 30, 2024): Here's the logs for when I rebuild/restart the ML container: ```log ✔ Container immich_machine_learning Started 1.3s [09/30/24 20:22:22] INFO Starting gunicorn 23.0.0 [09/30/24 20:22:22] INFO Listening at: http://[::]:3003 (9) [09/30/24 20:22:22] INFO Using worker: app.config.CustomUvicornWorker [09/30/24 20:22:22] INFO Booting worker with pid: 10 [09/30/24 20:22:23] DEBUG Could not load ANN shared libraries, using ONNX: libmali.so: cannot open shared object file: No such file or directory [09/30/24 20:22:26] INFO Started server process [10] [09/30/24 20:22:26] INFO Waiting for application startup. [09/30/24 20:22:26] INFO Created in-memory cache with unloading disabled. [09/30/24 20:22:26] INFO Initialized request thread pool with 12 threads. [09/30/24 20:22:26] INFO Preloading models: clip='ViT-H-14-378-quickgelu__dfn5b' facial_recognition='buffalo_l' [09/30/24 20:22:26] DEBUG Setting model format to onnx [09/30/24 20:22:26] INFO Loading textual model 'ViT-H-14-378-quickgelu__dfn5b' to memory [09/30/24 20:22:26] DEBUG Available ORT providers: {'CPUExecutionProvider', 'TensorrtExecutionProvider', 'CUDAExecutionProvider'} [09/30/24 20:22:26] INFO Setting execution providers to ['CUDAExecutionProvider', 'CPUExecutionProvider'], in descending order of preference [09/30/24 20:22:26] DEBUG Setting execution provider options to [{'arena_extend_strategy': 'kSameAsRequested'}, {'arena_extend_strategy': 'kSameAsRequested'}] [09/30/24 20:22:26] DEBUG Setting execution_mode to ORT_SEQUENTIAL [09/30/24 20:22:26] DEBUG Setting inter_op_num_threads to 0 [09/30/24 20:22:26] DEBUG Setting intra_op_num_threads to 0 2024-09-30 20:22:28.736839973 [W:onnxruntime:, transformer_memcpy.cc:74 ApplyImpl] 2 Memcpy nodes are added to the graph main_graph for CUDAExecutionProvider. It might have negative impact on performance (including unable to run CUDA graph). Set session_options.log_severity_level=1 to see the detail logs before this message. [09/30/24 20:22:29] DEBUG Loading tokenizer for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Loading model config for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Loaded model config for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Loading tokenizer config for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Loaded tokenizer config for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Loaded tokenizer for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Setting model format to onnx [09/30/24 20:22:29] INFO Loading visual model 'ViT-H-14-378-quickgelu__dfn5b' to memory [09/30/24 20:22:29] DEBUG Loading visual preprocessing config for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Loaded visual preprocessing config for CLIP model 'ViT-H-14-378-quickgelu__dfn5b' [09/30/24 20:22:29] DEBUG Available ORT providers: {'CPUExecutionProvider', 'TensorrtExecutionProvider', 'CUDAExecutionProvider'} [09/30/24 20:22:29] INFO Setting execution providers to ['CUDAExecutionProvider', 'CPUExecutionProvider'], in descending order of preference [09/30/24 20:22:29] DEBUG Setting execution provider options to [{'arena_extend_strategy': 'kSameAsRequested'}, {'arena_extend_strategy': 'kSameAsRequested'}] [09/30/24 20:22:29] DEBUG Setting execution_mode to ORT_SEQUENTIAL [09/30/24 20:22:29] DEBUG Setting inter_op_num_threads to 0 [09/30/24 20:22:29] DEBUG Setting intra_op_num_threads to 0 [09/30/24 20:22:32] DEBUG Setting model format to onnx [09/30/24 20:22:32] INFO Loading detection model 'buffalo_l' to memory [09/30/24 20:22:32] DEBUG Available ORT providers: {'CPUExecutionProvider', 'TensorrtExecutionProvider', 'CUDAExecutionProvider'} [09/30/24 20:22:32] INFO Setting execution providers to ['CUDAExecutionProvider', 'CPUExecutionProvider'], in descending order of preference [09/30/24 20:22:32] DEBUG Setting execution provider options to [{'arena_extend_strategy': 'kSameAsRequested'}, {'arena_extend_strategy': 'kSameAsRequested'}] [09/30/24 20:22:32] DEBUG Setting execution_mode to ORT_SEQUENTIAL [09/30/24 20:22:32] DEBUG Setting inter_op_num_threads to 0 [09/30/24 20:22:32] DEBUG Setting intra_op_num_threads to 0 [09/30/24 20:22:32] DEBUG Setting model format to onnx [09/30/24 20:22:32] INFO Loading recognition model 'buffalo_l' to memory [09/30/24 20:22:32] DEBUG Available ORT providers: {'CPUExecutionProvider', 'TensorrtExecutionProvider', 'CUDAExecutionProvider'} [09/30/24 20:22:32] INFO Setting execution providers to ['CUDAExecutionProvider', 'CPUExecutionProvider'], in descending order of preference [09/30/24 20:22:32] DEBUG Setting execution provider options to [{'arena_extend_strategy': 'kSameAsRequested'}, {'arena_extend_strategy': 'kSameAsRequested'}] [09/30/24 20:22:32] DEBUG Setting execution_mode to ORT_SEQUENTIAL [09/30/24 20:22:32] DEBUG Setting inter_op_num_threads to 0 [09/30/24 20:22:32] DEBUG Setting intra_op_num_threads to 0 [09/30/24 20:22:33] INFO Application startup complete. ```
Author
Owner

@mertalev commented on GitHub (Sep 30, 2024):

It seems like it's sending empty files to the ML service. Did you get any errors during thumbnail generation?

@mertalev commented on GitHub (Sep 30, 2024): It seems like it's sending empty files to the ML service. Did you get any errors during thumbnail generation?
Author
Owner

@jordanlambrecht commented on GitHub (Oct 1, 2024):

Actually, yup, looks like it:

[Nest] 17  - 09/30/2024, 8:17:13 PM   DEBUG [Api:JobService~obyoea2f] Handling command: queue=thumbnailGeneration,force=false
[Nest] 17  - 09/30/2024, 8:17:13 PM   DEBUG [Api:LoggingInterceptor~obyoea2f] PUT /api/jobs/thumbnailGeneration 200 30.57ms 192.168.65.1
[Nest] 17  - 09/30/2024, 8:17:13 PM VERBOSE [Api:LoggingInterceptor~obyoea2f] {"command":"pause","force":false}
[Nest] 7  - 09/30/2024, 8:17:13 PM   ERROR [Microservices:JobService] Unable to run job handler (thumbnailGeneration/generate-preview): Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/ae/1f/ae1fef18-7116-445e-99e7-14caae4036e8.HEIC
[Nest] 7  - 09/30/2024, 8:17:13 PM   ERROR [Microservices:JobService] Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/ae/1f/ae1fef18-7116-445e-99e7-14caae4036e8.HEIC
    at Sharp.toFile (/usr/src/app/node_modules/sharp/lib/output.js:90:19)
    at MediaRepository.generateThumbnail (/usr/src/app/dist/repositories/media.repository.js:69:14)
    at descriptor.value (/usr/src/app/dist/utils/instrumentation.js:80:35)
    at MediaService.generateThumbnail (/usr/src/app/dist/services/media.service.js:174:48)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async MediaService.handleGeneratePreview (/usr/src/app/dist/services/media.service.js:139:29)
    at async /usr/src/app/dist/services/job.service.js:171: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  - 09/30/2024, 8:17:13 PM   ERROR [Microservices:JobService] Object:
{
  "id": "34770545-9220-40e6-8fee-cb50c7e52f5c"
}

[Nest] 7  - 09/30/2024, 8:17:13 PM   ERROR [Microservices:JobService] Unable to run job handler (thumbnailGeneration/generate-preview): Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/aa/5c/aa5c87c4-bbdf-4fe3-980f-10fd686a7e2d.DNG
[Nest] 7  - 09/30/2024, 8:17:13 PM   ERROR [Microservices:JobService] Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/aa/5c/aa5c87c4-bbdf-4fe3-980f-10fd686a7e2d.DNG
    at Sharp.toFile (/usr/src/app/node_modules/sharp/lib/output.js:90:19)
    at MediaRepository.generateThumbnail (/usr/src/app/dist/repositories/media.repository.js:69:14)
    at descriptor.value (/usr/src/app/dist/utils/instrumentation.js:80:35)
    at MediaService.generateThumbnail (/usr/src/app/dist/services/media.service.js:174:48)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async MediaService.handleGeneratePreview (/usr/src/app/dist/services/media.service.js:139:29)
    at async /usr/src/app/dist/services/job.service.js:171: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  - 09/30/2024, 8:17:13 PM   ERROR [Microservices:JobService] Object:
{
  "id": "bcee9447-2939-4a30-9e53-19ada620ce1a"
}
@jordanlambrecht commented on GitHub (Oct 1, 2024): Actually, yup, looks like it: ```shell [Nest] 17 - 09/30/2024, 8:17:13 PM DEBUG [Api:JobService~obyoea2f] Handling command: queue=thumbnailGeneration,force=false [Nest] 17 - 09/30/2024, 8:17:13 PM DEBUG [Api:LoggingInterceptor~obyoea2f] PUT /api/jobs/thumbnailGeneration 200 30.57ms 192.168.65.1 [Nest] 17 - 09/30/2024, 8:17:13 PM VERBOSE [Api:LoggingInterceptor~obyoea2f] {"command":"pause","force":false} [Nest] 7 - 09/30/2024, 8:17:13 PM ERROR [Microservices:JobService] Unable to run job handler (thumbnailGeneration/generate-preview): Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/ae/1f/ae1fef18-7116-445e-99e7-14caae4036e8.HEIC [Nest] 7 - 09/30/2024, 8:17:13 PM ERROR [Microservices:JobService] Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/ae/1f/ae1fef18-7116-445e-99e7-14caae4036e8.HEIC at Sharp.toFile (/usr/src/app/node_modules/sharp/lib/output.js:90:19) at MediaRepository.generateThumbnail (/usr/src/app/dist/repositories/media.repository.js:69:14) at descriptor.value (/usr/src/app/dist/utils/instrumentation.js:80:35) at MediaService.generateThumbnail (/usr/src/app/dist/services/media.service.js:174:48) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async MediaService.handleGeneratePreview (/usr/src/app/dist/services/media.service.js:139:29) at async /usr/src/app/dist/services/job.service.js:171: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 - 09/30/2024, 8:17:13 PM ERROR [Microservices:JobService] Object: { "id": "34770545-9220-40e6-8fee-cb50c7e52f5c" } [Nest] 7 - 09/30/2024, 8:17:13 PM ERROR [Microservices:JobService] Unable to run job handler (thumbnailGeneration/generate-preview): Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/aa/5c/aa5c87c4-bbdf-4fe3-980f-10fd686a7e2d.DNG [Nest] 7 - 09/30/2024, 8:17:13 PM ERROR [Microservices:JobService] Error: Input file is missing: upload/upload/1e50eade-0f3f-4c93-9c4f-ce59db313bcb/aa/5c/aa5c87c4-bbdf-4fe3-980f-10fd686a7e2d.DNG at Sharp.toFile (/usr/src/app/node_modules/sharp/lib/output.js:90:19) at MediaRepository.generateThumbnail (/usr/src/app/dist/repositories/media.repository.js:69:14) at descriptor.value (/usr/src/app/dist/utils/instrumentation.js:80:35) at MediaService.generateThumbnail (/usr/src/app/dist/services/media.service.js:174:48) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async MediaService.handleGeneratePreview (/usr/src/app/dist/services/media.service.js:139:29) at async /usr/src/app/dist/services/job.service.js:171: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 - 09/30/2024, 8:17:13 PM ERROR [Microservices:JobService] Object: { "id": "bcee9447-2939-4a30-9e53-19ada620ce1a" } ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#4446