[IOS] Upload video above 1gb, never finish even when 100% file transfered #2772

Closed
opened 2026-02-20 01:17:13 -05:00 by deekerman · 23 comments
Owner

Originally created by @krystaDev on GitHub (May 14, 2024).

The bug

I have one video witch can by correctly uploaded and "stored", i try for few days, from LTE, from wifi at home, from other wifi (in friends house).
File się uploaded in 100% but... never "correctly" finished. Even after update server and mobile app from 1.103.1 to 1.104.0, it's still not stored....

The OS that Immich Server is running on

Kubernetes helm chart (nodes are running on Ubuntu 22).

Version of Immich Server

v1.104.0

Version of Immich Mobile App

correctly

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

I use helm chart - values below

Your .env 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: "{{ .Release.Name }}-postgresql"
  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 }}"
  IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}'

image:
  tag: v1.104.0

immich:
  metrics:
    # Enabling this will create the service monitors needed to monitor immich with the prometheus operator
    enabled: false
  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-storage
  # configuration is immich-config.json converted to yaml
  # ref: https://immich.app/docs/install/config-file/
  #
  configuration:
    ffmpeg:
      crf: 23
      threads: 0
      preset: ultrafast
      targetVideoCodec: h264
      acceptedVideoCodecs:
        - h264
      targetAudioCodec: aac
      acceptedAudioCodecs:
        - aac
        - mp3
        - libopus
      targetResolution: '720'
      maxBitrate: '0'
      bframes: -1
      refs: 0
      gopSize: 0
      npl: 0
      temporalAQ: false
      cqMode: auto
      twoPass: false
      preferredHwDevice: auto
      transcode: required
      tonemap: hable
      accel: disabled
    job:
      backgroundTask:
        concurrency: 5
      smartSearch:
        concurrency: 2
      metadataExtraction:
        concurrency: 5
      faceDetection:
        concurrency: 2
      search:
        concurrency: 5
      sidecar:
        concurrency: 5
      library:
        concurrency: 5
      migration:
        concurrency: 5
      thumbnailGeneration:
        concurrency: 5
      videoConversion:
        concurrency: 2
    logging:
      enabled: true
      level: log
    machineLearning:
      enabled: true
      url: http://immich-machine-learning:3003
      clip:
        enabled: true
        modelName: ViT-B-32__openai
      facialRecognition:
        enabled: true
        modelName: buffalo_l
        minScore: 0.7
        maxDistance: 0.6
        minFaces: 3
    map:
      enabled: true
      lightStyle: ''
      darkStyle: ''
    reverseGeocoding:
      enabled: true
    oauth:
      enabled: false
      issuerUrl: ''
      clientId: ''
      clientSecret: ''
      scope: openid email profile
      signingAlgorithm: RS256
      storageLabelClaim: preferred_username
      storageQuotaClaim: immich_quota
      defaultStorageQuota: 0
      buttonText: Login with OAuth
      autoRegister: true
      autoLaunch: false
      mobileOverrideEnabled: false
      mobileRedirectUri: ''
    passwordLogin:
      enabled: true
    storageTemplate:
      enabled: false
      hashVerificationEnabled: true
      template: "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"
    image:
      thumbnailFormat: webp
      thumbnailSize: 250
      previewFormat: jpeg
      previewSize: 1440
      quality: 80
      colorspace: p3
      extractEmbedded: false
    newVersionCheck:
      enabled: true
    trash:
      enabled: true
      days: 30
    theme:
      customCss: ''
    user:
      deleteDelay: 7
    library:
      scan:
        enabled: true
        cronExpression: 0 0 * * *
      watch:
        enabled: true
        usePolling: false
        interval: 10000
    server:
      externalDomain: 'https://*********'
    # trash:
    #   enabled: false
    #   days: 30
    # storageTemplate:
    #   enabled: true
  #   template: "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"

# Dependencies

postgresql:
  enabled: true
  image:
    repository: tensorchord/pgvecto-rs
    tag: pg14-v0.2.0
  global:
    postgresql:
      auth:
        username: immich
        database: immich
        password: *****
  primary:
    initdb:
      scripts:
        create-extensions.sql: |
          CREATE EXTENSION cube;
          CREATE EXTENSION earthdistance;
          CREATE EXTENSION vectors;

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

# Immich components

server:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-server
    pullPolicy: IfNotPresent
microservices:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-server
    pullPolicy: IfNotPresent

machine-learning:
  enabled: true
  image:
    repository: ghcr.io/immich-app/immich-machine-learning
    pullPolicy: IfNotPresent
  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

Reproduction steps

1. Create video on IOS over few minutes (size above 1gb), in my case 1.12 (shorted video is ok)
2. Start uploading
3. And... upload never finish correctly

Relevant log output

No response

Additional information

No response

Originally created by @krystaDev on GitHub (May 14, 2024). ### The bug I have one video witch can by correctly uploaded and "stored", i try for few days, from LTE, from wifi at home, from other wifi (in friends house). File się uploaded in 100% but... never "correctly" finished. Even after update server and mobile app from 1.103.1 to 1.104.0, it's still not stored.... ### The OS that Immich Server is running on Kubernetes helm chart (nodes are running on Ubuntu 22). ### Version of Immich Server v1.104.0 ### Version of Immich Mobile App correctly ### Platform with the issue - [X] Server - [ ] Web - [X] Mobile ### Your docker-compose.yml content ```YAML I use helm chart - values below ``` ### Your .env content ```Shell ## 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: "{{ .Release.Name }}-postgresql" 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 }}" IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}' image: tag: v1.104.0 immich: metrics: # Enabling this will create the service monitors needed to monitor immich with the prometheus operator enabled: false 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-storage # configuration is immich-config.json converted to yaml # ref: https://immich.app/docs/install/config-file/ # configuration: ffmpeg: crf: 23 threads: 0 preset: ultrafast targetVideoCodec: h264 acceptedVideoCodecs: - h264 targetAudioCodec: aac acceptedAudioCodecs: - aac - mp3 - libopus targetResolution: '720' maxBitrate: '0' bframes: -1 refs: 0 gopSize: 0 npl: 0 temporalAQ: false cqMode: auto twoPass: false preferredHwDevice: auto transcode: required tonemap: hable accel: disabled job: backgroundTask: concurrency: 5 smartSearch: concurrency: 2 metadataExtraction: concurrency: 5 faceDetection: concurrency: 2 search: concurrency: 5 sidecar: concurrency: 5 library: concurrency: 5 migration: concurrency: 5 thumbnailGeneration: concurrency: 5 videoConversion: concurrency: 2 logging: enabled: true level: log machineLearning: enabled: true url: http://immich-machine-learning:3003 clip: enabled: true modelName: ViT-B-32__openai facialRecognition: enabled: true modelName: buffalo_l minScore: 0.7 maxDistance: 0.6 minFaces: 3 map: enabled: true lightStyle: '' darkStyle: '' reverseGeocoding: enabled: true oauth: enabled: false issuerUrl: '' clientId: '' clientSecret: '' scope: openid email profile signingAlgorithm: RS256 storageLabelClaim: preferred_username storageQuotaClaim: immich_quota defaultStorageQuota: 0 buttonText: Login with OAuth autoRegister: true autoLaunch: false mobileOverrideEnabled: false mobileRedirectUri: '' passwordLogin: enabled: true storageTemplate: enabled: false hashVerificationEnabled: true template: "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}" image: thumbnailFormat: webp thumbnailSize: 250 previewFormat: jpeg previewSize: 1440 quality: 80 colorspace: p3 extractEmbedded: false newVersionCheck: enabled: true trash: enabled: true days: 30 theme: customCss: '' user: deleteDelay: 7 library: scan: enabled: true cronExpression: 0 0 * * * watch: enabled: true usePolling: false interval: 10000 server: externalDomain: 'https://*********' # trash: # enabled: false # days: 30 # storageTemplate: # enabled: true # template: "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}" # Dependencies postgresql: enabled: true image: repository: tensorchord/pgvecto-rs tag: pg14-v0.2.0 global: postgresql: auth: username: immich database: immich password: ***** primary: initdb: scripts: create-extensions.sql: | CREATE EXTENSION cube; CREATE EXTENSION earthdistance; CREATE EXTENSION vectors; redis: enabled: true architecture: standalone auth: enabled: false # Immich components server: enabled: true image: repository: ghcr.io/immich-app/immich-server pullPolicy: IfNotPresent microservices: enabled: true image: repository: ghcr.io/immich-app/immich-server pullPolicy: IfNotPresent machine-learning: enabled: true image: repository: ghcr.io/immich-app/immich-machine-learning pullPolicy: IfNotPresent 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 ``` ### Reproduction steps ```bash 1. Create video on IOS over few minutes (size above 1gb), in my case 1.12 (shorted video is ok) 2. Start uploading 3. And... upload never finish correctly ``` ### Relevant log output _No response_ ### Additional information _No response_
Author
Owner

@PR4SAN commented on GitHub (May 14, 2024):

just came here to open this issue and found this. the exact same issue is happening to me also. the file above 1gb shows 100% but never actually gets uploaded.

@PR4SAN commented on GitHub (May 14, 2024): just came here to open this issue and found this. the exact same issue is happening to me also. the file above 1gb shows 100% but never actually gets uploaded.
Author
Owner

@bo0tzz commented on GitHub (May 14, 2024):

Can you try connecting directly to the immich-server pod, without an ingress or such in the way? Reverse proxies often have a default upload body limit that would cause this sort of issue.

For my ingress controller, this is configured with

    server:
      ingress:
        main:
          enabled: true
          annotations:
            (...)
            nginx.ingress.kubernetes.io/proxy-body-size: "0"
          hosts:
            - host: immich.foo.bar
@bo0tzz commented on GitHub (May 14, 2024): Can you try connecting directly to the immich-server pod, without an ingress or such in the way? Reverse proxies often have a default upload body limit that would cause this sort of issue. For my ingress controller, this is configured with ```yaml server: ingress: main: enabled: true annotations: (...) nginx.ingress.kubernetes.io/proxy-body-size: "0" hosts: - host: immich.foo.bar ```
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

I don't use ingress. i just create loadBalancer and use self hosted proxy (nginx proxy manager).
image

image
@krystaDev commented on GitHub (May 14, 2024): I don't use ingress. i just create loadBalancer and use self hosted proxy (nginx proxy manager). <img width="485" alt="image" src="https://github.com/immich-app/immich/assets/63036475/863cc0e7-55ba-4c65-8261-9fd125db390c"> <img width="1178" alt="image" src="https://github.com/immich-app/immich/assets/63036475/96f6283b-4b85-46b2-9de2-13746f851fce">
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

And its look like not a problem with "max body size" because, i use cloudflare (free version have limit 100mb). File above 100mb (or 200 i don't remember) throwing error when i use WebApp (and itd normal of course, i am web developer so i know what going on this).
But mobile app seems to send file in "parts" and movies above even 200-300mb just normally stored.
Mobile app after upload 100% need one minut or something like this to "process or something" this files... (progres bar finished process and wait some time). But with file above 1gb, its never ending... even after 20 minutes....

@krystaDev commented on GitHub (May 14, 2024): And its look like not a problem with "max body size" because, i use cloudflare (free version have limit 100mb). File above 100mb (or 200 i don't remember) throwing error when i use WebApp (and itd normal of course, i am web developer so i know what going on this). But mobile app seems to send file in "parts" and movies above even 200-300mb just normally stored. Mobile app after upload 100% need one minut or something like this to "process or something" this files... (progres bar finished process and wait some time). But with file above 1gb, its never ending... even after 20 minutes....
Author
Owner

@bo0tzz commented on GitHub (May 14, 2024):

The mobile app does not send files in parts, if you're using cloudflare then the 100mb upload limit is the cause of the problem here.

@bo0tzz commented on GitHub (May 14, 2024): The mobile app does not send files in parts, if you're using cloudflare then the 100mb upload limit is the cause of the problem here.
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

Sory guys but.... i check now. file 381 MB are corretly uploaded. PLEAS re OPEN this bug....

@krystaDev commented on GitHub (May 14, 2024): Sory guys but.... i check now. file 381 MB are corretly uploaded. PLEAS re OPEN this bug....
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

image
@krystaDev commented on GitHub (May 14, 2024): <img width="355" alt="image" src="https://github.com/immich-app/immich/assets/63036475/ed4842f4-a741-4ad6-a672-4a547bbdc31f">
Author
Owner

@mmomjian commented on GitHub (May 14, 2024):

It’s known that cloudflare is sometimes a little “flexible” / you can cheat the limit. That is why the 380MB works but not bigger files. This is not an Immich issue.

@mmomjian commented on GitHub (May 14, 2024): It’s known that cloudflare is sometimes a little “flexible” / you can cheat the limit. That is why the 380MB works but not bigger files. This is not an Immich issue.
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

From web i can't upload file bigger than 100mb...
And from web, file bigger than 100mb just stop uploading and throwing error.
In mobile theres not any error or whathever.

And tell my how i can upload files above 500mb...

image

I can't agree that cloudflare is so flexible....

@krystaDev commented on GitHub (May 14, 2024): From web i can't upload file bigger than 100mb... And from web, file bigger than 100mb just stop uploading and throwing error. In mobile theres not any error or whathever. And tell my how i can upload files above 500mb... ![image](https://github.com/immich-app/immich/assets/63036475/32f6e024-b4af-4a55-941a-57bec9f22df0) I can't agree that cloudflare is so flexible....
Author
Owner

@mmomjian commented on GitHub (May 14, 2024):

You’re welcome to test by connecting by local IP. If it still doesn’t work, we can reopen this. If it works, that proves cloudflare is the issue. Otherwise this matches what we have seen from other users and we will not be re opening it.

@mmomjian commented on GitHub (May 14, 2024): You’re welcome to test by connecting by local IP. If it still doesn’t work, we can reopen this. If it works, that proves cloudflare is the issue. Otherwise this matches what we have seen from other users and we will not be re opening it.
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

Ok, check by local IP (using LoadBallancer IP from k8s).
And nothing changed. After 10 minutes, it's still not finished....
IMG_53D23F352A1E-1

IMG_9272
IMG_9274
IMG_9273

To ensure you that i use local ip, is speed of uploading (i have only 100Mb upload in my ISP).
image

@krystaDev commented on GitHub (May 14, 2024): Ok, check by local IP (using LoadBallancer IP from k8s). And nothing changed. After 10 minutes, it's still not finished.... ![IMG_53D23F352A1E-1](https://github.com/immich-app/immich/assets/63036475/0854930a-bc15-4180-b69e-945597d29567) ![IMG_9272](https://github.com/immich-app/immich/assets/63036475/980a8d03-65ad-47b2-9a7d-df94b1875bd5) ![IMG_9274](https://github.com/immich-app/immich/assets/63036475/d8e51792-b58d-425f-9fa4-e3c5d745006f) ![IMG_9273](https://github.com/immich-app/immich/assets/63036475/a971be89-3ec1-4d9d-bce1-e55ace8dc325) To ensure you that i use local ip, is speed of uploading (i have only 100Mb upload in my ISP). <img width="354" alt="image" src="https://github.com/immich-app/immich/assets/63036475/8a5009ee-99b8-496d-a714-c6ebec6effcf">
Author
Owner

@mmomjian commented on GitHub (May 14, 2024):

Do you see anything in the app or server logs? Does the file not exist on the web view?

@mmomjian commented on GitHub (May 14, 2024): Do you see anything in the app or server logs? Does the file not exist on the web view?
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

i need to apologize. it's realy problem with cloudflare.
But... i read articles, and its possible to send files "chunked". Do you plan in future to add that feature ?

@krystaDev commented on GitHub (May 14, 2024): i need to apologize. it's realy problem with cloudflare. But... i read articles, and its possible to send files "chunked". Do you plan in future to add that feature ?
Author
Owner

@krystaDev commented on GitHub (May 14, 2024):

And i still don't understand how can i send files around 500mb, but not 1gb. Maybe upload library, create some chunks, and this chunks are bigger than 100mb. Can U spend some time to analyze that, and force library to upload in chunks not bigger than 100Mb.

Cloudflare is very popular tools to impreve security... and if u self-hosted somethink like photo library i thinks is necessary

@krystaDev commented on GitHub (May 14, 2024): And i still don't understand how can i send files around 500mb, but not 1gb. Maybe upload library, create some chunks, and this chunks are bigger than 100mb. Can U spend some time to analyze that, and force library to upload in chunks not bigger than 100Mb. Cloudflare is very popular tools to impreve security... and if u self-hosted somethink like photo library i thinks is necessary
Author
Owner

@mmomjian commented on GitHub (May 14, 2024):

This issue is being tracked in #1674. Not sure when/if it will get added.

@mmomjian commented on GitHub (May 14, 2024): This issue is being tracked in #1674. Not sure when/if it will get added.
Author
Owner

@hungbm commented on GitHub (Jun 8, 2024):

And i still don't understand how can i send files around 500mb, but not 1gb. Maybe upload library, create some chunks, and this chunks are bigger than 100mb. Can U spend some time to analyze that, and force library to upload in chunks not bigger than 100Mb.

Cloudflare is very popular tools to impreve security... and if u self-hosted somethink like photo library i thinks is necessary

I believe that because of Cloudflare cache. They said the cache is about 512MB, and for my understanding, the big file got splits into many part that under 100mb (cf tunnel allow that) then got re-assemble in CF cache. If total under 512MB => fine, CF will send it to the immich server to save. If larger than 512MB => CF reject, nothing send to Immich selfhost server.

@hungbm commented on GitHub (Jun 8, 2024): > And i still don't understand _how can i send files around 500mb, but not 1gb_. Maybe upload library, create some chunks, and this chunks are bigger than 100mb. Can U spend some time to analyze that, and force library to upload in chunks not bigger than 100Mb. > > Cloudflare is very popular tools to impreve security... and if u self-hosted somethink like photo library i thinks is necessary I believe that because of Cloudflare cache. They said the cache is about 512MB, and for my understanding, the big file got splits into many part that under 100mb (cf tunnel allow that) then got re-assemble in CF cache. If total under 512MB => fine, CF will send it to the immich server to save. If larger than 512MB => CF reject, nothing send to Immich selfhost server.
Author
Owner

@FloydKulis commented on GitHub (Sep 17, 2024):

I have the same problem. Immich tries to upload files to the server but it gets stuck on one file that is over 1GB. I have 100% upload, then the next files are sent, but the transferred data counter does not decrease.

Each time immich tries to add the videos again.
image
It keeps showing that there are 416 videos left.

@FloydKulis commented on GitHub (Sep 17, 2024): I have the same problem. Immich tries to upload files to the server but it gets stuck on one file that is over 1GB. I have 100% upload, then the next files are sent, but the transferred data counter does not decrease. Each time immich tries to add the videos again. ![image](https://github.com/user-attachments/assets/333c4388-c0c2-4fd4-93eb-18d136172964) It keeps showing that there are 416 videos left.
Author
Owner

@alextran1502 commented on GitHub (Sep 17, 2024):

@FloydKulis can you try accessing the instance over local IP?

@alextran1502 commented on GitHub (Sep 17, 2024): @FloydKulis can you try accessing the instance over local IP?
Author
Owner

@FloydKulis commented on GitHub (Sep 18, 2024):

@alextran1502 Yes, I have the opportunity to try.

@FloydKulis commented on GitHub (Sep 18, 2024): @alextran1502 Yes, I have the opportunity to try.
Author
Owner

@FloydKulis commented on GitHub (Sep 19, 2024):

@alextran1502 on LAN works:
image
Via cloudflare doesn't work.

@FloydKulis commented on GitHub (Sep 19, 2024): @alextran1502 on LAN works: ![image](https://github.com/user-attachments/assets/47381d55-33a6-4ea0-bfa7-6d8f0605a157) Via cloudflare doesn't work.
Author
Owner

@alextran1502 commented on GitHub (Sep 19, 2024):

@FloydKulis yep, Cf has limit of 100MB upload file body for free tier I believe. And we don't have file chunking mechanism yet

@alextran1502 commented on GitHub (Sep 19, 2024): @FloydKulis yep, Cf has limit of 100MB upload file body for free tier I believe. And we don't have file chunking mechanism yet
Author
Owner

@Maki9009 commented on GitHub (Jul 28, 2025):

this seems like its a long issue why hasnt it been solved yet

@Maki9009 commented on GitHub (Jul 28, 2025): this seems like its a long issue why hasnt it been solved yet
Author
Owner

@rohitpillaii commented on GitHub (Dec 2, 2025):

I have a video with a size of 8.5GB, goes till 30 % or something, and then fails.
Is it related to this issue?

@rohitpillaii commented on GitHub (Dec 2, 2025): I have a video with a size of 8.5GB, goes till 30 % or something, and then fails. Is it related to this issue?
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/immich#2772
No description provided.