Skip to content

Server images are not loaded #26631

@filips123

Description

@filips123

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

  • Yes

The bug

Images from server (that are not stored locally on device) are not displayed properly in the Immich Android app. Instead, just a very blurred thumbnail is displayed, even after opening the image. The same also happens on another device (but obviously with different images). However, all images are displayed correctly on the Immich web app.

The issue only started happening lately, but I don't remember exactly when.

The OS that Immich Server is running on

Debian 13

Version of Immich Server

v2.5.6

Version of Immich Mobile App

v2.5.6 build 3037

Platform with the issue

  • Server
  • Web
  • Mobile

Device make and model

Samsung S24, Android 16

Your docker-compose.yml content

services:
  server:
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    restart: unless-stopped
    user: "505:505"
    depends_on:
      - redis
      - database
    env_file:
      - .env
    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
    networks:
      immich:
      caddy:
        aliases:
          - immich
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges=true
    extends:
      file: hwaccel.transcoding.yaml
      service: quicksync # Set to one of [nvenc, quicksync, rkmpp, vaapi] for accelerated transcoding

  machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    restart: unless-stopped
    user: "505:505"
    env_file:
      - .env
    volumes:
      - ./cache/models:/cache
      - ./cache/models-cache:/.cache
      - ./cache/models-config:/.config
    networks:
      - immich
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges=true
    extends:
      file: hwaccel.ml.yaml
      service: cpu # Set to one of [armnn, cuda, rocm, openvino, rknn] for accelerated inference

  redis:
    image: docker.io/valkey/valkey:8
    restart: unless-stopped
    user: "505:505"
    volumes:
      - ./cache/redis:/data
    networks:
      - immich
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges=true
    healthcheck:
      test: redis-cli ping || exit 1

  database:
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    restart: unless-stopped
    user: "505:505"
    environment:
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - ${DB_LOCATION}:/var/lib/postgresql/data
    networks:
      - immich
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges=true

networks:
  immich:
    name: immich

  caddy:
    external: true

Your .env content

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

# The Immich version to use
IMMICH_VERSION=release

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

# The location where your database files are stored
DB_LOCATION=./postgres

# The timezone of your server
TZ=TIMEZONE

# Connection settings for PostgreSQL database
DB_DATABASE_NAME=immich
DB_USERNAME=USERNAME
DB_PASSWORD=PASSWORD

Reproduction steps

  1. Open Immich app on Android.
  2. Try to view any image not stored locally on the device.
  3. Only a very blurred version of image will be displayed.

Relevant log output

2026-03-01 23:13:34.023294 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:10:51.578559 | info     | HashService          | Hashing took - 3ms |
2026-03-01 23:10:51.575152 | info     | HashService          | Starting hashing of assets |
2026-03-01 23:10:49.530067 | info     | SyncApiRepository    | Remote Sync completed in 199ms |
2026-03-01 23:10:49.370293 | info     | DeviceSyncService    | Device sync took - 98ms |
2026-03-01 23:10:49.370129 | info     | DeviceSyncService    | Full device sync took - 98ms |
2026-03-01 23:10:49.270659 | info     | SyncStreamService    | Remote sync request for user |
2026-03-01 23:10:48.692390 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:10:20.544281 | info     | HashService          | Hashing took - 10ms |
2026-03-01 23:10:20.533274 | info     | HashService          | Starting hashing of assets |
2026-03-01 23:10:18.439311 | info     | SyncApiRepository    | Remote Sync completed in 207ms |
2026-03-01 23:10:18.382876 | info     | DeviceSyncService    | Device sync took - 223ms |
2026-03-01 23:10:18.382695 | info     | DeviceSyncService    | Full device sync took - 223ms |
2026-03-01 23:10:18.157186 | info     | SyncStreamService    | Remote sync request for user |
2026-03-01 23:10:17.458946 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:10:00.518180 | info     | HashService          | Hashing took - 10ms |
2026-03-01 23:10:00.507848 | info     | HashService          | Starting hashing of assets |
2026-03-01 23:09:58.421194 | info     | SyncApiRepository    | Remote Sync completed in 174ms |
2026-03-01 23:09:58.243295 | info     | DeviceSyncService    | Device sync took - 49ms |
2026-03-01 23:09:58.243217 | info     | DeviceSyncService    | Full device sync took - 49ms |
2026-03-01 23:09:58.192587 | info     | SyncStreamService    | Remote sync request for user |
2026-03-01 23:09:57.570969 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:08:23.376469 | info     | HashService          | Hashing took - 1ms |
2026-03-01 23:08:23.374511 | info     | HashService          | Starting hashing of assets |
2026-03-01 23:08:21.338086 | info     | SyncApiRepository    | Remote Sync completed in 154ms |
2026-03-01 23:08:21.302199 | info     | DeviceSyncService    | Device sync took - 152ms |
2026-03-01 23:08:21.302107 | info     | DeviceSyncService    | Full device sync took - 152ms |
2026-03-01 23:08:21.150280 | info     | SyncStreamService    | Remote sync request for user |
2026-03-01 23:08:20.590990 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:07:45.963140 | info     | HashService          | Hashing took - 9ms |
2026-03-01 23:07:45.953465 | info     | HashService          | Starting hashing of assets |
2026-03-01 23:07:43.865347 | info     | SyncApiRepository    | Remote Sync completed in 120ms |
2026-03-01 23:07:43.799229 | info     | DeviceSyncService    | Device sync took - 84ms |
2026-03-01 23:07:43.799157 | info     | DeviceSyncService    | Full device sync took - 84ms |
2026-03-01 23:07:43.714044 | info     | SyncStreamService    | Remote sync request for user |
2026-03-01 23:07:43.129927 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:07:22.087699 | info     | HashService          | Hashing took - 13ms |
2026-03-01 23:07:22.074557 | info     | HashService          | Starting hashing of assets |
2026-03-01 23:07:19.976464 | info     | SyncApiRepository    | Remote Sync completed in 139ms |
2026-03-01 23:07:19.897500 | info     | DeviceSyncService    | Device sync took - 104ms |
2026-03-01 23:07:19.897335 | info     | DeviceSyncService    | Full device sync took - 104ms |
2026-03-01 23:07:19.793423 | info     | SyncStreamService    | Remote sync request for user |
2026-03-01 23:07:19.235053 | info     | AppLifeCycleNotifier | Using server URL: null |
2026-03-01 23:06:52.179276 | severe   | ThumbnailWidget      | Error loading image: PlatformException(ms, m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false, Cause: null, Stacktrace: m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
	at org.chromium.net.impl.CronetUrlRequest.onError(:com.google.android.gms.dynamite_cronetdynamite@260534035@26.05.34 (260400-0):3)
, null) | PlatformException(ms, m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false, Cause: null, Stacktrace: m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
	at org.chromium.net.impl.CronetUrlRequest.onError(:com.google.android.gms.dynamite_cronetdynamite@260534035@26.05.34 (260400-0):3)
, null) |
#0      RemoteImageApi.requestImage (package:immich_mobile/platform/remote_image_api.g.dart:69)
<asynchronous suspension>
#1      RemoteImageRequest.load (package:immich_mobile/infrastructure/loaders/remote_image_request.dart:15)
<asynchronous suspension>
#2      CancellableImageProviderMixin.loadRequest (package:immich_mobile/presentation/widgets/images/image_provider.dart:59)
<asynchronous suspension>
#3      new OneFramePlaceholderImageStreamCompleter.<anonymous closure> (package:immich_mobile/presentation/widgets/images/one_frame_multi_image_stream_completer.dart:33)
<asynchronous suspension>

2026-03-01 23:06:51.732404 | severe   | ThumbnailWidget      | Error loading image: PlatformException(ms, m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false, Cause: null, Stacktrace: m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
	at org.chromium.net.impl.CronetUrlRequest.onError(:com.google.android.gms.dynamite_cronetdynamite@260534035@26.05.34 (260400-0):3)
, null) | PlatformException(ms, m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false, Cause: null, Stacktrace: m1.ms: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
	at org.chromium.net.impl.CronetUrlRequest.onError(:com.google.android.gms.dynamite_cronetdynamite@260534035@26.05.34 (260400-0):3)
, null) |
#0      RemoteImageApi.requestImage (package:immich_mobile/platform/remote_image_api.g.dart:69)
<asynchronous suspension>
#1      RemoteImageRequest.load (package:immich_mobile/infrastructure/loaders/remote_image_request.dart:15)
<asynchronous suspension>
#2      CancellableImageProviderMixin.loadRequest (package:immich_mobile/presentation/widgets/images/image_provider.dart:59)
<asynchronous suspension>
#3      new OneFramePlaceholderImageStreamCompleter.<anonymous closure> (package:immich_mobile/presentation/widgets/images/one_frame_multi_image_stream_completer.dart:33)
<asynchronous suspension>

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    To triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions