mirror of
https://github.com/immich-app/immich.git
synced 2026-02-05 00:30:57 +03:00
[BUG] Wrong Date but Exif good #1653
Closed
opened 2026-02-05 02:52:21 +03:00 by OVERLORD
·
27 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
No Label
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#1653
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 @stevenwalton on GitHub (Nov 20, 2023).
The bug
I was testing a way to backup my Google Photos and though, hey, I'll try to move some photos to the device and see if Immich automatically syncs them. Not a great solution because you can't batch move images to device but that's not important.
So I test with a few images, taking my oldest images. As expected Immich backs up the photo. Success? These photos are actually at the newest portion of my timeline. So I go to today's Immich folder and run
exiftool myimg.jpg. Looking at the output things look rightIn this case we can probably tell which is the correct date given the name of the file but probably not something to rely on. x's artificial because you don't need minute and second the photo was taken. The other exif data is also good but irrelevant to the topic at hand (it correctly captures the phone I used, software that processed the image, etc).
I believe that Immich is grabbing the most up to date time rather than the actual date the photo was taken (in 2012). In the web interface we also see that it says the photo was taken at
Nov 19, 2023Sun, 9:36 PM GMTwhich does not seem to match any time I'm seeing.I don't know much about the internals to this software so I don't know if just changing the key it looks for resolves this issue or breaks others but just that this is unexpected behavior. I apologize if someone else has brought up the issue but I couldn't find it.
The OS that Immich Server is running on
Debian 12 (bookworm) on a raspberry pi 4
Version of Immich Server
v1.86.0
Version of Immich Mobile App
v1.87.9 build.111
Platform with the issue
Your docker-compose.yml content
Standard with the 3 lines for hardware acceleration commented out
Your .env content
Standard
Edit
I didn't check hard enough. Some images did get properly moved to the correct location on the timeline! Here's the same output for images that DID move correctly
It appears their exif data is slightly different. The systematic pattern is that the files that did not move correctly were taken with the "Pudding camera" app, which looks to generate slightly different data. Those photos were also taken from a Droid 2 but the correct photos form a Galaxy S3.
@alextran1502 commented on GitHub (Nov 20, 2023):
Are all the jobs finished yet? especially the extract metadata job?
@stevenwalton commented on GitHub (Nov 20, 2023):
Wow, impressive response time! (Thanks for the project too!)
I believe so but we can give it an hour to check and I can also reboot the container.
Looking at my logs I see a bunch of lines such as
Further up there are errors like this
But these are for the images that actually got placed in the correct location. I also have some errors about the ML jobs erroring out but I'm not too worried about those. I can get them if you want (it's only classified two faces and two images. Server's been up for over a week but initial upload of images had the ML container shut down).
I grepped for the year because exact date couldn't find anything and there was too much looking by hand
This is the only message that is associated with the previous image. There are only two of these messages and others have errors, here's an example. From the above command, they all have this same form
It's only two files actually and both have leading "Screenshot" but there are 9 instances of the error. This is all I see grepping for the 2012 year.
Clearly my server's clock is incorrect so ignore the other time issue above about being 9pm.
Edit: guess the classifier is processing these images since it is updating (but also not important here)
@stevenwalton commented on GitHub (Nov 20, 2023):
Following up, I restarted the servers and gave it a try. I let them sit for awhile (30 mins ish). Seeing no actions being produced in the logs and power draw and top output normalized, so I shut down and updated. So I am now on server v1.87.0. No logs are being produced other than the actions I perform and the problem persists.
Is there a way to force a recheck? This would also be useful as I do have some photos that did not properly upload. This is likely unrelated but just trying to provide additional info. Similarly a likely unrelated issue is that some files did upload that were not from the google photo folders I selected, such as album art. I understand there is some update mechanism but I am unsure what the proper call for this is.
@stevenwalton commented on GitHub (Dec 1, 2023):
Okay, so I looked at this problem a bit more and I think I figured out what's going on. I'm pretty sure Immich is reading the wrong exif tag. This is a rather weird thing that I found, but looking at my sidecar data I find that the only valuable metadata is the description, album name, and people that are tagged in photos (may be nice to integrate with the face identification and you can automatically tag people by name!). GPS data and creation time data is wrong.
The bigger issue, is that looking at exif data in the actual image itself there's multiple versions of some tags, specifically time. I believe Google is prepending data and so it just stacks up. But we have unique tags that do have the correct value and so I believe those should take priority if they're found.
Let's see an example
Some data removed for privacy or readability (there are >120 tags!)
So we'll remember that Google names the files based on the UTC timestamp (which is why I redacted in my first message). So
PXL_20231129_043736033.jpg=> 29 Nov 2023 at 4:37:73 UTC, I'm in PST (indicated by the -08:00) so that's 20:37. We see that the first instance of the tagsModify Date,Date/Time Original, andCreate Dateare suspiciously close to the time of this comment and in local time (and indicating the timezone information). Times might be similar but that's coincidence, notice the date. We probably shouldn't trust these ones. But these same tags along withGPS Date/Timeare the actual time the photo was taken and correspond to the correct time (GPS has Z, so presumably Zulu, and the small difference may just be GPS drift). We'll ignore GPS date time though because a user may not have that enabled. We can't rely on GPS data though because if you don't have it on then it won't be included.Going through a bunch of files I find that in every case it was always the last instance of
Modify Date,Date/Time Original, andCreate Datethat was correct and the first instance was not guaranteed. I mentioned earlier that they prepend, and the belief for this is that this exactly corresponds with the time I uploaded that photo to Google photos, which is why it's so close to this comment's time.TLDR: use the last instance of the
Date/Time Originaltag and you're all good.Edit: unrelated side note, google seems to have updated the motion picture file extension to "MP". Exif shows the mime type is video/mp4 and if you change the file extension they read just fine. Idk how Immich handles this, but it seems the future proof way would be to rely on exif data instead of extensions because it looks like (via github search) you whitelist the extensions.
@Batwam commented on GitHub (Dec 1, 2023):
Rather than using the "last" instance, you probably want to find the accurate tag name (rather than description) you want to rely on since multiple tag appears to have
Date/Time Originalin their description.What is the full name of the tag you'd want to use ("last" tag) if you do
exiftool -s -time:all PXL_20231129_043736033.jpg?@stevenwalton commented on GitHub (Dec 1, 2023):
So
CreateDatelooks good here. But I'm trying to think of this in general because Immich needs to not just read google photos, but many others. In the other issue that referenced this one, I picked a random imgur image that didn't have integers in the name. Let's do the sameThat does correspond to me downloading right now but you can see that they are different tags. So it makes sense that you would pull time data from something like
FileModifyDatebut if we used that tag for the Pixel image we'd get the wrong date, which is exactly what happened for the original issue. I'm not going to pretend to be an expert on this and I'm sure there's better solutions, but to me this is indicating there needs to be a hierarchy of tags that take precedence over another because there's clearly no universal option. You can't even take the earliest date since the profile date is way off. Which kinda sucks, but it very much explains the problem that is the reason for this issue in the first place.(I'm trying to see if I have a picture from an iPhone somewhere and I'll edit the comment at that time)Edit: Found a photo from an iPhone but downloaded from Google photos. It has all the same tags as the pixel photo except it is missing the GPS tags and SubSecTime (and the profile time has a dummy value).
CreateDatelooks to be the correct one but again is in local time.Let's try to get on topic though: What is Immich using?
@Batwam commented on GitHub (Dec 1, 2023):
If I'm not mistaken, it's specified in row #30 of this file
Is this prioritisation consistent with what you are seeing?
@skynetua commented on GitHub (Dec 1, 2023):
Is it possible to not change or at least store somewhere the following dates after uploading?
When photo from messenger is uploaded to imich it shown at date when was received, but after downloading it back from imich it losts this date and shown as today. Google photo has this issue as well.
Found #3900
@stevenwalton commented on GitHub (Dec 1, 2023):
@Batwam , Sure metadata.service.ts:30 has some information but its not addressing the tags at hand. AND it is not a prioritization list, it is just an array. It's used here and here.
There doesn't appear to be logic that matches
DateTimeOriginalandDate/Time Originaleither. And what TheFiledates aren't even there. And the lines above look like they're prioritizing sidecar data which my investigation shows to be utterly unreliable. Fwiw, until I switched over to Immich I had a more privacy maximal settings, and I do not think this is an unreasonable belief to assume many other users will be in a similar boat. Sidecar seems only reliable for: Album names, tagging of auxiliary information (such as people), photo description, and view count. It is not consistent with date time nor GPS (I've never been to Null Island but Immich sure thinks I have).As @skynetua is pointing out, there are plenty of weird issues going on and you can find a lot of open issues with datetime. Certainly we should be at least supporting whatever Google Photos and iCloud are doing. But it also seems to be an evolving environment and as is typical, anything to do with time is just a mess. My domain expertise is not really going to help here (I'd be better providing support on the ML side) so all I can do is report what I see and make a suggestion that should really only be a launching point not a solution (better suited for someone that actually understands all this exif mess haha)
@psyciknz commented on GitHub (Jul 3, 2024):
I believe there is a similar issue when using XMP files. Where they only contain a create/modify date. An asset (upon metadata refresh), then takes the XMP file date.
I think there needs to be the ability to prioritise a date field. Ie a user can select that over everything else, the Exif date taken or Exif DateTimeOriginal takes priority over any other date. Only if that is missing should a file date be used.
It was discussed on discord here: https://discord.com/channels/979116623879368755/1257530194827411517 And rather than create a new issue as it does seem to be the same issue that is described here (date field priority). I chose to append to here. I can create new issue if preferred.
@zmc commented on GitHub (Jul 15, 2024):
Trying out Immich for the first time, and just finished backing up all my Google Photos to my instance via the mobile app. I've just noticed a large amount of photos with incorrect dates. Here's the exif information for one of them:
So this image is considered to be from 2021-11-03, when in fact it was taken on 2017-02-13. Exif agrees, the filename agrees... and Immich seems to ignore it all. No jobs are running, and rerunning the "extract metadata" and "storage template migration" didn't fix them.
@psyciknz commented on GitHub (Jul 15, 2024):
Lack of TImeTaken would be a problem. How can immich be expected to choose between date modified and date created. Thats where the specific TimeTaken and TimeTakenOriginal are so good.
@stevenwalton commented on GitHub (Jul 15, 2024):
I believe we discussed a lot of this with what I brought up earlier. I'm sure that someone knows much more about the typical formatting of filenames and exif data, but it is pretty clear that Google modifies values. So there's a few things that can be checked.
First, in both our cases, and to the best of my knowledge, the earliest date is never an obtuse one. So why not look at several and default to the earliest? I'm very willing to believe that there's a reason, I'd just like to know.
Second, we do know for a fact that filenames often contain date data. Why not use this? We can check for it with a regex. In our case something like
^[A-Z]{3}_(19|20)\d{2}(0\d|1[0-2])(0\d|(1|2)\d|3[0-1])_\d+.*\.(?i)(jp.?g|png)$works great (check for 3 leading capital letters, followed by_then a year in 1900/2000 followed by a month (01-12), followed by a day <31, followed by another_, numbers, anything, and ending in a case insensitive extension of{jpg,jpeg,png}). Or maybe even a simpler version.*(19|20)\d{2}(0\d|1[0-2])(0\d|(1|2)\d|3[0-1]).*\.(?i)(jp.?g|png)$1 that just looks for a date format inside anything. Will there be errors? Sure. 20111111.jpg is ambiguous and we don't support pictures taken in the year 2100. But there are already ones here that are creating enough problems. I'm also very willing to believe there's naming conventions I'm not aware of.The most reasonable approach to me seems to me to mark these images when they're being imported. To do the best to guess what the actual date should be, based on the context of the other exif data AND filename (given there is a match). And then allow the user to update the determined date, providing them a selection of the unique values extracted or to explicitly define one. This provides users with a simple means to correct the data while also not requiring any technical know-how.
While I think we can expect the person setting up the server to be technical, we should not expect the user to be. Plus, a little code saves a lot of time, especially when people don't know how to modify these things. Providing "smart" suggestions for dates can just be part of the normal edit date and time method. (The same can be true about the timezone suggestion, where you can place the timezone associated with the GPS data, if it exists, followed by the timezone's of a person's country based on the currently defined locale, and then sorted. I'm sure I'm not the only one who hates how frequently we have to scroll given the unnecessary nature of it.) Not to mention that even if the person is technical, it still is going to save them time and effort.
We're programmers and these are problems we can solve. Do we need a annoying set of conditional? Yes. But timezones and time are famously messy. We can at least do a bit better than we are now, and I don't see why we shouldn't want to improve. Improving a bit will reduce errors, help users, and reduce the number of issues related to bad dates.
I'm pretty sure formats will be in
<something>_date_<something>.extensionordate.extensionin which case^([A-Z]*_|)(19|20)\d{2}(0\d|1[0-2])(0\d|(1|2)\d|3[0-1])(|_.*)\.(?i)(jp.?g|png)$will glob that. On the off chance we have a-deliminator, change_to(-|_). ↩︎@OfficiallyCrazy commented on GitHub (Jul 22, 2024):
I would really like for this problem to be fixed. I love Immich.
@neopet001 commented on GitHub (Aug 11, 2024):
After finish importing all 200.000 photos to immich, I found a mess, everything is crazy! A terrible mess.
In shot, GPS data and creation time data is wrong.
Exif info in files are fine and as showing on Google Photos, dates are right as of iCloud too, same good thing on Synology Photo, but 60% of items date on immich is wrong, and GPS go the different way at all, completely wrong!
Love to see if this is fixed!
Update: refreshing metadata for those files doesn't help. Download the file from immich to desktop and check for exif result in right date while immich shows totally wrong date.
@alextran1502 commented on GitHub (Aug 11, 2024):
@neopet001 did you use Immich go to import your GPhotos take out?
@neopet001 commented on GitHub (Aug 11, 2024):
Yes I did, used
upload -google-photos ./takeout-*.zipWondering if deleting all json and import only photos might help?
Maybe I need to re-read all the docs to understand how "Refresh metadata" work, whether it reload sidecar file or re-read exif from the photo files? I tried refreshing metadata but the date and gps stayed still.
@alextran1502 commented on GitHub (Aug 11, 2024):
@neopet001 if you don't import with the json file, all the metadata will be lost afaik
@neopet001 commented on GitHub (Aug 11, 2024):
So what to do with all the wrong dates? It's ok on every other systems but not immich.
Here are the comparison:
Human memory: correct photo taken date: March 11th, 2022
File exif (with correct taken date, downloaded from Immich):


Google photo:

Synology photos (image filename was edit due to synology photos rule that I set upon backup):

Immich web:

Immich on ios:

Idk what's wrong but where did Immich get that date?
@psyciknz commented on GitHub (Aug 11, 2024):
This is the problem I have as well.
File taken 2019, and an XMP created in the past month. Immich displays the XMP creation date (external library) - ignore the path, only my photoprism contain has the exif tool
With the XMP as follows:
With immich reporting:

Which is from the XMP
I believe the issue is in prioritising what date should "win" when there are mulitples. And I believe, that original date/time, date time taken, exif fields, if there should win.
@alextran1502 commented on GitHub (Aug 11, 2024):
@neopet001 Can you attach the file above for troubleshooting? Cảm ơn!
@psyciknz FWIW, here is the list of date tags that get read and ordered by priority; I think when an XMP file is present, it will override EXIF's priority. Because XMP file get created when the file is modified, which mean the original information of the file is either incorrect or purposely changed by the owner
@psyciknz commented on GitHub (Aug 12, 2024):
Are these two different issues, or related? I can split if you prefer.
Even if xmp is there, shouldn't 'Date/Time Original : 2019:07:14 12:20:56.845' take priority? As an xmp may/may not include that as it's (IMO) not generally the full exif data is it, but supplimental.
@neopet001 commented on GitHub (Aug 12, 2024):
Sure here it is
IMG_4411.zip
Whatever, thank you for your incomparable dedication.
@neopet001 commented on GitHub (Aug 28, 2024):
Tried installing a brandnew immich instant today, uploaded again and the GPS & Date are wrong as before.
Love to know if there's any on-going fix or workaround for this core feature, as date is very important to date to sort and view.
@alextran1502 commented on GitHub (Aug 28, 2024):
@neopet001 So this is what I see, what do you see on your end?

@t0rv1c commented on GitHub (Aug 29, 2024):
Hi!
Same here: I have this original picture that I have uploaded (I did it twice: Immich-go and immich-cli) and the results are the same
This is the original:

This is how it is in immich:
XMP
And in the app:

I guess it's using my locale for the date (GMT-10) so the date is different but it's the XMP's.
It looks like there is an issue in the process with ExifTool....
Thanks for your help!
@stevenwalton commented on GitHub (Sep 1, 2024):
@alextran1502 is there something wrong with what I proposed?
I do not think this is an issue that can be solved by using a preferential list of Exif dates. Think about how we humans can determine the actual date from the reported Exif data (see mine if need an example). In my first example clearly the image is from 2014 and not 2023. How do we know? We look at multiple tags and for the earliest.
The second part is to make the experience easy for the user. It may take a small extra step, but it really isn't much work and the benefits compound. You can expose the other unique dates to the user as options instead of requiring manual selections (have both!). This should also help them report more easily. Think of it this way, everyone hates when you have a dropdown box on a website that asks you for your country and it is all just in alphabetical order. Yet we as programmers know we can have that sorted list, read the browser's country, and place that item at the top (it is seriously absurd that this feature is not common on websties...).
Clearly there's a problem and it isn't between the keyboard and chair. If there is a problem with what was proposed the issue is a great way to get other users involved and find a better working idea. But the current solution is broken since the problem is more complex than the solution can handle.