Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GPS data not being parse by immich from android #11280

Closed
2 of 3 tasks
anytimesoon opened this issue Jul 22, 2024 · 11 comments
Closed
2 of 3 tasks

GPS data not being parse by immich from android #11280

anytimesoon opened this issue Jul 22, 2024 · 11 comments

Comments

@anytimesoon
Copy link

The bug

None of my images uploaded from my phone or my partner's phone have the location data parsed by immich. I have checked that these images have GPS data using the phone's gallery app. I have also tried rerunning the metadata job

The OS that Immich Server is running on

Ubuntu 22.04 lts

Version of Immich Server

1.108.0

Version of Immich Mobile App

1.108.0

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

#
# WARNING: 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}
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always
    labels:
      - com.centurylinklabs.watchtower.monitor-only=true
  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] 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://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    labels:
      - com.centurylinklabs.watchtower.monitor-only=true
  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:d6c2911ac51b289db208767581a5d154544f2b2fe4914ea5056443f62dc6e900
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
    labels:
      - com.centurylinklabs.watchtower.enable=false
  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: --data-checksums
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' || exit 1; Chksum="$$(psql
        --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only
        --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM
        pg_stat_database')"; echo "checksum failure count is $$Chksum"; [
        "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command:
      - postgres
      - -c
      - shared_preload_libraries=vectors.so
      - -c
      - search_path="$$user", public, vectors
      - -c
      - logging_collector=on
      - -c
      - max_wal_size=2GB
      - -c
      - shared_buffers=512MB
      - -c
      - wal_compression=on
    restart: always
    labels:
      - com.centurylinklabs.watchtower.enable=false
volumes:
  model-cache: null
networks: {}

Your .env content

IMMICH_VERSION=v1.108.0
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Reproduction steps

1. Take picture with android phone, making sure GPS is switched on and the camera tags the image
2. Have the app upload the file to the server

Current behaviour:
GPS data is not parsed

Expected behaviour:
GPS data should be visible in the details section of the image

Relevant log output

No response

Additional information

No response

@bo0tzz
Copy link
Member

bo0tzz commented Jul 22, 2024

Does the app have location access permissions?

@anytimesoon
Copy link
Author

It does
Screenshot_20240722-104633

@bo0tzz
Copy link
Member

bo0tzz commented Jul 22, 2024

Can you download the original file from the Immich server and check with exiftool or such whether it has the GPS data, and do the same with a copy of the file copied manually off your phone?

@anytimesoon
Copy link
Author

Downloading the file from immich, it seems it does not have any GPS data.

I'm not sure I understand what your request with this

and do the same with a copy of the file copied manually off your phone?

I think you would like me to confirm that the file had GPS data before the upload to immich. If this is the case, yes the original file has GPS data.

From this, it seems like the data has been stripped from the file during the upload process

@bo0tzz
Copy link
Member

bo0tzz commented Jul 22, 2024

Can you try turning off background upload, taking a new photo with gps data, then uploading that in the Immich app with the foreground upload mechanism?

@anytimesoon
Copy link
Author

I have tried this, and still no GPS

@orville87
Copy link

orville87 commented Jul 31, 2024

I have the same issue. It worked before flawlessly (even without having granted Immich app location permission), but since around two weeks, metadata isn't parsed properly from both my phone (Pixel 6 with latest CalyxOS - Android 14 and microG as well as app version 1.111.0 from github release page) as well as my wife's phone (Pixel 4 with latest GrapheneOS - Android 14 with sandboxed Google Play Services and app version 1.109.2 from F-Droid). Uploading from web interface works properly, but both devices will backup duplicates (without location tags) of the pictures to the server if I upload my pictures through the web interface and keep auto backup through mobile app activated. I tried an older device (Samsung Galaxy S8 running LineageOS - Android 11 with microG and app version 1.109.2), where it still works flawlessly. Server is running v1.110.0.

So I am a little bit confused right now what might be the underlying issue here. And yes, I am aware that since Android Q EXIF data will be stripped from media files when shared and proper permissions aren't granted to the sharing app (especially the "access all files" permission, which Immich mobile app didn't request in the first place and can't be granted manually as it doesn't ask for it).

I tried different app versions, the issue still persists.

@AMstuff
Copy link

AMstuff commented Aug 3, 2024

For me the issue is definitely calyxos, since they recently made the location redaction feature more restrictive.
So disabling the feature altogether fixed it for me. There is a global toggle at settings -> Security & privacy -> More security & privacy -> Redact location data when sharing media.

@bo0tzz bo0tzz closed this as completed Aug 3, 2024
@anytimesoon
Copy link
Author

Sadly, this hasn't worked for me. It's interesting to learn that others who face this issue are using Calyx. That does imply that the problem may stem from there

@PaulienM
Copy link

PaulienM commented Aug 4, 2024

I have the same problem, I'm using calyxos too. After some research in the flutter_photo_manager lib used by immich, I found that the location isn't set in the AssetEntity (cf. https://github.com/fluttercandies/flutter_photo_manager/blob/044ee31d8569341d0feb6772315f4c6b89c9e5c9/android/src/main/kotlin/com/fluttercandies/photo_manager/core/utils/IDBUtils.kt#L226 and the comment https://github.com/fluttercandies/flutter_photo_manager/blob/044ee31d8569341d0feb6772315f4c6b89c9e5c9/lib/src/types/entity.dart#L482)
According to the comments in the library, we should use latlngAsync function to get location.
Maybe I missed something because the location sync seems to work on android (without calyxos), but I didn't find any usages of latlngAsync.

I tried to use my own version of flutter_photo_manager that defined latitude and longitude values directly in AssetEntity and it works, but I'm not sure that is a good solution. I'm not flutter or mobile developer, so if someone wants to help me your welcome :)

The code I'm using to define the location :

// com.fluttercandies.photo_manager.core.utils.IDBUtils#toAssetEntity
var latitude: Double? = null
var longitude: Double? = null
context.contentResolver.openInputStream(getUri(id, getMediaType(type)))?.use {
    val exifInterface = ExifInterface(it)
    val latLong: FloatArray = kotlin.FloatArray(2)
    if (exifInterface.getLatLong(latLong)) {
        latitude = latLong[0].toDouble()
        longitude = latLong[1].toDouble()
    }
}

@lucasmz-dev
Copy link

It'd be nice if Immich implemented the media permission so that this doesn't happen, it does manage media afterall

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants