ExifTool Forum

ExifTool => Bug Reports / Feature Requests => Topic started by: blue-j on January 30, 2025, 03:09:40 PM

Title: [REQUEST] New Field(s) List?
Post by: blue-j on January 30, 2025, 03:09:40 PM
Hey Phil, i am wondering if it might be possible to automate including a list of new fields in each revision announcement?  for example:

"Added a new QuickTime tag"

could include the field name?

"Added a new QuickTime tag
QuickTime:Camm1:RollingShutterSkewTime"  (fake example for illustrative purposes)

or maybe it's just a list of new fields separate from your description, dunno.

otherwise every time you announce a new field, we have to try and figure out which one is new.

as usual, i demand nothing, am grateful for everything, and respect any decision you make on this.  - J
Title: Re: [REQUEST] New Field(s) List?
Post by: StarGeek on January 30, 2025, 06:20:37 PM
The quick and dirty way would be to diff the -list* option (https://exiftool.org/exiftool_pod.html#list--listw--listf--listr--listwf--listg-NUM--listd--listx) outputs.

For example, the difference of -listx between 13.13 and 13.16
2c2
< <!-- Generated by Image::ExifTool 13.13 -->
---
> <!-- Generated by Image::ExifTool 13.16 -->
17514a17515,17651
> <table name='Nikon::MenuSettingsZ9v5' g0='MakerNotes' g1='Nikon' g2='Camera'>
>  <tag id='72' name='HighFrameRate' type='int8u' writable='true'/>
>  <tag id='158' name='MultipleExposureMode' type='int8u' writable='true'/>
>  <tag id='160' name='MultiExposureShots' type='int8u' writable='true'/>
>  <tag id='208' name='Intervals' type='int32u' writable='true'/>
>  <tag id='212' name='ShotsPerInterval' type='int32u' writable='true'/>
>  <tag id='252' name='FocusShiftNumberShots' type='int8u' writable='true'/>
>  <tag id='256' name='FocusShiftStepWidth' type='int8u' writable='true'/>
>  <tag id='260' name='FocusShiftInterval' type='int8u' writable='false'/>
>  <tag id='264' name='FocusShiftExposureLock' type='int8u' writable='true'/>
>  <tag id='294' name='PhotoShootingMenuBank' type='int8u' writable='true'/>
>  <tag id='296' name='ExtendedMenuBanks' type='int8u' writable='true'/>
>  <tag id='332' name='PhotoShootingMenuBankImageArea' type='int8u' writable='true'/>
>  <tag id='346' name='AutoISO' type='int8u' writable='true'/>
>  <tag id='348' name='ISOAutoHiLimit' type='int16u' writable='true'/>
>  <tag id='350' name='ISOAutoFlashLimit' type='int16u' writable='true'/>
>  <tag id='358' name='ISOAutoShutterTime' type='int16s' writable='false'/>
>  <tag id='440' name='MovieVignetteControl' type='int8u' writable='true'/>
>  <tag id='442' name='DiffractionCompensation' type='int8u' writable='true'/>
>  <tag id='444' name='FlickerReductionShooting' type='int8u' writable='true'/>
>  <tag id='448' name='FlashControlMode' type='int8u' writable='true'/>
>  <tag id='450' name='FlashMasterCompensation' type='int8s' writable='true'/>
>  <tag id='454' name='FlashGNDistance' type='int8u' writable='false'/>
>  <tag id='458' name='FlashOutput' type='int8u' writable='true'/>
>  <tag id='552' name='AFAreaMode' type='int8u' writable='true'/>
>  <tag id='554' name='VRMode' type='int8u' writable='true'/>
>  <tag id='558' name='BracketSet' type='int8u' writable='true'/>
>  <tag id='560' name='BracketProgram' type='int8u' writable='true'/>
>  <tag id='562' name='BracketIncrement' type='int8u' writable='true'/>
>  <tag id='574' name='HDR' type='int8u' writable='true'/>
>  <tag id='580' name='SecondarySlotFunction' type='int8u' writable='true'/>
>  <tag id='586' name='HDRLevel' type='int8u' writable='true'/>
>  <tag id='590' name='Slot2JpgSize' type='int8u' writable='true'/>
>  <tag id='596' name='DXCropAlert' type='int8u' writable='true'/>
>  <tag id='598' name='SubjectDetection' type='int8u' writable='true'/>
>  <tag id='600' name='DynamicAFAreaSize' type='int8u' writable='true'/>
>  <tag id='640' name='HighFrequencyFlickerReduction' type='int8u' writable='true'/>
>  <tag id='650' name='MovieImageArea' type='int8u' writable='true'/>
>  <tag id='660' name='MovieType' type='int8u' writable='true'/>
>  <tag id='662' name='MovieISOAutoHiLimit' type='int16u' writable='true'/>
>  <tag id='664' name='MovieISOAutoControlManualMode' type='int8u' writable='true'/>
>  <tag id='666' name='MovieISOAutoManualMode' type='int16u' writable='true'/>
>  <tag id='740' name='MovieActiveD-Lighting' type='int8u' writable='true'/>
>  <tag id='742' name='MovieHighISONoiseReduction' type='int8u' writable='true'/>
>  <tag id='748' name='MovieFlickerReduction' type='int8u' writable='true'/>
>  <tag id='750' name='MovieMeteringMode' type='int8u' writable='true'/>
>  <tag id='752' name='MovieFocusMode' type='int8u' writable='true'/>
>  <tag id='754' name='MovieAFAreaMode' type='int8u' writable='true'/>
>  <tag id='756' name='MovieVRMode' type='int8u' writable='true'/>
>  <tag id='760' name='MovieElectronicVR' type='int8u' writable='true'/>
>  <tag id='762' name='MovieSoundRecording' type='int8u' writable='true'/>
>  <tag id='764' name='MicrophoneSensitivity' type='int8u' writable='true'/>
>  <tag id='766' name='MicrophoneAttenuator' type='int8u' writable='true'/>
>  <tag id='768' name='MicrophoneFrequencyResponse' type='int8u' writable='true'/>
>  <tag id='770' name='WindNoiseReduction' type='int8u' writable='true'/>
>  <tag id='792' name='MovieToneMap' type='int8u' writable='true'/>
>  <tag id='798' name='MovieFrameSize' type='int8u' writable='true'/>
>  <tag id='800' name='MovieFrameRate' type='int8u' writable='true'/>
>  <tag id='806' name='MicrophoneJackPower' type='int8u' writable='true'/>
>  <tag id='807' name='MovieDXCropAlert' type='int8u' writable='true'/>
>  <tag id='808' name='MovieSubjectDetection' type='int8u' writable='true'/>
>  <tag id='816' name='MovieHighResZoom' type='int8u' writable='true'/>
>  <tag id='1502' name='Language' type='int8u' writable='true'/>
>  <tag id='1504' name='TimeZone' type='int8u' writable='true'/>
>  <tag id='1510' name='MonitorBrightness' type='int8u' writable='true'/>
>  <tag id='1532' name='AFFineTune' type='int8u' writable='true'/>
>  <tag id='1536' name='NonCPULens1FocalLength' type='int16s' writable='false'/>
>  <tag id='1540' name='NonCPULens2FocalLength' type='int16s' writable='false'/>
>  <tag id='1542' name='NonCPULens3FocalLength' type='int16s' writable='false'/>
>  <tag id='1548' name='NonCPULens4FocalLength' type='int16s' writable='false'/>
>  <tag id='1552' name='NonCPULens5FocalLength' type='int16s' writable='false'/>
>  <tag id='1556' name='NonCPULens6FocalLength' type='int16s' writable='false'/>
>  <tag id='1560' name='NonCPULens7FocalLength' type='int16s' writable='false'/>
>  <tag id='1564' name='NonCPULens8FocalLength' type='int16s' writable='false'/>
>  <tag id='1568' name='NonCPULens9FocalLength' type='int16s' writable='false'/>
>  <tag id='1572' name='NonCPULens10FocalLength' type='int16s' writable='false'/>
>  <tag id='1576' name='NonCPULens11FocalLength' type='int16s' writable='false'/>
>  <tag id='1580' name='NonCPULens12FocalLength' type='int16s' writable='false'/>
>  <tag id='1584' name='NonCPULens13FocalLength' type='int16s' writable='false'/>
>  <tag id='1588' name='NonCPULens14FocalLength' type='int16s' writable='false'/>
>  <tag id='1592' name='NonCPULens15FocalLength' type='int16s' writable='false'/>
>  <tag id='1596' name='NonCPULens16FocalLength' type='int16s' writable='false'/>
>  <tag id='1600' name='NonCPULens17FocalLength' type='int16s' writable='false'/>
>  <tag id='1604' name='NonCPULens18FocalLength' type='int16s' writable='false'/>
>  <tag id='1608' name='NonCPULens19FocalLength' type='int16s' writable='false'/>
>  <tag id='1612' name='NonCPULens20FocalLength' type='int16s' writable='false'/>
>  <tag id='1616' name='NonCPULens1MaxAperture' type='int16s' writable='false'/>
>  <tag id='1620' name='NonCPULens2MaxAperture' type='int16s' writable='false'/>
>  <tag id='1624' name='NonCPULens3MaxAperture' type='int16s' writable='false'/>
>  <tag id='1628' name='NonCPULens4MaxAperture' type='int16s' writable='false'/>
>  <tag id='1632' name='NonCPULens5MaxAperture' type='int16s' writable='false'/>
>  <tag id='1636' name='NonCPULens6MaxAperture' type='int16s' writable='false'/>
>  <tag id='1640' name='NonCPULens7MaxAperture' type='int16s' writable='false'/>
>  <tag id='1644' name='NonCPULens8MaxAperture' type='int16s' writable='false'/>
>  <tag id='1648' name='NonCPULens9MaxAperture' type='int16s' writable='false'/>
>  <tag id='1652' name='NonCPULens10MaxAperture' type='int16s' writable='false'/>
>  <tag id='1656' name='NonCPULens11MaxAperture' type='int16s' writable='false'/>
>  <tag id='1660' name='NonCPULens12MaxAperture' type='int16s' writable='false'/>
>  <tag id='1664' name='NonCPULens13MaxAperture' type='int16s' writable='false'/>
>  <tag id='1668' name='NonCPULens14MaxAperture' type='int16s' writable='false'/>
>  <tag id='1672' name='NonCPULens15MaxAperture' type='int16s' writable='false'/>
>  <tag id='1676' name='NonCPULens16MaxAperture' type='int16s' writable='false'/>
>  <tag id='1680' name='NonCPULens17MaxAperture' type='int16s' writable='false'/>
>  <tag id='1684' name='NonCPULens18MaxAperture' type='int16s' writable='false'/>
>  <tag id='1688' name='NonCPULens19MaxAperture' type='int16s' writable='false'/>
>  <tag id='1692' name='NonCPULens20MaxAperture' type='int16s' writable='false'/>
>  <tag id='1708' name='HDMIOutputResolution' type='int8u' writable='true'/>
>  <tag id='1721' name='SetClockFromLocationData' type='int8u' writable='true'/>
>  <tag id='1728' name='AirplaneMode' type='int8u' writable='true'/>
>  <tag id='1729' name='EmptySlotRelease' type='int8u' writable='true'/>
>  <tag id='1764' name='EnergySavingMode' type='int8u' writable='true'/>
>  <tag id='1788' name='RecordLocationData' type='int8u' writable='true'/>
>  <tag id='1792' name='USBPowerDelivery' type='int8u' writable='true'/>
>  <tag id='1801' name='SensorShield' type='int8u' writable='true'/>
>  <tag id='1866' name='AutoCapturePreset' type='int8u' writable='true'/>
>  <tag id='1868' name='FocusShiftAutoReset' type='int8u' writable='true'/>
>  <tag id='1926' name='PreReleaseBurstLength' type='int8u' writable='true'/>
>  <tag id='1928' name='PostReleaseBurstLength' type='int8u' writable='true'/>
>  <tag id='1942' name='VerticalISOButton' type='int8u' writable='true'/>
>  <tag id='1944' name='ExposureCompensationButton' type='int8u' writable='true'/>
>  <tag id='1946' name='ISOButton' type='int8u' writable='true'/>
>  <tag id='2006' name='ViewModeShowEffectsOfSettings' type='int8u' writable='true'/>
>  <tag id='2008' name='DispButton' type='int8u' writable='true'/>
>  <tag id='2052' name='ExposureDelay' type='fixed32u' writable='false'/>
>  <tag id='2056' name='CommandDialFrameAdvanceZoom' type='int8u' writable='true'/>
>  <tag id='2058' name='SubCommandDialFrameAdvanceZoom' type='int8u' writable='true'/>
>  <tag id='2060' name='PlaybackButton' type='int8u' writable='true'/>
>  <tag id='2062' name='WBButton' type='int8u' writable='true'/>
>  <tag id='2064' name='BracketButton' type='int8u' writable='true'/>
>  <tag id='2066' name='FlashModeButton' type='int8u' writable='true'/>
>  <tag id='2068' name='LensFunc1ButtonPlaybackMode' type='int8u' writable='true'/>
>  <tag id='2070' name='LensFunc2ButtonPlaybackMode' type='int8u' writable='true'/>
>  <tag id='2072' name='PlaybackButtonPlaybackMode' type='int8u' writable='true'/>
>  <tag id='2074' name='BracketButtonPlaybackMode' type='int8u' writable='true'/>
>  <tag id='2076' name='FlashModeButtonPlaybackMode' type='int8u' writable='true'/>
> </table>
>
25213a25351
>  <tag id='4' name='AlphaIsUsed' type='int8u' writable='false'/>

But there are still problems with it. For example, you don't know what group the AlphaIsUsed tag in the output belongs to.
Title: Re: [REQUEST] New Field(s) List?
Post by: blue-j on February 12, 2025, 05:28:04 PM
can you please share the command you used to produce this output?

- J
Title: Re: [REQUEST] New Field(s) List?
Post by: StarGeek on February 12, 2025, 08:55:47 PM
exiftool_13.13 -listx -s >temp1.txt
exiftool -listx -s >temp2.txt
(at the time my regular exiftool was 13.16)

Then
diff temp1.txt temp2.txt

I wonder if there's an XML diff program. Something that would make the differences more human-readable.