immich icon indicating copy to clipboard operation
immich copied to clipboard

Android App crash with large image

Open revilo951 opened this issue 1 year ago • 16 comments

The bug

Android app crashes when opening a large (200MP) image.

The OS that Immich Server is running on

Docker, on Ubuntu Server 22.04

Version of Immich Server

v1.118.2

Version of Immich Mobile App

v1.118.0

Platform with the issue

  • [ ] Server
  • [ ] Web
  • [X] Mobile

Your docker-compose.yml content

immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - immich:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:2283
    depends_on:
      - immich-redis
      - immich-database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - /home/revilo951/docker/immich/model-cache:/cache
    env_file:
      - .env
    restart: always

  immich-redis:
    container_name: immich_redis
    image: redis:6.2-alpine@sha256:c5a607fb6e1bb15d32bbcf14db22787d19e428d59e31a5da67511b49bb0f1ccc
    restart: always

  immich-database:
    container_name: immich_postgres
    image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      DB_DATA_LOCATION: ${DB_DATA_LOCATION}
    volumes:
      - /home/revilo951/docker/immich/pgdata:/var/lib/postgresql/data
    restart: always

Your .env content

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

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

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

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=snip

# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
DB_DATA_LOCATION=/home/revilo951/docker/immich/pgdata

REDIS_HOSTNAME=immich_redis

Reproduction steps

  1. Open mobile app
  2. open album
  3. open large image (200MP, 25MB)
  4. ~~profit~~ crash

Relevant log output

No relevant logs

Additional information

No response

revilo951 avatar Oct 22 '24 05:10 revilo951

Could you send more information about the image you’re trying to load? More of its properties, I pre assume the app is chocking either at loading the image from the server or an error is occurring when opening the image viewing page with the widgets. Could you confirm if this error also occurs when loading other images or just problems with loading this specific image? Also is the image taken from a DSLR or something, why is it that big 😅

Yuvi-raj-P avatar Oct 24 '24 15:10 Yuvi-raj-P

It's a 200MP image from a Samsung Galaxy S23 Ultra. I use them for taking photos of server racks, so I can zoom in and read labels etc. Here's a sample (of the lovely carpet at work 😄) that crashes the app for me. I've zipped it so that it doesn't get compressed by the file share service. https://file.io/DRKBVZtRKW1s

revilo951 avatar Oct 24 '24 21:10 revilo951

I'm experiencing something similar. The picture is 19 MiB and 4471x6706 pixels. It loads perfectly fine in the web application. I can view it on disk without issue so it doesn't look like it is corrupt. The android app shows a fuzzy picture with an exclamation point for the thumbnail. I'm happy to send the picture privately if anyone wants to test with it.

EDIT: To be clear, the app does not crash when trying to open it but rather just displays a black image with an image icon with a slash through it.

aaron-iles avatar Nov 03 '24 17:11 aaron-iles

Yes it is crashing in my case this is a video

Logs: Message FlutterError - Catch all

Details Instance of 'FlutterErrorDetails' Exception: RangeError (start): Invalid value: Not in inclusive range 0..60: 64 Library: widgets library Context: Instance of 'ErrorDescription'

From Immich error logger

Stack trace #0 RangeError.checkValidRange (dart:core/errors.dart:360) #1 ListExtensions.slice (package:collection/src/list_extensions.dart:242) #2 RenderList.loadAssets (package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart:104) #3 _Section.build. (package:immich_mobile/widgets/asset_grid/immich_asset_grid_view.dart:649) #4 _LayoutBuilderElement._rebuildWithConstraints.updateChildCallback (package:flutter/src/widgets/layout_builder.dart:191) #5 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3038) #6 _LayoutBuilderElement._rebuildWithConstraints (package:flutter/src/widgets/layout_builder.dart:231) #7 RenderObject.invokeLayoutCallback. (package:flutter/src/rendering/object.dart:2719) #8 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1098) #9 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2719) #10 RenderConstrainedLayoutBuilder.rebuildIfNecessary (package:flutter/src/widgets/layout_builder.dart:278) #11 _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:369) #12 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #13 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #14 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #15 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #16 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #17 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:211) #18 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #19 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:121) #20 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:327) #21 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #22 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:601) #23 UnboundedRenderViewport._attemptLayout (package:scrollable_positioned_list/src/viewport.dart:281) #24 UnboundedRenderViewport.performLayout (package:scrollable_positioned_list/src/viewport.dart:182) #25 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #26 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #27 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #28 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #29 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #30 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #31 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #32 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #33 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #34 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #35 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #36 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #37 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #38 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #39 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #40 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #41 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1448) #42 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #43 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #44 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #45 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #46 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #47 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #48 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #49 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #50 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #51 _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:371) #52 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #53 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #54 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #55 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #56 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #57 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #58 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #59 _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:371) #60 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #61 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #62 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #63 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #64 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #65 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #66 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #67 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #68 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #69 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #70 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #71 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #72 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #73 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #74 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #75 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #76 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #77 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #78 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #79 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #80 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #81 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:234) #82 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #83 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #84 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #85 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #86 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #87 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #88 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #89 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #90 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #91 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61) #92 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595) #93 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622) #94 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #95 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111) #96 RenderObject.layout (package:flutter/src/rendering/object.dart:2608) #97 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173) #98 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1092) #99 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:237) #100 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:404) #101 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2446) #102 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1052) #103 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1065) #104 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:602) #105 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1164) #106 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:468) #107 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397) #108 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318) #109 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176) #110 _invoke (dart:ui/hooks.dart:312) #111 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419) #112 _drawFrame (dart:ui/hooks.dart:283)

tye-mustafa avatar Dec 18 '24 18:12 tye-mustafa

@tye-mustafa is it a video you can zip up and share with me? You can send it to my email at [email protected]

alextran1502 avatar Dec 18 '24 18:12 alextran1502

@tye-mustafa is it a video you can zip up and share with me? You can send it to my email at [email protected]

Unable yo size is large 136mb not supported by emails

tye-mustafa avatar Dec 18 '24 18:12 tye-mustafa

You can put it on some cloud storage service like DropBox or GDrive, right?

alextran1502 avatar Dec 18 '24 19:12 alextran1502

Done

You can put it on some cloud storage service like DropBox or GDrive, right?

tye-mustafa avatar Dec 18 '24 20:12 tye-mustafa

Additional info. My immich android app is keep crashing on every video

tye-mustafa avatar Dec 19 '24 03:12 tye-mustafa

@tye-mustafa What is your phone model and which method do you use to install the app?

alextran1502 avatar Dec 19 '24 03:12 alextran1502

@tye-mustafa What is your phone model and which method do you use to install the app?

Redmi note 8 pro Running latest version from github

Using vp9 as encoding videos, May be that is the reasons may be it is not supported?

Edit: it has G90 processer that supports vp9 decoding

tye-mustafa avatar Dec 19 '24 03:12 tye-mustafa

@tye-mustafa You can reset the transcoding policy back to default and try re transcoding a video. I think VP9 might be the issue

alextran1502 avatar Dec 19 '24 06:12 alextran1502

@tye-mustafa You can reset the transcoding policy back to default and try re transcoding a video. I think VP9 might be the issue

i have tested on different devices only one device is crashing while playing videos rest all are fine.

tye-mustafa avatar Dec 20 '24 13:12 tye-mustafa

I am having the same issue as the OP, also 200mp images from a Galaxy S23 Ultra. App loads, generates the thumbs etc but if I try to view images..it force closes.

If I view the same images in a web browser on my phone or desktop, no problem at all. The only issue is on the mobile app.

I'm on v1.130.3 on both server (Docker, Unraid) and the phone (build 191)

PureLoneWolf avatar Mar 31 '25 06:03 PureLoneWolf

Small Update on the issue - I tested with knocking the quality down to 50mp and all images display without issue on mobile.
I'm now on v1.131.3 (Docker, Unraid) and the same version on Android (build 193)

PureLoneWolf avatar Apr 06 '25 08:04 PureLoneWolf

Always reproducible, crashes app on first view of any 200mp image, Samsung S23 Ultra, current version both server + app (v1.134.0)

apetersson avatar Jun 10 '25 08:06 apetersson

Same issue. 200MP images on Fold 7 crash the app.

theguruguys avatar Aug 19 '25 12:08 theguruguys

Does this issue still happen on the new beta timeline?

bo0tzz avatar Sep 18 '25 14:09 bo0tzz

I am on 1.142.1 and when scrolling between 200 megapixel pictures taken on the Fold 7, it can take anywhere between four to seven seconds to go from a black screen to view the picture. And if you try to go back and forth between pictures while it is on the black screen, it will often just completely shut down the app.

theguruguys avatar Sep 18 '25 14:09 theguruguys

I have also noticed that the app just closes itself when it is waiting to display the 200M pictures and you hit the top left back arrow to go to the main library screen, as well as flipping between 'black screens' while waiting for the picture to appear. It does seem to happen less than before. All the other photo viewers on my phone show the pictures right away as well, and non 200M pictures show with no 5-7 second black screen delay.

theguruguys avatar Sep 18 '25 19:09 theguruguys

It's not crashing any more for me, but I'm definitely only getting a thumbnail or something, compare these screenshots of zooming into the image. The clear one is zooming into a 200MP image in Google Photos, and the blurry one is zooming into the same 200MP image in Immich.

Image Image

revilo951 avatar Sep 18 '25 22:09 revilo951