MetaData Definitions and Practices

I have been using digital capture devices since the crawled out of the R&D lab at Kodak in the mid 90’s, and watched the beginnings of MetaData evolve along with the transitions from simple capture files to the highly advanced raw files that we have today. That process included the capture device data, timing, geolocation, and environmentally attached information.

Question 1 is this, does PhotoStructure resolve primary capture data, and encapsulate that for reliable record keeping as well as managing a history of post production changes and the usage history of source imaging?

Question 2 is does it retain a history track on both raw source imagery and variants that are derived from the raw imagery ?

Question 3 is what raw source imagery types are fully supported and what raw processing procedures and plug ins are supported ?

Howdy @TimRyan , and welcome to PhotoStructure!

Apologies for the delay, I somehow missed your post.

Question 1 is this, does PhotoStructure resolve primary capture data, and encapsulate that for reliable record keeping as well as managing a history of post production changes and the usage history of source imaging?

It tries its best! Know that there really isn’t a good standard that is followed by camera manufacturers. It was frustrating to find that the EXIF specifications team basically gave up when they pointed to ExifTool for their specification – when ExifTool was written specifically due to how inconsistent and flawed most metadata payloads are.

That said, the heuristics that I’ve honed over almost a decade of examining files from more than a thousand makes and models of cameras resulted in this: PhotoStructure | How does PhotoStructure capture captured-at?

Question 2 is does it retain a history track on both raw source imagery and variants that are derived from the raw imagery ?

Yes, PhotoStructure uses the History tag when it writes any metadata modifications, and applies those in context of any available sidecar metadata, as well. You can adjust what tags (if any) get written to the original image versus a sidecar, as well, through advanced settings. Here are the current defaults – ask me if you have any questions.


  defaultSidecarType: new StringEnumSetting({
    category: SettingCategories.Sidecars,
    description: `What type of sidecar file do you want to generate for non-destructive edits?\n- "XMP" is a popular and well-adopted format.\n-"MIE" is defined at https://exiftool.org/TagNames/MIE.html .\n- "EXIF" and "EXV" should only be used if required, as they have substantial limitations.\nCase is preserved.`,
    strEnum: SidecarExts,
    defaultValue: SidecarExts.xmp
  }),

  writeMetadataToSidecarsIfImage: new BooleanSetting({
    category: SettingCategories.Sidecars,
    description: `If set to true, PhotoStructure will write metadata changes made to images into sidecars. If set to false, PhotoStructure will overwrite original images with metadata changes.`,
    defaultValue: true
  }),

  sidecarTagBlocklist: new StringArraySetting({
    category: SettingCategories.Sidecars,
    description: `Many applications don't read metadata from sidecars, which can make some tags, like Orientation, Rotation, or Rating, not seem to work properly in other applications. This setting is ignored if writeMetadataToSidecarsIfImage, writeMetadataToSidecarsIfVideo, and writeMetadataToSidecarsIfSidecarExists are all set to false.`,
    defaultValue: () => ["Orientation", "Rotation", "Rating"]
  }),

Question 3 is what raw source imagery types are fully supported and what raw processing procedures and plug ins are supported ?

When rendering a “raw” image type, I will try to use the embedded JPEG if the resolution is sufficient. If it isn’t, I try to use the RAW/JPG pair. As a last resort, I’ll use LibRaw to re-render the raw image, which supports these formats: LibRaw 0.21 supported cameras | LibRaw

Plug ins aren’t currently supported. What plug in were you hoping to use? The current image processing pipeline in PhotoStructure is modular, and adding another rendering engine dynamically wouldn’t be hard.