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
Open mobile app
open album
open large image (200MP, 25MB)
~~profit~~ crash
Relevant log output
No relevant logs
Additional information
No response
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 😅
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
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.
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 is it a video you can zip up and share with me? You can send it to my email at [email protected]
@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
You can put it on some cloud storage service like DropBox or GDrive, right?
Done
You can put it on some cloud storage service like DropBox or GDrive, right?
Additional info. My immich android app is keep crashing on every video
@tye-mustafa What is your phone model and which method do you use to install the app?
@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 You can reset the transcoding policy back to default and try re transcoding a video. I think VP9 might be the issue
@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.
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)
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)
Always reproducible, crashes app on first view of any 200mp image, Samsung S23 Ultra, current version both server + app (v1.134.0)
Same issue. 200MP images on Fold 7 crash the app.
Does this issue still happen on the new beta timeline?
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.
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.
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.