Wrong aspect ratio for DJI Osmo Pocket 3 / Action 4/5 videos in iOS app (web playback is fine) #7844

Closed
opened 2026-02-05 13:20:30 +03:00 by OVERLORD · 8 comments
Owner

Originally created by @pebe65 on GitHub (Nov 16, 2025).

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

  • Yes

The bug

The bug

Videos recorded with DJI cameras are shown with a wrong aspect ratio in the Immich iOS app, while the same videos look correct in the web UI.

  • iPhone videos are displayed correctly (16:9) in the iOS app.
  • Videos exported from DaVinci Resolve are also displayed correctly.
  • All videos recorded with DJI Osmo Pocket 3 and DJI Action 4/5 look wrong in the iOS app:
    • In portrait mode they look like old 4:3 videos (top/bottom and overlapping).
    • In landscape mode the image is stretched and partially overlapping.
  • In the web UI the exact same DJI videos are shown with the correct aspect ratio.

I already ran the following jobs for all assets:

  • Extract metadata
  • Transcode videos

The problem is still the same.

Environment

  • Immich Server: newest
  • Immich iOS App: newest
  • iPhone model: iPhone 14 Pro Max
  • iOS version: 26.1
  • Docker host OS: (e.g. Ubuntu 22.04 on Hetzner)

Video details

  • DJI Osmo Pocket 3: 4K / 60 fps, MP4 or MOV
  • DJI Action 4 and 5: 4K / 60 fps, MP4
  • Transcoding policy: “Only videos in a non-accepted format”
  • Accepted video codecs: H.264, HEVC
  • Accepted containers: MP4, MOV

Steps to reproduce

  1. Record a 16:9 video with DJI Osmo Pocket 3 or DJI Action 4/5.
  2. Upload the video to Immich.
  3. Play the video in the Immich iOS app (portrait and landscape).
  4. Play the same video in the Immich web UI in a browser.
  5. Compare the aspect ratio between app and web.

Expected behavior

DJI videos should use the same (correct) aspect ratio in the iOS app as in the web UI.

The OS that Immich Server is running on

Ubuntu 24.04.3 LTS

Version of Immich Server

V2.2.3

Version of Immich Mobile App

v2.2.3

Platform with the issue

  • Server
  • Web
  • Mobile

Device make and model

iPhone 14 Pro Max

Your docker-compose.yml content

cat docker-compose.yml
docker-compose.yml  postgres
#
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    shm_size: 128mb
    restart: always

volumes:
  model-cache:

Your .env content

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

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

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC

# The Immich version to use. You can pin this to a specific version like "v2.1.0"
IMMICH_VERSION=v2

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=pB14557266fcn
# A long, randomly generated string for security. Change this value!
SECRET_KEY=IhrExtremLangerUndZufalligerSchluesselHierEinfuegen12345
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
# The location where your photos and videos are stored
UPLOAD_LOCATION=/mnt/immich-data/upload
TZ=Europe/Berlin

Reproduction steps

...

Relevant log output


Additional information

No response

Originally created by @pebe65 on GitHub (Nov 16, 2025). ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug **The bug** Videos recorded with DJI cameras are shown with a wrong aspect ratio in the Immich iOS app, while the same videos look correct in the web UI. - iPhone videos are displayed correctly (16:9) in the iOS app. - Videos exported from DaVinci Resolve are also displayed correctly. - All videos recorded with **DJI Osmo Pocket 3** and **DJI Action 4/5** look wrong in the iOS app: - In portrait mode they look like old 4:3 videos (top/bottom and overlapping). - In landscape mode the image is stretched and partially overlapping. - In the **web UI** the exact same DJI videos are shown with the correct aspect ratio. I already ran the following jobs for all assets: - Extract metadata - Transcode videos The problem is still the same. **Environment** - Immich Server: newest - Immich iOS App: newest - iPhone model: iPhone 14 Pro Max - iOS version: 26.1 - Docker host OS: (e.g. Ubuntu 22.04 on Hetzner) **Video details** - DJI Osmo Pocket 3: 4K / 60 fps, MP4 or MOV - DJI Action 4 and 5: 4K / 60 fps, MP4 - Transcoding policy: “Only videos in a non-accepted format” - Accepted video codecs: H.264, HEVC - Accepted containers: MP4, MOV **Steps to reproduce** 1. Record a 16:9 video with DJI Osmo Pocket 3 or DJI Action 4/5. 2. Upload the video to Immich. 3. Play the video in the Immich iOS app (portrait and landscape). 4. Play the same video in the Immich web UI in a browser. 5. Compare the aspect ratio between app and web. **Expected behavior** DJI videos should use the same (correct) aspect ratio in the iOS app as in the web UI. ### The OS that Immich Server is running on Ubuntu 24.04.3 LTS ### Version of Immich Server V2.2.3 ### Version of Immich Mobile App v2.2.3 ### Platform with the issue - [ ] Server - [ ] Web - [x] Mobile ### Device make and model iPhone 14 Pro Max ### Your docker-compose.yml content ```YAML cat docker-compose.yml docker-compose.yml postgres # # WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/data - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs # DB_STORAGE_TYPE: 'HDD' volumes: # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - ${DB_DATA_LOCATION}:/var/lib/postgresql/data shm_size: 128mb restart: always volumes: model-cache: ``` ### Your .env content ```Shell # You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The location where your database files are stored. Network shares are not supported for the database DB_DATA_LOCATION=./postgres # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List # TZ=Etc/UTC # The Immich version to use. You can pin this to a specific version like "v2.1.0" IMMICH_VERSION=v2 # Connection secret for postgres. You should change it to a random password # Please use only the characters `A-Za-z0-9`, without special characters or spaces DB_PASSWORD=pB14557266fcn # A long, randomly generated string for security. Change this value! SECRET_KEY=IhrExtremLangerUndZufalligerSchluesselHierEinfuegen12345 # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich # The location where your photos and videos are stored UPLOAD_LOCATION=/mnt/immich-data/upload TZ=Europe/Berlin ``` ### Reproduction steps 1. 2. 3. ... ### Relevant log output ```shell ``` ### Additional information _No response_
Author
Owner

@YarosMallorca commented on GitHub (Nov 16, 2025):

Very strange, I can reproduce this with my Action 4 in 4:3 mode when mounted vertically, but not in 16:9 4K 60FPS.
Do you have Rocksteady enabled?

@YarosMallorca commented on GitHub (Nov 16, 2025): Very strange, I can reproduce this with my Action 4 in 4:3 mode when mounted vertically, but not in 16:9 4K 60FPS. Do you have Rocksteady enabled?
Author
Owner

@pebe65 commented on GitHub (Nov 16, 2025):

Thanks for checking this!
Yes, I have Rocksteady enabled on (almost) all of these clips.

Some more observations after going through more videos:

  • All affected videos were recorded in 16:9 (mostly 4K 60 FPS), camera mounted horizontally.
  • The issue occurs with: 
    • DJI Osmo Pocket 3
    • DJI Osmo Action 3
    • DJI Osmo Action 4
    • DJI Osmo Action 5
  • Interestingly, some clips from the same camera and same recording session are shown correctly in the iOS app, but the very next clip (same resolution, same settings, recorded one minute later) is broken and looks like 4:3.
  • When I scroll through the video list in the iOS app, I can briefly see the correct aspect ratio for the video, and then it suddenly flips to the wrong 4:3-looking view. So it feels like the app first calculates the correct aspect ratio, but then something in the player/layout overrides it and forces the 4:3-like view for many DJI clips.
@pebe65 commented on GitHub (Nov 16, 2025): Thanks for checking this! Yes, I have Rocksteady enabled on (almost) all of these clips. Some more observations after going through more videos: - All affected videos were recorded in 16:9 (mostly 4K 60 FPS), camera mounted horizontally. - The issue occurs with:  - DJI Osmo Pocket 3 - DJI Osmo Action 3 - DJI Osmo Action 4 - DJI Osmo Action 5 - Interestingly, some clips from the same camera and same recording session are shown correctly in the iOS app, but the very next clip (same resolution, same settings, recorded one minute later) is broken and looks like 4:3. - When I scroll through the video list in the iOS app, I can briefly see the **correct** aspect ratio for the video, and then it suddenly flips to the wrong 4:3-looking view. So it feels like the app first calculates the correct aspect ratio, but then something in the player/layout overrides it and forces the 4:3-like view for many DJI clips.
Author
Owner

@spunkerman commented on GitHub (Nov 18, 2025):

I have the same (incorrect in iOS app and correct in browser) and it applies to all the videos for iPhone 15 / iPhone 15 pro (I have no DJI videos). Seems to be since the latest release 2.2.3.

@spunkerman commented on GitHub (Nov 18, 2025): I have the same (incorrect in iOS app and correct in browser) and it applies to all the videos for iPhone 15 / iPhone 15 pro (I have no DJI videos). Seems to be since the latest release 2.2.3.
Author
Owner

@HaroldDLeon commented on GitHub (Nov 22, 2025):

Seems not only related to DJI: I see the same issue with GoPro videos when playing in both iOS and Android apps.
The video starts with the correct aspect ratio for a split second, and switches to 4:3 right after.

@HaroldDLeon commented on GitHub (Nov 22, 2025): Seems not only related to DJI: I see the same issue with GoPro videos when playing in both iOS and Android apps. The video starts with the correct aspect ratio for a split second, and switches to 4:3 right after.
Author
Owner

@LeLunZ commented on GitHub (Nov 25, 2025):

@YarosMallorca I also have the same problem, but not in the normal fotos tab, only in the search tab on my iPhone. And a friend of mine could also reproduce this.
And this happens for all videos

If I search for a video (eg. with context search), then click on it, it plays in this weird formatting.
If I then press on "Show in Timeline" button, and again play it from the timeline it plays totally normal.

Here a screenshot of how it looks on my phone if I play a video from the search. As you can see, in the background the correctly sized video, and then the wrongly formatted one in the front:

Image
@LeLunZ commented on GitHub (Nov 25, 2025): @YarosMallorca I also have the same problem, but not in the normal fotos tab, only in the search tab on my iPhone. And a friend of mine could also reproduce this. **And this happens for all videos** If I search for a video (eg. with context search), then click on it, it plays in this weird formatting. If I then press on "Show in Timeline" button, and again play it from the timeline it plays totally normal. Here a screenshot of how it looks on my phone if I play a video from the search. As you can see, in the background the correctly sized video, and then the wrongly formatted one in the front: <img width="375" height="812" alt="Image" src="https://github.com/user-attachments/assets/2b6e572d-0af5-4e73-b8f2-567880b1e26b" />
Author
Owner

@serialx commented on GitHub (Nov 29, 2025):

Is your video files very large? (greater than 100MB) I have problems with large files. See: #23890

@serialx commented on GitHub (Nov 29, 2025): Is your video files very large? (greater than 100MB) I have problems with large files. See: #23890
Author
Owner

@LeLunZ commented on GitHub (Nov 29, 2025):

@serialx no it’s 5.4MB.

@LeLunZ commented on GitHub (Nov 29, 2025): @serialx no it’s 5.4MB.
Author
Owner

@serialx commented on GitHub (Nov 29, 2025):

Do you know what "extract metadata job concurrency" settings you've set?
I have a large collection of Pocket 3 videos, and apart from large files, iOS app playback works correctly. I did however reinstalled Immich to have this.

@serialx commented on GitHub (Nov 29, 2025): Do you know what "extract metadata job concurrency" settings you've set? I have a large collection of Pocket 3 videos, and apart from large files, iOS app playback works correctly. I did however reinstalled Immich to have this.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#7844