Problem/Motivation
As of #2831274: Bring Media entity module to core as Media module, core has a Media API. But it's not of much use without a few proper media plugins.
In order to replicate current image field behavior we need support for local images.
Proposed resolution
Adopt the Image plugin from Media entity image contributed module.
Besides that, create a media type for local images with sane default configuration. Initially, this bundle will be included with the core Media module (which is experimental), and moved into the Standard profile once Media is stable, as detailed in #2883813: Move File/Image media type into Standard once Media is stable and #2825215: Media initiative: Roadmap.
Remaining tasks
After #2831936: Add "File" MediaSource plugin landed, this was unblocked, and Wim did a comprehensive review (plus some rerolls), spread across #61 to #67. That last comment contains the current remaining tasks now that this issue is finally unblocked:
not yet passing tests (see #62 + #66)#63 points 4, 5, 10, 11 and 12.#63.5 is about tests, so addingNeeds tests
If #2831936: Add "File" MediaSource plugin needed a CR, then so does this. We decided to expand https://www.drupal.org/node/2883488 rather than create a new one.
Follow-ups
- #2883452: Provide upgrade path for media_entity_image config changes to Drupal core
- #2885729: Smooth out timezone handling when retrieving date/time info from EXIF
- #2886856: Fix the whitepsace in png introduced by #2831937
Pre-existing follow-up that this issue also needs: #2862467: Add complex field mapping to media module.
Comment | File | Size | Author |
---|---|---|---|
#101 | 2831937-99.patch | 39.44 KB | naveenvalecha |
#96 | 2831937-96.patch | 39.45 KB | phenaproxima |
#92 | interdiff-2831937-76-92.txt | 11.82 KB | phenaproxima |
#92 | 2831937-92.patch | 42.92 KB | phenaproxima |
#76 | interdiff-75-76.txt | 2.95 KB | seanB |
Comments
Comment #2
mtodor CreditAttribution: mtodor at Thunder commentedComment #3
mtodor CreditAttribution: mtodor at Thunder commentedHere is initial migration of Entity Media Image from "media_entity_image" module into core "media_entity" module.
As code base patch #61 from [#] is used. Relevant changes for Image Media are in "no_test" patch.
Remaining tasks
Comment #4
mtodor CreditAttribution: mtodor at Thunder commentedComment #5
mtodor CreditAttribution: mtodor at Thunder commentedReading of EXIF data didn't work, it should be fixed with this patch.
Comment #6
mtodor CreditAttribution: mtodor at Thunder commentedRolling out tests.
Comment #7
slashrsm CreditAttribution: slashrsm at MD Systems GmbH commentedWhat used to be types are not handlers.
This is image field. I assume this was wrong originally :)
Use short array syntax consistently throughout the file.
UX team would prefer this to be checkbox.
https://docs.google.com/document/d/1BnkA4fXZWG1nC4ipyl90BSvnE6Buqyjuz4gT...
This was originally added mostly to be able to disable it if exif support is not available in PHP. Maybe we can always enable that and just display a message if we detect that support is missing?
This will change to "::ajaxHandlerData" in the upstream patch.
Comment #8
Gábor HojtsyA yes/no thing should normally be a checkbox. If its not really a user choice then we should not display it. I *thought* it may be that taking the EXIF data takes time/resources and this may be a performance setting? But we don't have that kind of setting for the rest of the metadata which may also take considerable time to produce.
Comment #9
slashrsm CreditAttribution: slashrsm at MD Systems GmbH commentedThere is some performance impact obviously, but data won't be loaded until needed.
Comment #10
Gábor HojtsyAll right, then automating this would be the best from a UX perspective for sure.
Comment #11
dawehnerPersonally I just prefer to use
$media->get($source_field)
here, it provides more information and is less magic and we don't need the{}
weirdnessWe should use strict checking, see https://3v4l.org/9k0Bt
Another reason IMHO to not have the setting in the first place is that you already do an explicit action by setting up a field mapping for these additional fields anyway, so you kinda opt into additional behaviour already.
Comment #12
mtodor CreditAttribution: mtodor at Thunder commentedHere are patches with comments from #7 and #11.
Relevant patch is: 2831937_12-do-not-test.patch -> changes are based on patch #61 from #2831274: Bring Media entity module to core as Media module. And also functionality from #2831936: Add "File" MediaSource plugin.
For comment #7:
For comment #11:
get()
is used nowBase test is added, but it's not final. It should be enhanced, to test few additional things:
Comment #13
mtodor CreditAttribution: mtodor at Thunder commentedHere are added tests listed in #12.
Fixture JPEG image with EXIF data is added, so that we can check reading of EXIF data.
Comment #14
mtodor CreditAttribution: mtodor at Thunder commentedRebase on top of #25 of #2831936: Add "File" MediaSource plugin.
Also default source field is provided.
Comment #15
mtodor CreditAttribution: mtodor at Thunder commentedComment #17
mtodor CreditAttribution: mtodor at Thunder commentedFixed Full patch for testing. Other patches - do-not-test and interdiff are correct.
Comment #19
mtodor CreditAttribution: mtodor at Thunder commentedHere is rebase on top of #37 -> #2831936-37: Add "File" MediaSource plugin.
Comment #21
slashrsm CreditAttribution: slashrsm at MD Systems GmbH commentedI added another dependency in https://www.drupal.org/node/2831274#comment-11827943. Sorry :(
This values now need to be an array with current strings under "label" key.
Comment #22
mtodor CreditAttribution: mtodor at Thunder commentedAdded default configurations and adjusted comments written in #21.
Comment #23
mtodor CreditAttribution: mtodor at Thunder commentedAdjustments related to #159 from #2831274: Bring Media entity module to core as Media module - for full stack testing patch, adjustments to mentioned patch are required in #2831936: Add "File" MediaSource plugin.
Comment #24
seanBRebased on #2831936-47: Add "File" MediaSource plugin. Renamed the getSourceFieldValue function to getSourceFile. Also removed some generic test functions now added in MediaHandlerTestBase and moved the changes for MediaHandlerTestBase to the patch in #2831936-47: Add "File" MediaSource plugin.
Comment #25
seanBShould be ready to test...
Comment #26
tedbowI am getting weird behaviour where the thumbnail of the image remains of the first image that uploaded even if I remove the image and upload another 1.
In this screenshot I am displaying both the thumbnail field and the image field itself. You can see they don't match. I uploaded the drop image first.
Comment #27
tedbowWhen installing the media module with this patch it creates the Image media type but the label of the source field is the same as the machine name "field_media_image". The File media type on other hand has label "File" and machine name "field_media_file". I am not sure why.
Comment #28
tedbowThis was the problem with the field label mentioned in #27. I was only looking under core/modules/media not the profile.
Comment #29
seanBI think #26 is an issue in the main media patch. I will add a solution there and provide an updated patch for this issue when it's approved.
Changing the field label to be in line with the File type sounds logical. I will fix that as well.
Comment #30
slashrsm CreditAttribution: slashrsm at MD Systems GmbH commentedComment #31
Wim Leers@mtodor: first of all, AWESOME AVATAR! Totoro FTW!
Overall, all remarks in #2831936-54: Add "File" MediaSource plugin should also be cross-checked against this patch. I see a lot of the same problems.
Image needs to be optimized.
Same remark as in #2831936-54: Add "File" MediaSource plugin.
Huh?
Same remark as in #2831936-54: Add "File" MediaSource plugin.
s/Iso/ISO/
Same remark as in #2831936-54: Add "File" MediaSource plugin.
Needs rewording.
s/Get/Gets/
s/Read/Reads/
s/uri/URI/
s/Exif/EXIF/
Also, broken English.
Hah, so this is what EXIF data looks like. The return of RDF! :)
Same remark as in #2831936-54: Add "File" MediaSource plugin.
Same remark as in #2831936-54: Add "File" MediaSource plugin.
Same remark as in #2831936-54: Add "File" MediaSource plugin.
Comment #32
naveenvalechaThank you everyone.The patch in this issue is not in sync with the latest patch in #2831274: Bring Media entity module to core as Media module Postponing this on #2831274: Bring Media entity module to core as Media module so that there would not be back-forth b/w issues.
// Naveen
Comment #33
Wim LeersAlso, the IS doesn't state what this enables that #2831936: Add "File" MediaSource plugin doesn't already bring.
Comment #34
Wim LeersKeeping up with API changes at #2831274-246: Bring Media entity module to core as Media module.
Comment #35
Wim LeersKeeping up with API changes at #2831274-248: Bring Media entity module to core as Media module.
Comment #36
mtodor CreditAttribution: mtodor at Thunder commentedI forgot to un-assign long time ago. :/
Comment #38
mondrake#31.11
Not really. This is probably a dump in almost human-readable format added by an image editor to some data segment within the image file.
EXIF data is stored in a different format, as 'tags' into 'ifds' segments of the JPEG file format.
Esoteric read :) in https://www.media.mit.edu/pia/Research/deepview/exif.html
Comment #39
webflo CreditAttribution: webflo at UEBERBIT GmbH commentedRerolled
Comment #40
seanB\source
It should say 'source' in stead of 'handler'.
We should probably optimize the image to remove this Adobe stuff.
I'm not 100% sure if the source field could be empty? But maybe we should check just in case.
Use
$uri
since we got it anyway.This is now a annotation
default_thumbnail_filename
.Use
{$type_name}
This should be true.
We need to change 'handler' to 'source.'
Comment #41
webflo CreditAttribution: webflo at UEBERBIT GmbH commentedFixed everything from #40
Comment #42
seanBSo I just addressed some of the comments from #31 that were not done yet. Also kept up with some of the changes in #69 of #2831936: Add "File" MediaSource plugin. Tests are still broken but we can fix it later. Uploading for now.
Still todo:
#31.1
#31.14
Done:
#31.1 TODO. The image got messed up somewhere. Maybe we have a good one in a older patch.
#31.2 Done.
#31.3 Done
#31.4 Done
#31.5 Done
#31.6 Done
#31.7 Done
#31.8 Done
#31.9 Done
#31.10 Done
#31.11 LOL
#31.12 Done
#31.13 Done
#31.14 TODO
Comment #43
mtodor CreditAttribution: mtodor at Thunder commentedVery nice! I did also quick check here as for file source plugin #2831936: Add "File" MediaSource plugin.
Here are few things I have noticed:
If I'm not wrong, this will pick-up things that we don't want (fe. 'thumbnail_uri'). I think custom data fetching from child should be executed first, before fallback onto parent. So this should be moved to end, instead of
return NULL;
, justreturn parent::getMetadata($media, $name);
. I guess.This should be
?: NULL;
sinceNULL
is now "no value". I think same changes should be done for #2831936: Add "File" MediaSource plugin.This should also be
?: NULL;
sinceNULL
is now "no value". And comment should be adjusted accordingly.Comment #44
seanB#31.1 Done
#31.14 We discussed this today. Since we don't want to always install the module config we decided the standard profile was the best location.
#43.1 Done
#43.2 Done
#43.3 Done
Comment #45
Wim LeersVerifying that my #31 review is addressed. All points are addressed, except:
The URI for the file that we are getting the EXIF for.
#38: hah! Thanks for that :)
And finally, a complete review:
For consistency with #2831936: Add "File" MediaSource plugin:
Same remark as at #2831936-74: Add "File" MediaSource plugin.2. I suggest
So… is this a static cache? This is confusing.
EDIT: looking at
getExifField()
, it indeed is a static cache, for the file being currently read.We need test coverage to prove that when multiple files are read in succession, that it doesn't reuse the statically cached EXIF data for the current file.
When can this happen? (Also asked at #2831936-74: Add "File" MediaSource plugin.5.)
This comment is useless, and wrong! Let's delete it.
Pointless comment. Let's delete it.
s/Image/images/
s/of [function]/of the [function]/
s/uri/URI/
s/the EXIF/the EXIF field value/
s/the EXIF field/the requested EXIF field/
s/if is/if it is/
s/indexes/keys/
Same remark as #2831936-74: Add "File" MediaSource plugin.7.
This matches what
\Drupal\image\Plugin\Field\FieldType\ImageItem::defaultFieldSettings()
has, great!Just like #2831936-74: Add "File" MediaSource plugin.19: "uploading local images" sounds fairly strange.
What about:
Comment #46
l0ke#45 Done.
#45.3 Added another image with different value of EXIF Model, and extended
MediaSourceImageTest
with corresponding asserts to ensure each file has a correct EXIF data.Also
$type_id
changed to$media_type_id
to be consistent with #2831936-74: Add "File" MediaSource plugin.11Comment #48
l0ke#2831936-74: Add "File" MediaSource plugin.15 Function
createMediaTypeTest()
have been renamed todoTestCreateMediaTypeiaType()
.Comment #49
phenaproximaAs per the roadmap (#2825215: Media initiative: Roadmap), this is postponed on #2831936: Add "File" MediaSource plugin since the Image source directly extends File.
Comment #50
seanBReroll based on #2831936-96: Add "File" MediaSource plugin. Let's just keep up with the changes as much as we can to minimize efforts.
Comment #51
naveenvalechaQuick look at the plugin-only patch file which could be taken care at next reroll.
describe the argument name to what it is. Change the argument name $name to $attribute_name
Need small adjustment /** @var \Drupal\Core\Datetime\DrupalDateTime $date */
//Naveen
Comment #52
Wim LeersI think #50 was meant to be ?
Comment #56
seanBYeah, sorry about that!
Comment #57
Wim LeersI think this is ready — this is simply blocked on #2831936: Add "File" MediaSource plugin going in. What could help in the mean time, is for the IS to be updated already.
Comment #58
phenaproxima@seanB has opened an issue in Media Entity Image to track and detail the upgrade path from that module to this source plugin: #2883452: Provide upgrade path for media_entity_image config changes to Drupal core. Adding it as a related issue.
Comment #59
Wim Leers#2831936: Add "File" MediaSource plugin landed!
Comment #60
phenaproximaIn addition to an IS update (and possibly a change record), this will need a reroll on top of the committed File plugin, which saw some changes since #50.
Comment #61
Wim LeersReroll (straight rebase) provided by git:
Comment #62
vijaycs85I did a reroll(at #1970534-143: Patch testing issue ) with some of the changes from #2831936: Add "File" MediaSource plugin and working on fixing fails now.
Comment #63
Wim LeersThis reviews all code except for the test coverage. Still to review: test coverage and UI.
Addressed all my remarks except points 4, 5, 10, 11 and 12.
Consistent with the File plugin. Great.
string
Why do we only have class constants for the first two?
This calls the
DrupalDateTime
constructor without a$timezone
parameter. Which means it uses the system timezone. Is this correct?(I can imagine it would need to be UTC always. I could also imagine it needs to be converted to the current user's timezone.)
I think we want test coverage to prove that when we expose this metadata of a
source=Image
Media
entity by mapping it to a field, then that field needs to show it in the current user's timezone.What are the consequences when I:
I think we want test coverage for this edge case.
(Sadly config cannot express dependencies on certain environment capabilities.)
$exif_field
, to make it super explicit that this is NOT a Drupal field.s/value/values/, because we're getting all values.
Does not correspond to the docblock.
rm.
Must be moved to
media
module, for same reasons as we did that forfile
.However, manually differed this with the
file
config, and confirming it's consistent.This is inconsistent with
file
, which was required, not optional.media.type.file
doesn't list any dependencies. Not sure what's correct here.And why doesn't this also list
image
explicitly?Let's use the simpler description, like we did for
file
.true
, likefile
.Comment #64
Wim LeersThe UI works consistently with how files work. Everything is set up automatically by installing the Media module. Except that the default "full" view display of an image media entity doesn't make a whole lot of sense:
Comment #66
Wim Leers\Drupal\Tests\media\FunctionalJavascript\MediaSourceImageTest
is failing because it's still expecting that themime
andsize
attributes exist. They used to be inherited from theFile
Media Source plugin, but that was removed in #2831936-141: Add "File" MediaSource plugin.Even if I comment those, the test is failing. It sounds like @vijaycs85 is working on fixes, which is wonderful :) It means I can focus on actually reviewing the test coverage.
The test coverage looks fine to me. But I'd like to see it expanded to cover what I pointed out in #63.5.
Comment #67
Wim LeersSo, NW for:
All in all, this is already very close :)
Comment #68
phenaproximaThis should fix the broken tests. The problem was that Image was inheriting createSourceField() from its parent class, which was setting a bunch of non-image extensions as acceptable.
Comment #69
Wim Leers#68 solved #67.1.
That still leaves points 2, 3 and 4 in #67.
Updated IS to make its "remaining tasks" section reflect those in #67.
Comment #70
seanBFor #67.2 and #67.3:
drupal_get_user_timezone()
. I tried to fix this, but there is a problem. Users don't need to define a date field to store the value. They can store it as a string or integer field as well. Since the storage timezone for datetime is UTC, this means you want to return aDATETIME_DATETIME_STORAGE_FORMAT
formatted string converted from the user timezone toDATETIME_STORAGE_TIMEZONE
for datetime fields, but you want to return something else for other field types (maybe a timestamp for integer fields and a custom format for string fields). I guess this is what #2862467: Add complex field mapping to media module is for. Since we currently only support simple mappings, I would suggest fixing date field handling in #2862467: Add complex field mapping to media module, and for now just support storing the date as a string in the default 'medium' format.getMetadata
also has a check forcanReadExifData()
. This means the metadata is not fetched when the server can't read exif data. I added a test image source that returnsFALSE
forcanReadExifData()
to test this.Also expanded the CR for #67.4.
Comment #71
seanBAdded #2862467-5: Add complex field mapping to media module to make sure we discuss/fix date field handling for metadata.
Comment #73
Wim Leers#63.4: Hm… I think it's okay to defer this to a follow-up, but I'm not sure the change you made related to this makes sense. See code review below.
#63.5: the concern is not what metadata attribute value is returned (I agree that'd simply fall back to
FALSE
), but how this would work for the field that this is mapped to. EDIT: this is addressed, see below.I think this change is actually wrong. Because the value returned by
getMetadata()
is what will get stored in the field that this is mapped to (if there's any).Consequently, that means we're storing a user-timezone-adjusted timestamp and using it as the canonical timestamp. That seems wrong.
Good call to add this!
This is the key thing that we're testing. That addresses my concern in #63.5, thanks!
P.S.: I think the revision test that you added failed because you're only uploading a file, you're not filling out the
input :)Comment #74
phenaproximaThis should fix the tests.
Comment #75
seanBThanks @phenaproxima. So that takes care of the tests. The attached patch fixes #73.1. Discussed this with WimLeers on IRC. Date handling is going to be fixed in #2862467: Add complex field mapping to media module. Changed the date display from the
medium
date format to RFC3339, since that format is OK to read, contains timezone information and is easier to handle for machines. Also added a @todo and some documentation in the image source.This means everything in #63, #67 and #73 should now be addressed. If WimLeers could confirm this then we could update the IS and hopefully RTBC.
Comment #76
seanBNot sure why it bothered me so much, but I felt the need to fix the single spaces between braces in our config. That seems to be the standard (did not know that). I will fight the urge to create another issue for the other 24 occurrences in core.
Comment #77
Wim Leers#74:
Are you sure these changes are correct?
#76: HAHAHAH :D I noticed that too, but I explicitly didn't change that :P
Tests were added. CR was updated.
Re-reviewing the code, this is the only thing that comes up:
I'm still concerned how the
DateTimeOriginal
data in EXIF is interpreted. I did some more research. It seems that there is also an optionalTimezone
EXIF field that specifies the timezone explicitly. See http://www.exiv2.org/tags.html. Its docs say:I'm fine with deferring this to a follow-up. But I think it does need a follow-up.
Note that no perfect solution is possible: https://discussions.apple.com/message/18913151#18913151 + https://forums.adobe.com/thread/1562041. But at least we can do better for those cases where we do have timezone information.
Comment #78
Wim LeersIOW: this is very close :)
Comment #79
phenaproximaDefaultConfigTest fails without them.
Comment #80
phenaproximaOpened a follow-up for the EXIF timezone stuff: #2885729: Smooth out timezone handling when retrieving date/time info from EXIF
Comment #81
phenaproximaComment #82
Wim Leers#79: hm, maybe, but that doesn't mean this is correct. However, this patch is then just consistent with #2831936: Add "File" MediaSource plugin. I think ideally we'd have a follow-up to investigate those config dependencies though, because ideally those
MediaType
config entities would depend on those modules.But again: that should not hold up this issue. So, given that all my feedback has been addressed: back to RTBC! Great job :)
Comment #83
Wim LeersUpdated IS to list the follow-ups.
Comment #84
seanBNew separated the CR as discussed with GaborHojtsy on IRC.
Comment #85
Gábor HojtsyReviewing this for a potential commit. Noted the following:
media_bulk_form
plugin but no implementation exists. Opened #2886178: Media view includes media_bulk_form but no implementation and marked as related to #2877383: Add action support to Media module.Otherwise looks good to me :)
Comment #86
Wim Leers#85: RE: EXIF: note that I already pointed this out in #63.5. Explicit test coverage for this was added. I think the concern isn't as broad, because AFAIK the vast majority of PHP installations have it compiled.
Comment #87
phenaproxima@seanB and I discussed on IRC and I think we've reached agreement that, right now, EXIF is more trouble than it's worth. We've decided to pull that out of core, at least for the time being, and put it into Media Entity Image's 8.x-2.x branch in contrib, which will be built on top of core Media. So EXIF will still be supported, backwards compatibility will be maintained, and core can stay simple and not deal with the jankiness. Everybody wins.
So we'll need to update our new change record for that. I will post a patch soon with all the EXIF stuff gone.
Comment #88
Wim Leers:O I don't get this though. I was fine with the EXIF state in the current patch. We even have test coverage for the case where EXIF support disappears from under you.
Comment #89
Gábor HojtsyFor the record I did not advocate for removal of EXIF support, but I can see *if* the effort is too much to make it a service then this may be the easier path for now.
Comment #90
mondrakeFor the record, the PHP Exif Library provides a full PHP based solution to read/write EXIF data from/to files (i.e. it does not require PHP EXIF extension). In the contrib space, the File metadata manager module integrates that library as a plugin into a service.
(But, TBH, PEL is not currently implementing EXIF/TimeZoneOffset tag).
Comment #91
oriol_e9gExtra:
Are we managing the image files like PNG that doesn't have EXIF correctly? Apparently we are always trying to read exif data and attaching empty EXIF properties.
The EXIF read/write/support should not be restricted to supported formats? JPG and TIFF
http://php.net/manual/en/function.exif-read-data.php
Comment #92
phenaproximaSee, stuff like this is why EXIF is confusing and contentious, and better off not being in core for the time being.
Here is the patch without any EXIF stuff at all. I'll update the CR and open a follow-up in Media Entity Image for re-adding EXIF support.
Comment #93
phenaproximaFollow-up filed against Media Entity Image: #2886552: Add EXIF support on top of core Image plugin. Also updated the change record to reflect that.
Comment #94
Wim LeersI can't re-RTBC without that follow-up.
Plus, there's still many mentions of "EXIF" left in this patch.
Comment #95
phenaproximaFollow-up added in #93, although it is against Media Entity Image. I'm not sure what updates are needed to the change record, though; I already referenced that issue there.
Comment #96
phenaproximaHere is the patch, re-rolled without any mention of EXIF...except in the example images, which still contain EXIF tags. I figure that's pretty harmless, and it'll give Media Entity Image some useful files to test with.
For some reason, the interdiff I got was insanely wonky -- all kinds of weird stuff that did not, in fact, change between patches. So I'm punting on the interdiff.
Comment #97
naveenvalechaPatch looks good. Reviewed the svgs in the patch which needs removal of spaces and EOL which does not look blocker to me.
//Naveen
Comment #98
Gábor HojtsyComment #99
Gábor Hojtsy@naveenvalecha: while it can apply, it is not a good idea to commit this with the whitespace problem unfortunately:
Comment #101
naveenvalechaHere's the patch which fixed the whitespace. didn't get the interdiff for it.
//Naveen
Comment #102
Gábor HojtsyAll right, we discussed with @phenaproxima that git believing that there is a newline that should not be in a patch does not mean the PNG is wrong. Manually checking the PNG (and other images) they look good.
Since all the concerns I raised and others raised were resolved and followups were opened, it was time to get this in :) Thanks all for your tireless efforts and congrats on another milestone reached. Let's meet in the widgets and formatters issues.
(Edit: committed #96).
Comment #103
Gábor Hojtsy@naveenvalecha: as per IRC discussion, you did not roll the patch with --binary which is why you did not get the warning. On the other hand the PNG would still be broken in that case as it was before as per above testing. So let's leave it as-is for now and resolve in a followup issue if it becomes a problem.
Comment #104
naveenvalecha#103
Sure, Added a follow-up #2886856: Fix the whitepsace in png introduced by #2831937 to validate if it's not a problem.
//Naveen
Comment #105
Wim LeersWOOT! This means #2831943: Use "rendered media" (not links) as default media field formatter; add modal to configure the used media view mode and #2831941: [PP-1] Re-create Image field widget on top of media entity are unblocked!
And of course #2886552: Add EXIF support on top of core Image plugin.
Comment #106
phenaproximaRe-tagging.