GPS data not being parse by immich from android
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
- [X] Server
- [ ] Web
- [X] 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
Does the app have location access permissions?
It does
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?
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
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?
I have tried this, and still no GPS
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.
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.
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
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()
}
}
It'd be nice if Immich implemented the media permission so that this doesn't happen, it does manage media afterall
I'm facing the same problem, that location data is removed. And I also have Calyxos. Is there a workaround? Deactivation the redaction feature as mentioned in https://github.com/immich-app/immich/issues/11280#issuecomment-2267078351 did not help.
In addition to deactivate redaction, Immich also needs location rights (Android Settings -> Apps -> Immich -> Permissions)
@avanc existing media already uploaded to Immich would not suddenly get their GPS data unfortunately AFAIK. I use ente and it doesn't there at least. I don't see why it would need location permission, that isn't an usual Android thing.
I had this problem too on my CalyxOS phone. Ente Photos also has the same problem, but it can show all EXIF data in a list, and I could see that the GPS coordinates are all zeros.
It turns out that its indeed the "Redact location data when sharing media" setting at play here. Turning it off did not change anything immediately, but after a reboot both Ente Photos shows the EXIF data and Immich could now upload the image along with location information.
But thats not everything. The "Redact location data when sharing media" permission has this description:
Only galleries and file managers may read location metadata from your photos and media. (Third-party apps must have All Files Access or Media Management permissions.)
So it should just work, right? (Though what does Media Management permissions mean is unclear to me.) There are 2 things that could mean thats not the case.
First, the android developer documentation says the ACCESS_MEDIA_LOCATION permission needs to be asked separately. For me this is already granted, but probably only because I granted location permission manually. Second, it also says that even with ACCESS_MEDIA_LOCATION permission the image needs to be read in a special way to get unredacted location information, which is demonstrated in an example.
Can we somehow update the metadata of already uploaded images, without deleting all of them?
I think I figured it out. Both Immich and Ente Photos request the "Media Management" permission, but there is no pop up for it to ask the user whether to allow it, instead it can only be granted in "Settings > Apps > Special app access > Media management apps". This controls the android.permission.MANAGE_MEDIA permission that the "Redact location data when sharing media" setting refers to.
If I grant this permission for these apps, then both Immich and Ente Photos will be able to access the GPS coordinates in any of the photos, even with "Redact location data when sharing media" being enabled. So users can do this once manually and it will work as expected.
Apparently this permission was introduced in Android 12: https://developer.android.com/about/versions/12/features#storage But it seems originally it is only used for controlling whether the app can delete images without user confirmation, and maybe Calyx and Graphene extended the meaning of it.
Well, I cant determine if its Immich or the ROM devs who should fix their code. But I can understand ROM devs who made this change, because ACCESS_MEDIA_LOCATION in itself is ineffective: its granted by default, and does not even have a toggle anywhere, while MANAGE_MEDIA is not granted by default.
And it makes sense that an app like Immich should directly request this permission. Especially because according to the docs, this is also needed for it to be able to delete already backed up images without user confirmation.