[BUG] Downloading a Live Photo Throws Error on iOS/iPadOS #1240

Closed
opened 2026-02-05 00:59:10 +03:00 by OVERLORD · 9 comments
Owner

Originally created by @SNThrailkill on GitHub (Aug 17, 2023).

The bug

If you attempt to download a Live Photo taken on another device (like an Android phone) it will say "Download Failed". If you try to download the same photo using a browser (tried on Safari and Firefox) then it will download the photo (in this case a .jpg and a transcoded video of the Live Photo which seems to always be a .mov. The photo will download successfully but the video will always fail.

The OS that Immich Server is running on

Kubernetes 1.24

Version of Immich Server

1.73.0

Version of Immich Mobile App

1.73.0

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

## This chart relies on the common library chart from bjw-s
## You can find it at https://github.com/bjw-s/helm-charts/tree/main/charts/library/common
## Refer there for more detail about the supported values

# These entries are shared between all the Immich components

env:
  REDIS_HOSTNAME: '{{ printf "%s-redis-master" .Release.Name }}'
  DB_HOSTNAME: "db.url"
  DB_USERNAME: "{{ .Values.postgresql.global.postgresql.auth.username }}"
  DB_DATABASE_NAME: "{{ .Values.postgresql.global.postgresql.auth.database }}"
  # -- You should provide your own secret outside of this helm-chart and use `postgresql.global.postgresql.auth.existingSecret` to provide credentials to the postgresql instance
  DB_PASSWORD: "{{ .Values.postgresql.global.postgresql.auth.password }}"
  TYPESENSE_ENABLED: "{{ .Values.typesense.enabled }}"
  TYPESENSE_API_KEY: "{{ .Values.typesense.env.TYPESENSE_API_KEY }}"
  TYPESENSE_HOST: '{{ printf "%s-typesense" .Release.Name }}'
  IMMICH_WEB_URL: '{{ printf "http://%s-web:3000" .Release.Name }}'
  IMMICH_SERVER_URL: '{{ printf "http://%s-server:3001" .Release.Name }}'
  IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}'
  DISABLE_REVERSE_GEOCODING: true 

# Usually you set this to have the same among all the containers, but renovate doesnt like this
#image:
#  tag: v1.73.0

immich:
  persistence:
    # Main data store for all photos shared between different components.
    library:
      # Automatically creating the library volume is not supported by this chart
      # You have to specify an existing PVC to use
      existingClaim: immich-photos-nfs-pvc

# Dependencies

postgresql:
  enabled: false
  global:
    postgresql:
      auth:
        username: immich
        database: immich
        password: secret

redis:
  enabled: true
  architecture: standalone
  auth:
    enabled: false

typesense:
  enabled: true 
  env:
    TYPESENSE_DATA_DIR: /tsdata
    TYPESENSE_API_KEY: typesense
  persistence:
    tsdata:
      # Enabling typesense persistence is recommended to avoid slow reindexing
      enabled: false
      accessMode: ReadWriteOnce
      size: 1Gi
      storageClass: longhorn
  probes:
    liveness:
      spec:
        initialDelaySeconds: 60
    readiness:
      spec:
        initialDelaySeconds: 60
  image:
    repository: docker.io/typesense/typesense
    tag: 0.24.1
    pullPolicy: IfNotPresent

# Immich components

server:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-server
    pullPolicy: IfNotPresent
    tag: v1.73.0

microservices:
  enabled: true
  env:
    REVERSE_GEOCODING_DUMP_DIRECTORY: /geodata-cache
  persistence:
    geodata-cache:
      enabled: true
      size: 1Gi
      # Optional: Set this to pvc to avoid downloading the geodata every start.
      type: pvc
      accessMode: ReadWriteMany
      storageClass: longhorn
  image:
    repository: ghcr.io/immich-app/immich-server
    pullPolicy: IfNotPresent
    tag: v1.73.0

machine-learning:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-machine-learning
    pullPolicy: IfNotPresent
    tag: v1.73.0
  env:
    TRANSFORMERS_CACHE: /cache
  persistence:
    cache:
      enabled: true
      size: 10Gi
      # Optional: Set this to pvc to avoid downloading the ML models every start.
      type: emptyDir
      accessMode: ReadWriteMany
      storageClass: longhorn

web:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-web
    pullPolicy: IfNotPresent
    tag: v1.73.0
  persistence:
    library:
      enabled: false

proxy:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-proxy
    pullPolicy: IfNotPresent
    tag: v1.73.0
  persistence:
    library:
      enabled: false

  ingress:
    main:
      enabled: false
      annotations:
        # proxy-body-size is set to 0 to remove the body limit on file uploads
        nginx.ingress.kubernetes.io/proxy-body-size: "0"
      hosts:
        - host: immich.domain
          paths:
            - path: "/"
      tls: []

Your .env content

N/A

Reproduction steps

1. Upload a Live Photo from any device that is not iOS/iPadOS
2. From an iOS/iPadOS device, attempt download the photo locally to see error thrown
3. Attempt to download the same photo from the browser to see error thrown

Additional information

No response

Originally created by @SNThrailkill on GitHub (Aug 17, 2023). ### The bug If you attempt to download a Live Photo taken on another device (like an Android phone) it will say "Download Failed". If you try to download the same photo using a browser (tried on Safari and Firefox) then it will download the photo (in this case a `.jpg` and a transcoded video of the Live Photo which seems to always be a `.mov`. The photo will download successfully but the video will always fail. ### The OS that Immich Server is running on Kubernetes 1.24 ### Version of Immich Server 1.73.0 ### Version of Immich Mobile App 1.73.0 ### Platform with the issue - [X] Server - [ ] Web - [X] Mobile ### Your docker-compose.yml content ```YAML ## This chart relies on the common library chart from bjw-s ## You can find it at https://github.com/bjw-s/helm-charts/tree/main/charts/library/common ## Refer there for more detail about the supported values # These entries are shared between all the Immich components env: REDIS_HOSTNAME: '{{ printf "%s-redis-master" .Release.Name }}' DB_HOSTNAME: "db.url" DB_USERNAME: "{{ .Values.postgresql.global.postgresql.auth.username }}" DB_DATABASE_NAME: "{{ .Values.postgresql.global.postgresql.auth.database }}" # -- You should provide your own secret outside of this helm-chart and use `postgresql.global.postgresql.auth.existingSecret` to provide credentials to the postgresql instance DB_PASSWORD: "{{ .Values.postgresql.global.postgresql.auth.password }}" TYPESENSE_ENABLED: "{{ .Values.typesense.enabled }}" TYPESENSE_API_KEY: "{{ .Values.typesense.env.TYPESENSE_API_KEY }}" TYPESENSE_HOST: '{{ printf "%s-typesense" .Release.Name }}' IMMICH_WEB_URL: '{{ printf "http://%s-web:3000" .Release.Name }}' IMMICH_SERVER_URL: '{{ printf "http://%s-server:3001" .Release.Name }}' IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}' DISABLE_REVERSE_GEOCODING: true # Usually you set this to have the same among all the containers, but renovate doesnt like this #image: # tag: v1.73.0 immich: persistence: # Main data store for all photos shared between different components. library: # Automatically creating the library volume is not supported by this chart # You have to specify an existing PVC to use existingClaim: immich-photos-nfs-pvc # Dependencies postgresql: enabled: false global: postgresql: auth: username: immich database: immich password: secret redis: enabled: true architecture: standalone auth: enabled: false typesense: enabled: true env: TYPESENSE_DATA_DIR: /tsdata TYPESENSE_API_KEY: typesense persistence: tsdata: # Enabling typesense persistence is recommended to avoid slow reindexing enabled: false accessMode: ReadWriteOnce size: 1Gi storageClass: longhorn probes: liveness: spec: initialDelaySeconds: 60 readiness: spec: initialDelaySeconds: 60 image: repository: docker.io/typesense/typesense tag: 0.24.1 pullPolicy: IfNotPresent # Immich components server: enabled: true image: repository: ghcr.io/immich-app/immich-server pullPolicy: IfNotPresent tag: v1.73.0 microservices: enabled: true env: REVERSE_GEOCODING_DUMP_DIRECTORY: /geodata-cache persistence: geodata-cache: enabled: true size: 1Gi # Optional: Set this to pvc to avoid downloading the geodata every start. type: pvc accessMode: ReadWriteMany storageClass: longhorn image: repository: ghcr.io/immich-app/immich-server pullPolicy: IfNotPresent tag: v1.73.0 machine-learning: enabled: true image: repository: ghcr.io/immich-app/immich-machine-learning pullPolicy: IfNotPresent tag: v1.73.0 env: TRANSFORMERS_CACHE: /cache persistence: cache: enabled: true size: 10Gi # Optional: Set this to pvc to avoid downloading the ML models every start. type: emptyDir accessMode: ReadWriteMany storageClass: longhorn web: enabled: true image: repository: ghcr.io/immich-app/immich-web pullPolicy: IfNotPresent tag: v1.73.0 persistence: library: enabled: false proxy: enabled: true image: repository: ghcr.io/immich-app/immich-proxy pullPolicy: IfNotPresent tag: v1.73.0 persistence: library: enabled: false ingress: main: enabled: false annotations: # proxy-body-size is set to 0 to remove the body limit on file uploads nginx.ingress.kubernetes.io/proxy-body-size: "0" hosts: - host: immich.domain paths: - path: "/" tls: [] ``` ### Your .env content ```Shell N/A ``` ### Reproduction steps ```bash 1. Upload a Live Photo from any device that is not iOS/iPadOS 2. From an iOS/iPadOS device, attempt download the photo locally to see error thrown 3. Attempt to download the same photo from the browser to see error thrown ``` ### Additional information _No response_
OVERLORD added the 📱mobile label 2026-02-05 00:59:10 +03:00
Author
Owner

@awonglk commented on GitHub (Aug 19, 2023):

I have the same issue, and it extends to mp4 videos uploaded from Android (Pixel 7), not just live photos. The uploaded video cannot be viewed/downloaded on IOS app. The request never seem to have made it to the Immich server as I do not see any access logs for it when I click on download (or view)

@awonglk commented on GitHub (Aug 19, 2023): I have the same issue, and it extends to mp4 videos uploaded from Android (Pixel 7), not just live photos. The uploaded video cannot be viewed/downloaded on IOS app. The request never seem to have made it to the Immich server as I do not see any access logs for it when I click on download (or view)
Author
Owner

@alextran1502 commented on GitHub (Aug 19, 2023):

@awonglk this only applied by accessing the web on mobile browser right? Not from the mobile app

@alextran1502 commented on GitHub (Aug 19, 2023): @awonglk this only applied by accessing the web on mobile browser right? Not from the mobile app
Author
Owner

@awonglk commented on GitHub (Aug 19, 2023):

The download failure occurs on the IOS mobile app.

@awonglk commented on GitHub (Aug 19, 2023): The download failure occurs on the IOS mobile app.
Author
Owner

@alextran1502 commented on GitHub (Aug 19, 2023):

@awonglk Is it a motion photos taken from an android phone? Or just normal video?

@alextran1502 commented on GitHub (Aug 19, 2023): @awonglk Is it a motion photos taken from an android phone? Or just normal video?
Author
Owner

@awonglk commented on GitHub (Aug 19, 2023):

Normal video in my case, recorded as MP4.

@awonglk commented on GitHub (Aug 19, 2023): Normal video in my case, recorded as MP4.
Author
Owner

@SNThrailkill commented on GitHub (Aug 19, 2023):

Motion photos from multiple Android phones, yes. And it does happen on both the app and the mobile browser.

@SNThrailkill commented on GitHub (Aug 19, 2023): Motion photos from multiple Android phones, yes. And it does happen on both the app and the mobile browser.
Author
Owner

@alberthdev commented on GitHub (Sep 14, 2023):

Can confirm this is still a problem on app version 1.78.0 build 117 and server version 1.78.0, both on iOS and Android. I was able to capture one error log but it seems like in general download errors are not logged.

image

@alberthdev commented on GitHub (Sep 14, 2023): Can confirm this is still a problem on app version 1.78.0 build 117 and server version 1.78.0, both on iOS and Android. I was able to capture one error log but it seems like in general download errors are not logged. ![image](https://github.com/immich-app/immich/assets/1274384/d9eec3cd-69a0-40a6-9b5d-32ec9bcb4fe3)
Author
Owner

@jianglai commented on GitHub (Oct 8, 2023):

I'm seeing the same on iOS and iPadOS.

@jianglai commented on GitHub (Oct 8, 2023): I'm seeing the same on iOS and iPadOS.
Author
Owner

@hkaikai commented on GitHub (Nov 22, 2023):

I'm seeing the same on iOS and iPadOS.

+1

@hkaikai commented on GitHub (Nov 22, 2023): > I'm seeing the same on iOS and iPadOS. +1
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#1240