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

Integration with new InFileMetadata #534

Open
jc508 opened this issue Aug 22, 2024 · 17 comments
Open

Integration with new InFileMetadata #534

jc508 opened this issue Aug 22, 2024 · 17 comments

Comments

@jc508
Copy link

jc508 commented Aug 22, 2024

Hi Frank, I am working on an 'InFileMetadata' solution to manage User Specified Metadata items.
This has been working with NTFS extended attributes as per the sample.

Sample1_Win

With Microsoft/Windows recently removing the ability to easily define and edit this metadata we had to find another solution.
The client here is our local Museum who are 'tagging' their digital collection, currently around 50,000 files.

Cuting the story short the design selected is to use Brandt Redd's "Metatags" (https://www.filemeta.org/MetaTag)
ie to actually build something that gives life to this design.
Once the metadata is encapsulated it is stored inside a single 'field'/'attribute' of the file.
For image files this is using exiftool and for Office type files it is using OpenXML. (With hooks left for anybody else to write a module to deal with other file types)

Anyway this bottom layer has been written and I am now looking for a GUI to plug it into.
Hey presto - ExifToolGui LOOKS perfect!
I can just see my user-defined metadata items appearing on the righthand 'Metadata' / Custom Tab
ExifToolGui_MetadataTag

I am sure you are very busy but could you please spare some time to discuss how this might be achieved?
Some might be easy - like point me to the doco that says what 'Custom' metadata is and whether it can be configured.
Other bits are probably hard - i.e. it doesn't look like ExifToolGui has provision for 'Plugins'

I am available to assist if you like but I don't speak pascal (yet).
The new modules have been written in .Net 8.0 C# are are happy under Windows or Linux

I look forward to your feedback
Thanks
JC

@FrankBijnen
Copy link
Owner

Hi JC,

I'll get back to you after the weekend.

Meanwhile have a look at the docs.
https://github.com/FrankBijnen/ExifToolGui/blob/main/Docs/ExifToolGUI_V6.md

Frank

@FrankBijnen
Copy link
Owner

Hi JC,

Had some time to spare, and the subject has my interest, so I'm replying sooner. Here are some thoughts:

  • I like the idea and I would like to help making this work.
  • Still not clear to me what you're expectations are, and how ExifToolGUI fits in.

Some assumptions. (please correct me if I'm wrong)

  • Your metadata was/still is stored in NTFS extended attributes.
  • You have to convert them to something else
  • You chose to combine/pack them into 1 single field that you read/write with ExifTool.
  • For Displaying/Modifying you had a look at ExifToolGui. But that will display, at best, the combined field, as 1 item.
  • So you were thinking of a plugin that would 'automagically' pack/unpack the combined field.
  • Can you give me an example what ExifTool returns. E.G. ExifTool -G -s <filename>
    So I have a better understanding.

Customizing GUI

Planning

  • I'm working on V635, and would like to finish that first.

Challenges

  • You are mentioning C# to write a plugin. Problem is that it's not easy to call Managed code from Unmanaged code.
    I once used Unmanaged exports. https://www.nuget.org/packages/UnmanagedExports

  • Calling a DLL is one thing, but the datatypes to use in communicating is another. I can see Access Violations happening if this is not carefully designed.

  • But even if that would work, the result would not be very 'performing'. Imagine what would be needed if you want to filter/sort?

Alternatives

  • You could ask Phil Harvey if he could add this to ExifTool. If ExifTool could do this natively?

  • I could probably add the code for this in ExifToolGui. But this would be monolithic. Not flexible.

Back to the drawing board.

  • As you may have noticed, I'm not very fond of the solution to pack everything in 1 field.
    I can understand that once you have made a decision you stick to that, but...

    If Exiftool would be able to work on the Tags, as the user sees them, it would be an advantage.
    If I look at the sample you sent, a lot of the tags already exist in ExifTool.
    For the tags that can not be mapped you can define your own in a ExifTool cfg file: https://exiftool.org/config.html
    (And these custom fields can be used in ExifToolGui like any other)
    You could even opt for a dual solution. Add everything in 1 field, and in separate fields. Data duplication is not best practice but hey....

    If you're willing to give that a second thought, I can offer you help in the data-conversion

Frank

@Kvcd12
Copy link

Kvcd12 commented Aug 26, 2024

jc508 - An example of custom fields displayed in ExifToolGui under the Custom tab. I have several of these. They are used along with the fields (tags) that already exist in ExifTool.

customxmp

@FrankBijnen
Copy link
Owner

Hi JC,

I'm afraid that info doesn't help me a lot.
Can you please respond to my earlier queries? Or a least explain me what you expect from me?

Frank

@Kvcd12
Copy link

Kvcd12 commented Aug 27, 2024

FrankBijnen, not sure if you are responding to my post or a separate conversation with jc508. I posted to show jc508 a real world example of custom fields within ExifToolGui.

@jc508
Copy link
Author

jc508 commented Aug 27, 2024

Hi Frank,
I thought I would leave you alone for the weekend - I hope I didn't make the brain cogs keep spinning.
But seeing I have interrupted your work now I will fill in some of the background that led me here.
Firstly everything you have listed as 'Assumptions' is correct.

The impetus for this is, as I said, Windows removing the ability to directly edit the metadata and the eternal push to get things in the cloud
(All the metadata is lost everytime one of these files is emailed, copied to one-drive, copied onto most USB sticks etc.)
Looking at the picture of the Well in the OP each of those tags can be altered just by overtyping them. eg the 'Categories' could be changed from 'Park' to 'Forest'.
For the Museum, the Metadata strategy identifies 'Who', 'What', 'Where', 'When' and 'Contributors' as being the items we want to capture.
Then I just picked attributes from the windows set to map these to.
AND, for user convenience I want them to always appear in a set order regardless of the file type.
Again windows messes with this, it does not honour its own property handlers. For example 'Rating', 'Dimension', 'Size', 'Date Taken' are not in my set but it will display them anyway.
Dont get me started on ways Windows can confuse users - eg for a bit there 'Period' was labled 'Music Eon' or something. Of course the users contact me asking what has changed.

So I have been communicating with Brandt Redd (https://www.filemeta.org) who is very helpful offering advice from an Academic perpective.
He also has several 'codebits' that I have employed including 'MetaTags' and an 'exifToolWrapper'
We agreed early on that the most likely way to protect the metadata was to hide it somehow INSIDE the file itself.
I started with the following spread of file types.

-- graphics           exiftool  interface   target Attribute
    JPG   43044      JPEG  r/w  exiftool => Description
    jpeg  252        JPEG  r/w  exiftool => Description 
    tif   5045       TIFF  r/w  exiftool => Description 
    tiff  9          TIFF  r/w  exiftool => Description 
    bmp   307        BMP   r    
    gif   299        GIF   r/w  exiftool => Description 
    PNG   123        PNG   r/w  exiftool => Description 
-- office type files 
    pdf   1161       PDF   r/w  exiftool => Subject 
    doc   1362       DOC   r    
    docx  66         DOCX  r    new-code => custom / Metatag
    rtf   112        RTF   r
    xls   275        XLS   r
    xlsx  4          XLSX  r    new-code => custom / Metatag
    pub   7          
-- other             
    htm   328        HTML  r
    html  24         HTML  r
    p65   66                        "A .P65 file is an Adobe PageMaker document file."
    txt   4          TXT   r

To clean this up I converted all the BMP to JPG, DOC to DOCX, XLS to XLXS - cant remember about the RTF though.
After that using only 2 interfaces I have covered off 99.18% of my files - I am happy with that result. Worry about the shrapnel another day.
I have to say Phil Harvey's exiftool is one of the most excellent, stable, products I have ever come across.
Once I discovered people have written wrappers and interfaces to this you would have to be out of your mind to try and do it again.

I should say there is potentially another Organisation who might be interested - they have mega genomic files. I haven't looked at the file types yet but, architecturally, they could be catered for by addition of one or more 'wrapper' modules.
(See attached Block Diagram)

So

  • a) I dont only have graphics files in the mix
  • b) the actual attributes the user sees would need to be dynamic. Dynamic in that I would expect different classes of user to see, or edit, slightly different things

just for simplicity imagine an 'Admin' user also gets to edit the DocumentID in the following list

This is where the definition for the current Museum client is upto...

    tagName:              tagLabel:      tagRepetative:  tagDel itemSeq:  itemScope:   TagValue:               
 0. FamilyName            Family Name             true    ;       10                   Euroa,Secondary,School 
 1. BusinessName          Business Name           true    ;       20
 2. What                  What (Categories)       true    ;       30                   Event                  
 3. Where                 Where                   true    ;       40                   Euroa                  
 4. When                  When                    true    ;       50                   2000                   
 5. Comments              Comments                false   ;       60                   2000 Euroa Unfolding History. Euroa Secondary College Celebrating 40 years. <<SNIP>>
 6. Title                 Title                   true    ;       70
 7. Contributor           Contributor             true    ;       80
 8. Copyright             Copyright               true    ;       90
 9. Subject               Subject                 true    ;       100
10. Authors               Authors                 true    ;       110
11. DocumentID            Document ID             false   ;       120       ReadOnly   949f3ba2-fde4-11ed-907a-00d861bde17f

(ps All these are currently defined in XML configuration documents so they could be edited and a simple restart would enable the changes)

I have looked at the doco for exifToolGui, especially, around the 'custom' values.
Great that you can declare your own names but it looks like its a 1:1 mapping to a target attribute.
The best I can see there are not a dozen 'safe' attributes that could be used to stuff in arbitrary data.
As requested, I have attached a couple of sample files containing the squashed up value that the current design puts into a single Attribute.
The codebit MetaTag has done the assembly especially the messy bits of when to quote or double quote.
Each of these samples has been 'inserted' into one or more files by exifTool and the file appears fine after such surgery.

Now on to your 'challenges'. Reading over the weekend I have also discovered that Pascal and C# do not play well together - if at all.
On the plus side my code is still in development - I kind of like my design and the code so far is happy in both Windows and Linux.
BUT the time constraints - to have some solution for the 1st client before Microsoft forces things, means I can entertain other or additional solutions.

I was pleasently supprised to find that the ancestor of Pascal is Algol - my first much loved programming language. I often wondered where it went.
Anyway I test converted one to module from C# to Pascal (you only get a few hundred lines for free) and the results were positive.
This application is not the type of thing that has multiple instances of a class flying around and there is no web bits.
That and my natural coding style says its more likely my code could be ported to Pascal than the other way round.
I would have to check especially the openXml bits used to interface with 'office' type files.

Finally - my thoughts on exifToolGui being good for me was not its ability to interface with exiftool but its framework.
A list of files, navigation through those - ability to show the file in one corner and edit things about it in another.

And as for timing - back in February I told the users this was probably a 3 year task (ie it was huge).
Since then I have made tremendous progress but there is still at least a year to go - assuming Microsoft does not pull the new code from Windows 11 back to win 10.

Thanks for the interest and for listening

JC

File Metadata Building Blocks V2

Sample 2 Domain Metadata.txt
Sample Metadata 1983.jpg_out.txt

@FrankBijnen
Copy link
Owner

@Kvcd12

FrankBijnen, not sure if you are responding to my post or a separate conversation with jc508. I posted to show jc508 a real world example of custom fields within ExifToolGui.

Yes, you're right. I mixed things up. Sorry for that.

Frank

@jc508
Copy link
Author

jc508 commented Aug 27, 2024

Frank,
Just another bit of evidence.
This version of the test file has the MetaTag entry in the 'Description' field.
On my windows machine this shows up in File explorer under the attribute 'Title' but who knows where windows goes to get its properties.
If you open this in ExifToolGui its hidden away down in the bottom corner of All or in XMP-dc.

What is needed is an edit grid - as per any of the sub tabs under 'Metadata'

<----- tag name ------->  <------ value ------------->>
Family Name             > Euroa,Highscholl,back to
Business Name           > 
What (Categories)       > Gigantic Event
Where                   > Euroa
When                    > 2000
Comments                > 
Title                   > 
Contributor             > Melbourne Symphony Orchestra
Copyright               > 
Subject                 > 
Authors                 > 
Document ID             > 94848e17-fde4-11ed-907a-00d861bde17f

So its just like (what I imagine happens for) 'Custom' entries.
Except, instead of a single direct target it would go through a function to compress these into a string and that result gets stored in a field which is not arbitrary for the user to decide but is set as some configuration parameter.
Hope this help the understanding.

P.S. I think we are many time zones apart so I apologise if things appear out of order. I am in UTC+10 South Eastern Australia

JC
A_metadata_test_2_domains_JPG_file.zip

@FrankBijnen
Copy link
Owner

@jc508

Hi John,

Thanks for the info. Makes it a lot clearer to me.

First some quotes.

Great that you can declare your own names but it looks like its a 1:1 mapping to a target attribute.

True

The best I can see there are not a dozen 'safe' attributes that could be used to stuff in arbitrary data.

This is where we disagree. You can define your own XMP tags, adding a virtually unlimited nbr of tags.
I have added an INI file and a sample ExifTool config that I would like you to try. See 'Using the Demo XMP custom fields'
See also: https://exiftool.org/TagNames/XMP.html for more info. (XMP tags are supported for many file types)

Reading over the weekend I have also discovered that Pascal and C# do not play well together - if at all.

If we were to agree on the 'plugin model' I could make a framework that you can 'extend'.

Finally - my thoughts on exifToolGui being good for me was not its ability to interface with exiftool but its framework.
A list of files, navigation through those - ability to show the file in one corner and edit things about it in another.

Thanks for your opinion. Credits go to Bogdan Hrastnik the original developer.

Using the Demo XMP custom fields:

  • Save the INI file and the CFG file in your %APPDATA%\ExifToolGui. (rename the existing INI file first if you care about your settings)
  • Start ExifToolGui, and on the 'Other' tab select the CFG to point to the path where you saved the CFG file.

The UserDefined FileList, the Custom view and the Workspace should be more or less what you want, or at least give you an idea what XMP custom tags can do.
The Tags What, Where and When I have defined as lists. Allowing multiple values. Adapt this to your needs.

Functional requirements Plugins:

I can see 2 plugins: (Just thinking out loud, not sure if this works)

  1. Pre Exiftool call. The plugin receives the complete command. It returns a possibly modified command.
    When the plugin discovers an item that should be packed (Familyname) it must form the 'packed item'. To do that the plugin should have access to the current value of the 'packed item', or all other items.

E.G. -Familyname="Family 1' =>
-PackedItem="&SchemaUUID=018f804e-1916-7ebf-9717-50f9886667a4 &Comments="Cnr Tarcombe & Hunter St. Business was ran by Elston & Esson, son in law to Alan Windburn. In 2022 now owned by Cameron Saville as Sav's Hire." &DocumentID=94a504ef-fde4-11ed-907a-00d861bde17f &FamilyName=Family 1&What=Business &When=1983 &Where=Euroa"

  1. Post ExifTool call. The plugin receives the complete command, and the complete output. It should return the 'Unpacked tag names and values'.

Challenges:

  • Plugin 2 could work for the Workspace, but potentially not for other functions. (Geotagging, date time shift etc.) It should not disrupt these functions.
  • Not all Exiftool calls return the tag name. E.G. Just values. To know the values that correspond to the tag names, also the command must be known. The plugin should also receive the command.
    This is a sample command to get the data for the workspace.
    sample workspace

Frank
P.S. While typing I saw your new post. Will respond separately.

Demo XMP custom fields.zip

@FrankBijnen
Copy link
Owner

@jc508

Ah Thanks. Confirms my assumptions.

You're already writing to XMP. That's good.

On my windows machine this shows up in File explorer under the attribute 'Title' but who knows where windows goes to get its properties.

That is one reason more to define custom Tags.

What is needed is an edit grid - as per any of the sub tabs under 'Metadata'

See the demo. That does exactly that.

P.S. I think we are many time zones apart so I apologise if things appear out of order. I am in UTC+10 South Eastern Australia

Netherlands.

Frank

@FrankBijnen
Copy link
Owner

@jc508
Hi John,

Meanwhile I have changed the custom XMP fields. It now shows how to use multiple schema's. The Schema names I have used are IFM01 and IFM02, but you can think of better names. See the Zip file.

BTW: I dont understand why the DocumentID is duplicated.

Also I have had time to think about the plugin(s). Bottomline:

  • A lot more (error prone) work.
  • The plugin method I would propose, is to create one or more DLL's. Do you feel confident writing those? (Delphi or C, but at least unmanaged)
  • Not all ExifToolGui functions will be supported. E.G. ExifToolDirect will not be possible.
  • Saving data will be tricky. Suppose you only want to update 1 tag. (E.G. What) To recreate the 'packed' tag you will need:
  1. All items that make up the packed tag.
  2. Or the current value of the packed tag.
    Very likely you will end up reading the file again, to get that data. Not good for performance!

When you choose the Custom XMP fields solution, you only have to make sure the data is stored in that way. Everything else works out of the box. (with some setup)

  • As a bonus, you can use the item names with ExifTool commands.
    Examples:
    • exiftool -XMP-IFM01:All <File>
      Show all tags in XMP-IFM01 for File

    • exiftool -XMP-IFM01:All= -r -ext jpg <Dir>
      Clear all tags in all jpg files recursing Dir

    • exiftool -XMP-IFM01:What="something" <File>
      Set only the tag What (Without have to know all the other tags)

My advice is to go for the Custom XMP fields solution!

Frank

BTW: Out of curiousity I had a look at one of your repositories. ExifToolWrapper. What strikes me:

  • An old version of ExifTool
  • The StdErr, where the errors go, does not seem to be implemented. Any Warnings or Errors will not show I think.

Config for multiple Schema's

%Image::ExifTool::UserDefined = (                                                                
    'Image::ExifTool::XMP::Main' => {                                                            
        IFM01 => { # This is the namespace prefix                                                
        SubDirectory => {                                                                        
          TagTable => 'Image::ExifTool::UserDefined::IFM01'                                      
        },                                                                                       
        },                                                                                       
        IFM02 => { # This is the namespace prefix                                                
        SubDirectory => {                                                                        
          TagTable => 'Image::ExifTool::UserDefined::IFM02'                                      
        },                                                                                       
        },                                                                                       
    },                                                                                           
);                                                                                               
                                                                                                 
%Image::ExifTool::UserDefined::IFM01 = (                                                         
    GROUPS => { 0 => 'XMP', 1 => 'XMP-IFM01', 2 => 'Image' },                                    
    NAMESPACE => { IFM01 => 'http://ns.example.com/UUID-018f804e-1916-7ebf-9717-50f9886667a4/' },
    WRITABLE => 'string', # Making the tags writable as strings                                  
    Comments => { List => 'Bag' },                                                               
    FamilyName => { List => 'Bag' },                                                             
    What => { },                                                                                 
    When => { },                                                                                 
    Where => { },                                                                                
    DocumentID => { },                                                                           
);                                                                                               
                                                                                                 
%Image::ExifTool::UserDefined::IFM02 = (                                                         
    GROUPS => { 0 => 'XMP', 1 => 'XMP-IFM02', 2 => 'Image' },                                    
    NAMESPACE => { IFM02 => 'http://ns.example.com/UUID-0190ed8b-0001-7f32-9e63-29daeb56bbbc/' },
    WRITABLE => 'string', # Making the tags writable as strings                                  
    Creator => { },                                                                              
    Reader => { List => 'Bag' },                                                                 
    DocumentID => { },                                                                           
);                                                                                               
                                                                                                 
1; # Needed to ensure the config file is properly read                                           

How the data is written to the JPG file in the XMP block. Just plain XML. I think it is far more readable.

<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.93'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
  xmlns:IFM01='http://ns.example.com/UUID-018f804e-1916-7ebf-9717-50f9886667a4/'>
  <IFM01:Comments>
   <rdf:Bag>
    <rdf:li>2000 b &amp; w photos;Euroa Unfolding History. Top photoSurnames onlyHinss</rdf:li>
    <rdf:li>Morgan (Hewlett)</rdf:li>
    <rdf:li>Brodie</rdf:li>
    <rdf:li>Donlen</rdf:li>
    <rdf:li>Kubeil</rdf:li>
    <rdf:li>Sloan</rdf:li>
   </rdf:Bag>
  </IFM01:Comments>
  <IFM01:DocumentID>94848e17-fde4-11ed-907a-00d861bde17f</IFM01:DocumentID>
  <IFM01:FamilyName>
   <rdf:Bag>
    <rdf:li>Euroa</rdf:li>
    <rdf:li>Highscholl</rdf:li>
    <rdf:li>back to</rdf:li>
   </rdf:Bag>
  </IFM01:FamilyName>
  <IFM01:What>Event </IFM01:What>
  <IFM01:When>2000 </IFM01:When>
  <IFM01:Where>Euroa</IFM01:Where>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:IFM02='http://ns.example.com/UUID-0190ed8b-0001-7f32-9e63-29daeb56bbbc/'>
  <IFM02:Creator>Leonardo da Vinci</IFM02:Creator>
  <IFM02:DocumentID>947b41eb-fde4-11ed-907a-00d861bde17f</IFM02:DocumentID>
  <IFM02:Reader>
   <rdf:Bag>
    <rdf:li>Smith</rdf:li>
    <rdf:li>Jones</rdf:li>
    <rdf:li>Nerk</rdf:li>
   </rdf:Bag>
  </IFM02:Reader>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:dc='http://purl.org/dc/elements/1.1/'>
  <dc:description>
   <rdf:Alt>
    <rdf:li xml:lang='x-default'>&amp;SchemaUUID=018f804e-1916-7ebf-9717-50f9886667a4 &amp;DocumentID=94848e17-fde4-11ed-907a-00d861bde17f &amp;FamilyName=&quot;Euroa,Highscholl,back to&quot; &amp;What=&quot;Gigantic Event&quot; &amp;When=2000 &amp;Where=Euroa &amp;Contributor=&quot;Melbourne Symphony Orchestra&quot;&amp;/SchemaUUID &amp;SchemaUUID=0190ed8b-0001-7f32-9e63-29daeb56bbbc &amp;Creator=&quot;Leonardo da Vinci&quot; &amp;Reader=&quot;Smith, Jones, Nerk&quot; &amp;DocumentID=947b41eb-fde4-11ed-907a-00d861bde17f&amp;/SchemaUUID</rdf:li>
   </rdf:Alt>
  </dc:description>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>

<?xpacket end='w'?>


Demo XMP custom fields V2.zip

@jc508
Copy link
Author

jc508 commented Aug 29, 2024

@FrankBijnen
Frank, Thanks for all the effort - its going to take a few days to digest and experiment with this.
Especially the idea to just use XML instead of MetaTags.
The glaring issue remains what do I do with the 'office' type files?

I only selected MetaTags because it was an existing codeblock I could recycle which, by the way, also handled the 'only-one-item-has-changed' scenario.
But I had forgotten about allowing for the data to have been changed, presumably by somebody else, between the read and the update.
Brandt's repository for ExitToolWrapper hasn't been touched for a few years. As my first task with this I upgraded it to VS2022, .Net8 and refreshed the exiftool.exe but he has not checked these changes in.
As for why &DocumentID= appears twice..
A) Mistake? it is test data that I am manually constructing and using exiftool command line to 'install' into the test file(s).
B) If your observation was on file A_metadata_test_2_domains_JPG_file.jpg then that file is a use case with two different &SchemaUUID or DataDomains - representing 2 organisations or 2 different user groups with their own metadata requirements; all sharing the same physical field in the file.
(the second possible organisation I mentioned, dealing with genomic data would need this - they have a prepectives of 'scientific' and 'Compliance' metadata)

Stand By..

JC

@FrankBijnen
Copy link
Owner

@jc508

Hi John,

Thanks for being open-minded enough to consider my idea's.

ExifToolWrapper and DocumentId: Just mentioned it, sometimes it helps to ask questions as a means of checking. (My own thoughts mostly)

I only selected MetaTags because it was an existing codebloc

You may still need that for Filetypes that GUI does not handle.

When you have a look at GUI, dont miss out on these features:

  • The Log Window and ExifTool Direct.
    You can type in ExifTool commands and they will be executed on all selected files. In the Log Windows you can see the output, and hopefully no errors. (Hence my remark about ExifToolWrapper)

  • The user defined view of the filelist.
    It works kind of slow, because for every file it calls upon ExifTool to get the data, but your data is presented in grid. You can sort on columns. I may add filtering in a next release.
    overview

  • The Workspace
    For Items marked with a plus_minus sign you can edit the data by prefixing a +, or a -. After clicking save the input is added or deleted from the list.
    workspace

  • Configure the Workspace via Program/Workspace manager.
    This gives you an idea what you can configure. Should be in the docs also. All the settings are saved in the INI file.
    The Tag name to display can be anything you like.

workspace_mgr

I'll leave you alone for now. If you have any questions you know how to find me.

Frank

@jc508
Copy link
Author

jc508 commented Sep 6, 2024

Several other issues have arisen that have a higher priority- this project has had to go go to the back burner for a bit.
Dont write me off yet :)

@FrankBijnen
Copy link
Owner

No Problem.

In The Netherlands we have a saying: "goed werk heeft tijd nodig" (Use google translate it does a fair job)

Frank

@jc508
Copy link
Author

jc508 commented Oct 7, 2024

Frank,
I have had some time to get back to this and I have digested the Demo versions you supplied.
When it comes to viewing and editing the metadata for a single file the 'WorkSpace' is the preferred method.
I haven't got my head around 'searching' yet. It may be that using field in the Details -> 'User Defined' view would work.
Then again this is to replace Windows which defaults to searching across all metadata columns.

When it comes to editing in the 'Workspace' panel I am finding it very un-intuitive.
Personally I, and several of my users, are used to clicking in the 'Attribute value' column to open it for editing.
When this does not happen the natural instinct in to click some more - now I found double clicking deletes the attribute right down to the ini files!
I would go so far as to call this a bug - there is no 'are you sure' and no 'undo'. Many times I have had to close it down and re-install files to continue testing.
After that, having to select a field then move elsewhere to edit and save it is unintuitive (remember my main purpose is to add and correct this metadata so it is not an occasional thing like it might be for a real photo collection)

If we were to explore the idea of a Plugin some more then this panel would be where it came in.
As opening thoughts...

  • existing functionality loads an array (dictionary) of Tags and values and passes to the plugin
  • the plugin is responsable for data entry and validation. Eg in my case 'DocumentID' should be read only to normal users.
    • to stretch a bit more; the 'What' field should be a 'select-from-list' type field rather than free form.
    • and I am sure it wont be long before some client insists on cross-field validation as well.
      (try entering Australian towns into Ancestry for the 1800's - it always rejecting because it has to be called 'Australian Colonies' before 1901 when Australia exists as Country)
  • the plugin hands the list back and existing code does all the communication with exiftool.
    ?? I have no idea how it could interface with that part of the screen.

Finally I see your ideas for multiple Schema. In reality it is probably simpler than both of us have been thinking.
The second schema can just be treated as a second user/organisation. Pick a different set of custom attributes and the 2nd user will never get tangled with the first.
So any given installation only needs to handle one schema.

JC

@FrankBijnen
Copy link
Owner

Hi John,

Good to hear from you. I will reply in more detail this week, for now only some remarks about editing in the workspace.

I dont think it is as bad as you think, but I'm open to suggestions. First of all have a look at the preferences.
preferences

The default values are what you see in the screenshot. (when GUI has to create an INI file) I may have given you an INI file with my personal settings.
With these settings the editing in the Workspace works by Entering through all the fields. First value modified, in the bottom Edit box, enables the Save button. That will save all pending changes. CTRL/ S also works.
https://github.com/FrankBijnen/ExifToolGui/blob/main/Docs/ExifToolGUI_V6.md#p_metadata

Also with these settings, double clicking will not add/delete attributes from the list in the Workspace. It is a setting not meant for normal use, only to make adding and deleting attributes faster. The normal way to add/delete attributes would be in the Workspace manager
https://github.com/FrankBijnen/ExifToolGui/blob/main/Docs/ExifToolGUI_V6.md#preferences

Frank

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

3 participants