mirror of
https://github.com/immich-app/immich.git
synced 2026-02-05 00:30:57 +03:00
[BUG] Downloading image to mobile device that has been uploaded with CLI results in duplicates. #737
Closed
opened 2026-02-04 22:11:41 +03:00 by OVERLORD
·
31 comments
No Branch/Tag Specified
main
feat/asset-file-apis
chore/translations
fix/web-switch-label-clickable
fix/web-people-hidden-state
renovate/typescript-projects
release/next
fix/timezones
fix/time-zone-upserts
midzelis/wip
push-zpwsovysllvn
push-nwxlpmyzkyrl
push-nvnkszuqwppm
renovate/github-actions
push-smstsuupsowp
refactor/adaptive_image
push-olwpzvrxnomt
push-lmxsupnmxspl
renovate/machine-learning
feat/web-chromecast-video-looping
feat/use-native-clients
renovate/flutter
fix/create-face-edited
fix/mobile-ios-mtls
docs/contributing
docs/mise-mobile
renovate/grafana-monorepo
feature/bottom-buttons-order
feat/immich-mobile-ui-showcase
refactor/consolidate-image-requests
renovate/connectivity_plus-7.x
renovate/major-vitest-monorepo
renovate/pypi-python-multipart-vulnerability
fix/mobile-people-query
sqlite_thumbs
feat/html-text
chore/no-macro-validation
refactor/purchase-store
uhthomas/mobile-fix-app-bar-fade
uhthomas/mobile-fix-asset-jump
feat/pano-ocr
feat/shared-link-login
fix/database-backup-db-names
fix-keep-correct-ios-shared-album-asset
fix-memory-generation-and-display
feat/verify-permissions
refactor/album-service-small-tests
fix/ml-rocm-build
fix/flipped-dimensions-mobile
push-vpxwmwwxwnvw
fix-migration-width-height
refactor/more-queries
revert/prettier-translations
refactor/asset-service-queries
fix/locale-settings-desc
chore/add-debug-log
feat/edit-filters
shared-deep-link-handler
feat/mobile-editing
feat/thumbnail-native-clients
feat/platform-clients
feat/integrity-checks-izzy
fix/foreground-cloud-sync
feat/dynamic-layout
filter-by-person
feat/csp
refactor/sidebar
fix/disable-editing
fix/view-timeline-deeplink
image-zoom-on-slow-connection
fix-consider-dar-for-video-dimension
fix/merged-edited-assets
perf/optimize-album-sort
open-api-fix
feat/create-job-with-dto
use-toast-primary
feat/vitest-4
feat/ios-fastlane-match
match-signing
fix-update-time-update-timeline
chore/translation-keys
feat/modal-routes
feat/panorama-tiles
feature/mobile-view-asset-owner
feat/system-settings
feature/show-activity-count
better-info-in-asset-viewer
fix/all-people-count
feat/location-favorites
feature/rearrange-buttons-2
fix/download-storage-template
feat/kb-shortcuts-mobile
fix/people-count
push-qolzzzzxrvvn
chore/originals-in-asset-files
feat/asset-size-columns
ben/tree-a11y
new-search-filter-ui
refactor/expectSelectedReadonly
refactor/mobile-grdb
push-qvuktpxmkknu
feat/mobile-native-local-sync
refactor/timeline_ops
fix/scrubber_end
feat/version.txt
feat/context-menus
feat/server-chunked-uploads
refactor/virtualsegment
refactor/rename_daymonth_groups
fix/restrict-android-bg-worker
feat/android-periodic-worker
fix-remote-sync-clean-up
refactor/timeline_move_ops
renovate/mapbox-mapbox-gl-rtl-text-0.x
fix/timeline_split_selectable
feat/keyboard_actions_help_modal
feat/static_frontend
feat/notification-warnign-android
feat/plugins2
feat/plugins
test/create-workflow-token-action
fix/docs-force
debug/search-result-similarity
debug/cf-chunked-uploads
feat/eslint_rule
feat/search-filter-album/web
refactor/timeline_photostream
refactor/timelineasset_asset
feat/session-permissions
feat/timeline_photostream_assetnav
feat/timeline_minor_optimize
feat/timeline_perf_nocomp
feat/timeline_search_results_actions
feat/timeline_search_results_page
fix/timeline_padding
fix/timeline_search_reactivity_warnings
feat/timeline_scrollbar
feat/timeline_stream_withviewer
fix/timeline_back_forth_nav
refactor/timeline_photostream_component
fix/generated-files-checks
fix/locate-button-local
chore/base-image-mimalloc
refactor/timeline_assetlayout
refactor/timeline_selectable
refactor/timeline_aware_actions
refactor/timeline_monthsegment
feat/remove-old-pages
chore/deps-gradle
tmp_photostream
tmp/lcms
feat/mobile-dynamic-thumbnails
fix/mobile-finer-thumbnail-concurrency
refactor/timeline1
refactor/extract_photostream
refactor/rename_load_api
refactor/timeline2
refactor/timeline3
feat/multi-select-asset-viewer
feat-no-thumbhash-cache
refactor/asset_grid
feat/faster-access-checks
fix/18991
fix/19543
chore/temp-remove
fix/21419
feat/mobile-hdr-images
chore/update-mise-lockfile
feat/mise-server-checks
feat/mise-ci
feat/windows-2025
feat/dev_cli
refactor/mobile-migrate-clients
fix/map-theme
fix/require-checkbox
chore/use_swc
feat/efficient-thumbnail-decoding
refactor/mobile-thumbhash
refactor/mobile-thumbhash-new
fix/mobile-uncached-zoom
feat/beta-background-upload
fix/beta-timeline-memories-setting
fix/failed-uploads-not-removed
feat/mobile-shared-album
feat/groups
drift-map-page
drift-auth-user-sync
fix/disable-memory
feat/add-to-album-action
edit-date-time-action
drift-people-page
sqlite-remove-isIn
feat/inline-storage-columns
chore/required-reviewers
refact/asset-manager
fix/folder-sort
pnpm
feat/widget-multiple-server-urls
chore/medium-tests-dbname
fix/web-no-iterator-find
fix/map-pan-interruption
track-livephotos
timeline_events
chore/oxlint-migration
feat/maintenance-worker
feat/dav
chore/demo-snapshot
refactor/server-side-dedupe
feat/integrity-checks
dev/recognition-eval
lighter_buckets_test
perf/postgres-queue
postgres-queue
focus_rings
refactor/web-stores-1
refactor/add-to-taken
feat/sort-places
feat/sidecar-asset-file
vet
tmp/demo-snapshot-preview
fix/server-migration-file-extension
refactor/mobile-v2
fix/asset-update-race-condition
rknn-toolkit-lite2
refactor/mobile-split-up-search-page
feature/Add-rocm-support-for-machine-learning
feat/rocm
chore/async-hash-file
feat/shared-link-view-count
feat/rotation
feat/graphql
feat/job-ids
feat/ignore-library-permission-error
feat/docker-compose-builder
feat/kysely-typeorm
mobile/onboarding
no-video-player
fix/server-qsv-output-format
chore/server-geodata-tweaks
mobile/native-video-player-no-hero
feat/xxhash
fix/docs-concurrency
feat/preload-ml-textual-model
feat/local-tileserver
refactor/exif-orientation
original-path-infix
refactor/mobile/login-form-1
feat/server-editor-endpoints
fix/server-qsv-vbr
fix-mobile-db-problems
feat/ml-armnn-conversion
feat/mobile/backup-with-album-info
feat/fast-initial-sync-1
chore/handle-output_dims
feat/server-more-robust-generation
feat/unassign-faces
feat/shortcuts-on-asset-grid
feat/background-upload
feat/capacitor-mobile-app-poc
feat/server-nvenc-hw-decoding
release/v1.105
fix/mobile-fetch-non-archive
feat/fine-grained-access-controls
web/automation-ui
feat/mobile-server-endpoint-save-dropdown
feat/blurhash-thumbnail
object-storage
feat/memories-animations
dev/metrics
ml/tflite
feat/ml-export-cli
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.1
v2.0.0
v1.144.1
v1.144.0
v1.143.1
v1.143.0
v1.142.1
v1.142.0
v1.141.1
v1.141.0
v1.140.1
v1.140.0
v1.139.4
v1.139.3
v1.139.2
v1.139.1
v1.139.0
v1.138.1
v1.138.0
v1.137.3
v1.137.2
v1.137.1
v1.137.0
v1.136.0
v1.135.3
v1.135.2
v1.135.1
v1.135.0
v1.134.0
v1.133.1
v1.133.0
v1.132.3
v1.132.2
v1.132.1
v1.132.0
v1.131.3
v1.131.2
v1.131.1
v1.131.0
v1.130.3
v1.130.2
v1.130.1
v1.130.0
v1.129.0
v1.128.0
v1.127.0
v1.126.1
v1.126.0
v1.125.7
v1.125.6
v1.125.5
v1.125.4
v1.125.3
v1.125.2
v1.125.1
v1.125.0
v1.124.2
v1.124.1
v1.124.0
v1.123.0
v1.122.3
v1.122.2
v1.122.1
v1.122.0
v1.121.0
v1.120.2
v1.120.1
v1.120.0
v1.119.1
v1.119.0
v1.118.2
v1.118.1
v1.118.0
v1.117.0
v1.116.2
v1.116.1
v1.116.0
v1.115.0
v1.114.0
v1.113.1
v1.113.0
v1.112.1
v1.112.0
v1.111.0
v1.110.0
v1.109.2
v1.109.1
v1.109.0
v1.108.0
v1.107.2
v1.107.1
v1.107.0
v1.106.4
v1.106.3
v1.106.2
v1.106.1
v1.106.0
v1.105.1
v1.105.0
v1.104.0
v1.103.1
v1.103.0
v1.102.3
v1.102.2
v1.102.1
v1.102.0
v1.101.0
v1.100.0
v1.99.0
v1.98.2
v1.98.1
v1.98.0
v1.97.0
v1.96.0
v1.95.1
v1.95.0
v1.94.1
v1.94.0
v1.93.3
v1.93.2
v1.93.1
v1.93.0
v1.92.1
v1.92.0
v1.91.4
v1.91.3
v1.91.2
v1.91.1
v1.91.0
v1.90.2
v1.90.1
v1.90.0
v1.89.0
v1.88.2
v1.88.1
v1.88.0
v1.87.0
v1.86.0
v1.85.0
v1.84.0
v1.83.0
v1.82.1
v1.82.0
v1.81.1
v1.81.0
v1.80.0
v1.79.1
v1.79.0
v1.78.1
v1.78.0
v1.77.0
v1.76.1
v1.76.0
v1.75.2
v1.75.1
v1.75.0
v1.74.0
v1.73.0
v1.72.2
v1.72.1
v1.72.0
v1.71.0
v1.70.0
v1.69.0
v1.68.0
v1.67.2
v1.67.1
v1.67.0
v1.66.1
v1.66.0
v1.65.0
v1.64.0
v1.63.2
v1.63.1
v1.63.0
v1.62.1
v1.62.0
v1.61.0
v1.60.0
v1.59.1
v1.59.0
v1.58.0
v1.57.1
v1.57.0
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.1
v1.54.0
v1.53.0
v1.52.1
v1.52.0
v1.51.2
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.0
v1.48.1
v1.48.0
v1.47.3
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.0
v1.43.1
v1.43.0
v1.42.0_65-dev
v1.41.1_64-dev
v1.41.0_64-dev
v1.40.1_63-dev
v1.40.0_63-dev
v1.39.0_61-dev
v1.38.2_60-dev
v1.38.1_60-dev
v1.38.0_60-dev
v1.37.0_58-dev
v1.36.2_56-dev
v1.36.1_55-dev
v1.36.0_55-dev
v1.35.0_54-dev
v1.34.0_53-dev
v1.33.1_52-dev
v1.33.0_52-dev
v1.32.1_51-dev
v1.32.0_50-dev
v1.31.1_49-dev
v1.31.0_49-dev
v1.30.2_48-dev
v1.30.0_46-dev
v1.29.6_45-dev
v1.29.6_44-dev
v1.29.5_44-dev
v1.29.4_44-dev
v1.29.3_43-dev
v1.29.2_43-dev
v1.29.1_43-dev
v1.29.0_42-dev
v1.28.4_41-dev
v1.28.4_42-dev
v1.28.3_41-dev
v1.28.2_40-dev
v1.28.1_39-dev
v1.28.0_38-dev
v1.27.0_37-dev
v1.26.0_36-dev
v1.25.0_35-dev
v1.24.0_34-dev
v1.23.0_33-dev
v1.22.0_32-dev
v1.21.1_31-dev
v1.21.0_31-dev
v1.20.3_30-dev
v1.20.2_30-dev
v1.20.1_30-dev
v1.20.0_30-dev
v1.19.1_29-dev
v1.19.0_29-dev
v1.18.0_27-dev
v1.17.0_25-dev
v1.16.0_23-dev
v1.15.1_21-dev
v1.15.0_21-dev
v1.14.0_21-dev
v1.13.0_20-dev
v1.12.0_18-dev
v1.11.0_17-dev
v1.10.0_15-dev
v1.9.1_14-dev
v1.9.0_13-dev
v1.8.0_12-dev
v1.7.0_11-dev
v1.6.0_10-dev
v1.5.1+9-dev
v1.5.0+8-dev
v1.4.0+7-dev
v1.4.0+6-dev
v1.4.0-dev
v1.3.0-dev
v1.3.1-dev
v0.6-dev
v0.5-dev
v0.4-dev
v0.3-dev
v0.2-dev
first-android-release
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: immich-app/immich#737
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @florihupf on GitHub (Mar 5, 2023).
Originally assigned to: @fyfrey on GitHub.
The bug
Hi there,
maybe not the most common workflow, but never the less would be great to fix.
Repro:
a) Fresh install of Immich
b) Upload tons of pictures to the server using CLI tool (works great).
c) Install mobile app (here iOS)
d) Browse photo selection and download one to mobile device (say you want to use it as background image, etc).
e) Observe that mobile app will instantly detect this image and re-uploads it as a duplicate to the server.
Upon closer inspection what I can see if that the filename endings differ:
Orig.: IMG_6502.jpg
Dupe: IMG_6502.jpg.JPG
On the plus: Deleting the duplicate will only delete the duplicate and not both. 👍
Would be a great fix, if easy.
The OS that Immich Server is running on
Truenas Scale
Version of Immich Server
v1.51.0
Version of Immich Mobile App
v1.51.0
Platform with the issue
Your docker-compose.yml content
Your .env content
Reproduction steps
Additional information
No response
@bo0tzz commented on GitHub (Mar 5, 2023):
Does the image actually show up duplicated in the (web) UI after this?
@florihupf commented on GitHub (Mar 5, 2023):
Also, let's say for simplicity, the iOS photo roll is empty when doing c) from the repro steps.
@florihupf commented on GitHub (Mar 5, 2023):
Yes, it also shows duplicated on the web.
@bo0tzz commented on GitHub (Mar 5, 2023):
That's very strange, since we have hash-based deduplication so it should be detected that it's the same file. Is there a chance that it's being picked up by iCloud photos or such and being compressed or otherwise altered?
@florihupf commented on GitHub (Mar 5, 2023):
Don't think so, it happens right away. Also I have iClouds photos disabled.
@florihupf commented on GitHub (Mar 5, 2023):
Is there maybe a difference between how the hashes are computed for CLI uploads and mobile assets?
@jrasm91 commented on GitHub (Mar 5, 2023):
Hashes are computed on the server regardless of what client uploads them.
@florihupf commented on GitHub (Mar 5, 2023):
Does the file name go into the hash? Maybe downloading an image modifies it.
@klejejs commented on GitHub (Mar 6, 2023):
I can confirm, I have a similar issue.
Steps to reproduce:
I did notice that GPhotos also has the same issue, so I wonder if the hash or something else about the images actually does change. 🤔
I also don't use iCloud if that can impact anything.
@Dilanwizzy commented on GitHub (Mar 21, 2023):
This issue is related to IOS and how it handles pictures. By default IOS will try and optimise the images on your device to save storage and uploading the original to iCloud. So, when you download the image from immich onto your device. IOS will try and optmise it, and because the file has changed. Immich will pick this up as a different photo. I have tested this, and the files are usually different sizes no matter how many times I download and it gets reuploaded.
I found this while searching
"
someone on Reddit said the problem is from the iOS end of things. On the iphone, under Settings, Photos, you need to turn off "optimise iphone storage" and switch instead to "download and keep originals". The first option means that if your phone is low on space, it replaces full-resolution photos with smaller versions and keeps the full sized version in iCloud. I just did this and the problem appears to be solved.
"
Source
I have tried this. On my side already uploaded images seems to keep being reuploaded. Newer images are working properly and you don't get duplicates
As this is an IOS issue, I believe it will be appropriate to have some documentation around this so people understand. Nothing immich can do besides having to extract the metadata and comparing everything
@bo0tzz
@klejejs commented on GitHub (Mar 21, 2023):
@Dilanwizzy isn't that the case only if you have iCloud photos enabled? I do not upload photos to iCloud so I don't have that option available, but I still have the the issue.
@Dilanwizzy commented on GitHub (Mar 21, 2023):
@klejejs The uploaded pictures have different sizes. I have just done what you explained and each time the size is different. The size difference is usually by 1 or 2 kb. Here is a file continuously downloaded.
3,292,209
3,291,980
3,291,298
3,292,438
File size each time is different. I have also seen it be the same and the image does not get uploaded. I don't see this with a file taken on my iPhone and downloaded. This happens only when the file is downloaded from a different source and then you save the image.
The issue is 95% looking like its all related to IOS, and how they handle images. I am not seeing this on Android
@jrasm91 commented on GitHub (Mar 21, 2023):
Instead of looking at sizes it would be best to do a sha1 hash.
You should be able to verify the hash at each step and it should be the same at each step. Immich should not modify it at all, ever.
If the sha1 changes at any step, that would be a problem. It might be related to iOS cloud stuff though.
@Dilanwizzy commented on GitHub (Mar 21, 2023):
I used sha1 hash to verify and the file each time the hash is different. The different sizes show that maybe IOS is doing something with the files.
The same issue also happens on Google Photos. I am not getting this issue on Android as mentioned
@jrasm91 commented on GitHub (Mar 21, 2023):
Do you have some files you can upload that I can inspect? Ideally, an original and then a download-and-modified version.
@Dilanwizzy commented on GitHub (Mar 21, 2023):
So, it seems like the way google handles this is by appending the word original to the file. And then treating the file on the server and the one downloaded as 1 file. Currently, immich would treat them as 2 separate images, with one being uploaded on the server and the other showing as not uploaded.
@florihupf commented on GitHub (Mar 22, 2023):
Yeah, also quick note that I have iCloud disabled and thus the option mentioned is not available for me.
@jrasm91 commented on GitHub (Mar 22, 2023):
Can somebody share/upload a sample image (before and after) that I can investigate with? Otherwise, it is hard to know what is going on.
@florihupf commented on GitHub (Mar 22, 2023):
Ok, will see to it.
@florihupf commented on GitHub (Mar 22, 2023):
immich.zip
Here is a zip with a picture uploaded via CLI on Feb/23. I just downloaded onto my phone on Mar/22 and it got uploaded right away as a duplicate. I downloaded them both using the web gui. Note that the zip contains two files with the same name.
HTH and thanks for taking a peek!
@colin715 commented on GitHub (Mar 31, 2023):
I'm seeing similar behavior on Android. My wife (also Android) and I share a user account so that we can see each other's pictures. If I download an image to my device that my wife took, then I end up with a duplicate photo. And the original photo still shows up as not on my device.
@alextran1502 commented on GitHub (Mar 31, 2023):
Thank you all for the report, we are hoping to address this issue in the next release or so
@t-shock commented on GitHub (May 22, 2023):
I set up Immich couple days ago and I’m facing the same issue with my iPhone
@florihupf commented on GitHub (Jun 10, 2023):
Wohoooooooooooo 💯 🥇
@uhthomas commented on GitHub (Jun 16, 2023):
@florihupf You reported your server and app versions as
v1.61.1, which isn't a valid release. The current release isv1.61.0. Would you mind checking both are up to date?@florihupf commented on GitHub (Jun 17, 2023):
Yeah, my bad. I am up to date with v1.61.0. Typo on the last digit.
@fyfrey commented on GitHub (Jun 19, 2023):
@florihupf these must be different files (maybe iOS does not give access to the original file or a bit error occurred). There can only be exactly 1 asset with the same checksum per user. Please check whether the files have the same checksum (enable advanced error reporting in Immich app settings, show info of the two duplicates)
@florihupf commented on GitHub (Jun 19, 2023):
I can repro with more detail.
How do I enable advanced error reporting? In the iOS Immich app, I see Log Level: Info and a trouble shooting toogle. What settings should apply?
As for the repro steps:
a) Just click download on any picture that is not downloaded to the phone yet (but uploaded via CLI to the server).
b) Upon completion of the download, there will be two images in the mobile app (identical looks) and the second image will be uploaded to the server, creating a duplicate there as well (after a delay).
HTH
@fyfrey commented on GitHub (Jun 21, 2023):
Enable trouble shooting. Then when clicking the info icon in the full screen view, you see advanced/raw info about an asset.
I bet the checksums are different. But I don't know yet why.
@paniman commented on GitHub (Sep 15, 2023):
One solution for the slightly adjusted image to detect as duplicate could be to use phash instead of a another hash algorithm.
Source: https://www.phash.org
@florihupf commented on GitHub (Nov 5, 2023):
Hi there,
just tried this again and it works now. Lets close this out. Thanks!