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

Add a decoder for Exif.Nikon3.FlashInfo #1941

Closed
clanmills opened this issue Oct 2, 2021 · 71 comments · Fixed by #2274
Closed

Add a decoder for Exif.Nikon3.FlashInfo #1941

clanmills opened this issue Oct 2, 2021 · 71 comments · Fixed by #2274
Assignees
Labels
makerNote Anything related to one of the various supported MakerNote formats prettyPrinter Anything related to the output formatting of a value request feature request or any other kind of wish
Milestone

Comments

@clanmills
Copy link
Collaborator

clanmills commented Oct 2, 2021

I received the following email:

Hi Mr. Mills,

Some time ago, I contacted a developer of your cousin project exiftool, because I had managed to decode some private Nikon data when using a radio flash trigger, showing some settings for each group. This person completed my findings, asking for images with certain combinations of settings, and added the result to their project.

In the meanwhile, I'm using only darktable which is based on exiv2, where this information is not available.

Is there any possibility to get Exif.Nikon3.FlashInfo also decoded in exiv2?

Thanks

Christoph


Here is my reply:

Christoph

Thank You for your email. Exiv2 has a good and friendly working relationship with Phil Harvey. An excellent engineer and very nice person.

In June, I retired from Exiv2 and will leave it to others to support and develop Exiv2 in future. I volunteered to be the release engineer for v0.27.5 which is scheduled for release on 2021-10-22. I released Exiv2 v0.27.5 RC3 today. So, I’m almost out of the project.

I recommend that you open a new issue on https://github.com/exiv2/exiv2 requesting these features. Please attach your sample files. Any information you have concerning Nikon3.FlashInfo will be appreciated. Phil has probably documented this on his web-site.

The tag is known to Exiv2:

580 rmills@rmillsmm-local:~/gnu/exiv2/team $ taglist ALL | grep Exif.Nikon3.FlashInfo
Nikon3.FlashInfo,168,0x00a8,Nikon3,Exif.Nikon3.FlashInfo,Undefined,"Flash info"
581 rmills@rmillsmm-local:~/gnu/exiv2/team $ 

We don’t decode it. Here’s an example with my D5300:

584 rmills@rmillsmm-local:~/gnu/github/exiv2/0.27-maintenance $ exiv2 -g FlashInfo ~/Stonehenge.jpg 
Exif.Nikon3.FlashInfo  Undefined  49  48 49 48 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
585 rmills@rmillsmm-local:~/gnu/github/exiv2/0.27-maintenance $ 

So there are 49 bytes which are "0106\0......\0". I know the flash was not used on that photo. I see there are notes relating to this tag here: https://exiftool.org/TagNames/Nikon.html#FlashInfo0106

I hope the people working on Exiv2 will help you. Please remember they are all volunteers with jobs, family and other demands on their time. In anticipation of retirement, I spent 6 months last year writing a book: Image Metadata and Exiv2 Architecture https://exiv2.org/book/index.html So how to deal with this is documented and I am willing to mentor/assist anybody who volunteers.

If you have good C++ skills, you may enjoy the challenge to bring this feature to life by joining Team Exiv2. I assure you of my support and assistance.

Robin


Christoph replied and declined my invitation to undertake this work. He didn't want to open an issue as he knows nothing about git. So, I offered to open this issue.

@postscript-dev
Copy link
Collaborator

I had a look at Exiftool's website and the Nikon tags are listed here and the pretty printing here (both found under FlashInfo). There are 7 FlashInfo groups listed, each applying to a different set of camera models. Adding every group would take a long time, however only adding the one Christoph's needs, would be much quicker.

As we don't know Christoph's camera model and don't having a sample image, it is unlikely that we can proceed.

@clanmills
Copy link
Collaborator Author

Thank you @postscript-dev for looking at this. For sure, we need a test image. This is unlikely to arrive following Christoph's private emails about his privacy.

@clanmills
Copy link
Collaborator Author

The architecture of tag decoding is discussed in my book in 7.7 Tag Decoder https://exiv2.org/book/#7-7

@clanmills
Copy link
Collaborator Author

clanmills commented Oct 3, 2021

@postscript-dev I'm going to reopen this as the user is now offering test files. He want to discuss this by email and he doesn't want his email address published. I don't know your email address, so I cannot forward you the correspondence. Can you shoot me your email address (via email).

@clanmills clanmills reopened this Oct 3, 2021
@cris46
Copy link

cris46 commented Oct 4, 2021

@postscript-dev, @clanmills: my cameras are Nikon D7100 and Nikon D850. The work done with Mr. Harvey from exiftool is a while back. In the meanwhile, Nikon updated the CLS (the remote triggering framework in Nikon), basically to use radio rather than IR, allowing for more channels and groups. Specially the groups should extend the codes we found back then. Nikon flash trigger gear is very expensive, so there are many people using third party hardware. As long as that hardware tries to emulate Nikon's TTL, they follow Nikons framework very closely. I use that from Phottix, which is recognized as a Nikon compact flash (SB-900 IIRC), in master mode.

@clanmills
Copy link
Collaborator Author

@cris46 Thanks for this information. I'm not a photographer, so I've never heard of CLS/TLS/TTL and those other terms. However, I know about metadata and 100% confident of success. Can you share some files from your cameras with the flash in use. And can you list the exiftool presentation of the FlashInfo metadata for your test files.

It's probably sufficient to extract the metadata from your image with the command:

$ exiv2 -ea --force --verbose image-file

The option -ea extracts all metadata (Exif, XMP, Iptc and ICC).
The option --verbose reports the location of the .exv file.
The option --force means it's OK to overwrite the .exv file.

@postscript-dev Are you willing to undertake writing the decoder for Christoph's cameras? I'm happy to mentor and steer you through this project. I have documented tag decoders in my book. The architecture is quite complex and sophisticated. However tag decoders are quite easy to code and test. You'll get a lot of satisfaction from getting this to work.

@cris46
Copy link

cris46 commented Oct 4, 2021

The interesting point of FlashInfo is when using more than one flash, off camera, recording mainly the power settings of those flashes. CLS is a Nikon specific acronym which is related to the management of off camera flashes which are controlled remotely from the camera. TTL means ''through the lens''. There are fast test flashes fired and the camera measures the light through lens to figure out a "correct" power setting for the lights.

I've created a .exv-file and tried to append it here, but I get the message "we don't support that file type". So I packed it into a tar.gz (this is a MS platform after all).

It's not easy to copy here the output of FlashInfo, as this is one Exif-Tag which yields several output lines. So, I'll copy only the 6 lines I consider the most important:

Flash Group A Control Mode : Manual
Flash Group B Control Mode : Off
Flash Group C Control Mode : Off
Flash Group A Output : 4%
Flash Group B Compensation : 0
Flash Group C Compensation : 0

If you want the full output of exiftool, I can do that as well, but that's long. Just say so.

Today, I'll try to find the notes about at least part of the meaning of these 49 bytes.

_DSC6115.exv.tar.gz

@kmilos
Copy link
Collaborator

kmilos commented Oct 4, 2021

As Robin hinted, adding the decoder should be relatively easy, once one manages to do the hard part of reverse mapping what the bytes in the structure mean...

See the recently added Nikon3.Ld4 (Nikon3LensData ver 0800) code for a decoder skeleton...

@clanmills
Copy link
Collaborator Author

@kmilos Thanks for your helpful comments. The reversal engineering of the binary tag is painful. Thanks to Phil, he's both done that and documented many of those tags.

@cris46 You file has arrived safely and I see:

1006 rmills@rmillsm1:~/GoogleDrive/Exiv2 $ exiv2 -g FlashInfo/i ~/Downloads/_DSC6115.exv
Exif.Nikon3.FlashInfo         Undefined 163  48 49 48 56 1 48 5 1 1 128 0 255 0 255 0 0 0 6 0 28 30 42 96 0 0 0 0 0 0 0 0 0 1 1 16 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 85 85 85 85 80 0 0 0 0 .  .  .  .
#                                             0  1  0  8 . . .
1007 rmills@rmillsm1:~/GoogleDrive/Exiv2 $ 

So, you're using FlashInfo v0108 which Phil hasn't explicitly documented, however it's probably an extended version of 0107 which is documented: https://exiftool.org/TagNames/Nikon.html#FlashInfo0107

I hope @postscript-dev accepts the challenge of implementing Nikon3.FlashInfo.

@cris46
Copy link

cris46 commented Oct 4, 2021

Oh. In 2018 I used the D7100, and today it was the D850 (because I had a file at hand). I'll look for one from the D7100.

@postscript-dev
Copy link
Collaborator

Sorry for the delay.

Looking at your uploaded file, ExifTool already processes the FlashInfo for your Nikon D850, and outputs it as the Nikon FlashInfo0107 Tags group.

C:\temp\>exiftool -D -*flash* _DSC6115.exv
37385 Flash                           : On, Return not detected
    8 Flash Setting                   : Normal
    9 Flash Type                      : Optional,Comdr.
   23 External Flash Exposure Comp    : 0
   24 Flash Exposure Bracket Value    : 0.0
   72 Flash Shutter Speed             : 1/60 s
   73 Flash Exposure Comp Area        : Entire Frame
   74 Auto Flash ISO Sensitivity      : Subject Only
  156 Modeling Flash                  : On
  135 Flash Mode                      : Fired, External
    0 Flash Info Version              : 0108
    4 Flash Source                    : External
    6 External Flash Firmware         : 5.01 (SB-900)
  8.1 External Flash Zoom Override    : No
  8.2 External Flash Status           : Flash Attached
  9.1 External Flash Ready State      : n/a
   10 Flash Compensation              : 0
   15 Flash GN Distance               : 0
 17.1 Flash Group A Control Mode      : Manual
 18.1 Flash Group B Control Mode      : Off
 18.2 Flash Group C Control Mode      : Off
   40 Flash Group A Output            : 4%
   41 Flash Group B Compensation      : 0
   42 Flash Group C Compensation      : 0

Your Nikon 7100 is included in the FlashInfo0106 group.

Are you asking for new tags that ExifTool does not support? or are you only interested in the ExifTool tags being transcribed into exiv2?

@cris46
Copy link

cris46 commented Oct 4, 2021

I was reviewing the emails I exchanged in 2018 with Phil Harvey, when I realized, that my D850 is older than I remembered. So I was mistaken earlier. There I also saw, that the D850 had 163 Bytes for this tag. I didn't remember that.

Actually both. As a darktable user, it would be helpful to see this information when reviewing the images. But a remote flash setup can get pretty complex, so additional information is potentially always helpful. There are many number involved, so it's hard to remember even if I shot the images just 10 minutes earlier.

But back in 2018 I did not have hardware to make use of the newer version (D850), which in
the meanwhile I do have. The thing is, the new version is not backward compatible. The lower channels force the older system, higher channels the newer one. As soon as at least one device has only 4 channels, nothing of the newer system can be used at the same time. And as long as the channel is low, only 3 groups can be used.

Reviewing the messages from 2018, I also recalled that there is a Windows program from Nikon (NXView, I believe) which of course knows to decode the new tag. I don't own Windows, but I know someone how does and has this NXView installed. So I plan to shoot an image using the new version with several groups and try to see what Information I can get from NXView. Knowing what information to look for was also helfpul in 2018.

@postscript-dev
Copy link
Collaborator

I will try and work on adding the new tags, but it wont be quick. I have less time on the run up to Christmas.

First, it is best to transcribe ExifTool's FlashInfo107 group into exiv2. Once this is completed, then we can look at FlashInfo106 and then any new tags after that.

@postscript-dev postscript-dev added makerNote Anything related to one of the various supported MakerNote formats prettyPrinter Anything related to the output formatting of a value request feature request or any other kind of wish labels Oct 4, 2021
@postscript-dev postscript-dev self-assigned this Oct 4, 2021
@clanmills
Copy link
Collaborator Author

@postscript-dev Thank You, Peter. Don't bother with v0106, as that appears to be used by my 7 year old D5300. @cris46's image is using v0108. Usually with the Nikon structures, they get longer and retain backwards compatibility. So fields don't move about, new fields are added.

I don't think it's a big job to convert the definition on Phil's web-site into code for Exiv2 and write a python test that uses _DSC6115.exv. Could be hours of works or a day or two (not weeks or months). I believe both @kmilos and @hassec have implemented similar things, so you're not on your own.

exiftool has a debugging feature -v5 which is very useful for understanding how metadata is identified and decoded:

$ exiftool -v5 _DSC6115.exv
....
  | | | 63) FlashInfo0107 (SubDirectory) -->
  | | |     - Tag 0x00a8 (163 bytes, undef[163]):
  | | |         2095: 30 31 30 38 01 30 05 01 01 80 00 ff 00 ff 00 00 [0108.0..........]
  | | |         20a5: 00 06 00 1c 1e 2a 60 00 00 00 00 00 00 00 00 00 [.....*`.........]
  | | |         20b5: 01 01 10 00 00 00 00 00 1c 00 00 00 00 00 00 00 [................]
  | | |         20c5: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
  | | |         20d5: 00 00 00 01 55 55 55 55 50 00 00 00 00 00 00 00 [....UUUUP.......]
  | | |         20e5: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
  | | |         20f5: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
  | | |         2105: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
  | | |         2115: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
  | | |         2125: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
  | | |         2135: 00 00 00                                        [...]
  | | | + [BinaryData directory, 163 bytes]
  | | | | FlashInfoVersion = 0108
  | | | | - Tag 0x0000 (4 bytes, string[4]):
  | | | |     2095: 30 31 30 38                                     [0108]
...

I don't want to get sucked into this FlashInfo issue. I'm working with David on the cr3/preview request this week #1893. I really haven't studied the preview code in the past, so I'm on a steep learning curve. I want to update the discussion of the preview code in my book. On Friday, I'm away for another one week vacation and when I return, I will release v0.27.5 on 2021-10-22. After that, I'm believe I'm retired.

@cris46
Copy link

cris46 commented Oct 4, 2021

@postscript-dev um. of course, I'm happy with whatever support we can get in exiv2, whenever that might be. But Nikon did produce some rather good cameras, and I think there are still many cameras out there being used actively which are even older than 7 years. My D7100 also is from nov 2013, and I don't consider it obsolete. So, maybe these cameras shouldn't be discarded right away.

@cris46
Copy link

cris46 commented Oct 4, 2021

Here is a file from the D7100.
_DSC4962.exv.tar.gz

@postscript-dev
Copy link
Collaborator

postscript-dev commented Oct 14, 2021

Sorry for the delay.

I have completed adding the existing tags for the Nikon D850 (0108). When I started the work, I found that we already had NikonFl1 (FlashInfo0100), NikonFl2 (FlashInfo0102) and NikonFl3 (FlashInfo0103) groups defined. I have added a NikonFl7 group (FlashInfo0107).

Now when using the exiv2 tool with your test file, you will see:

$ exiv2 --grep NikonFl7 _DSC6115.exv
Exif.NikonFl7.Version                      Undefined   4  1.08
Exif.NikonFl7.FlashSource                  Byte        1  External
Exif.NikonFl7.ExternalFlashFirmware        Short       1  5.01 (SB-900)
Exif.NikonFl7.ExternalFlashData1           Byte        1  No external flash zoom override, external flash attached
Exif.NikonFl7.ExternalFlashData2           Byte        1  n/a
Exif.NikonFl7.FlashCompensation            SByte       1  0
Exif.NikonFl7.FlashFocalLength             Byte        1  n/a
Exif.NikonFl7.RepeatingFlashRate           Byte        1  n/a
Exif.NikonFl7.RepeatingFlashCount          Byte        1  n/a
Exif.NikonFl7.FlashGNDistance              Byte        1  None
Exif.NikonFl7.FlashGroupAControlData       Byte        1  Manual
Exif.NikonFl7.FlashGroupBCControlData      Byte        1  Off, Off
Exif.NikonFl7.FlashGroupAData              Byte        1  4%
Exif.NikonFl7.FlashGroupBData              Byte        1  0
Exif.NikonFl7.FlashGroupCData              Byte        1  0

You can find the ExifTool equivalent output in my post above.

@cris46: I will take @clanmills advice and leave working on the tags for the Nikon D7100, but will still help discover the new tags for your Nikon D850. Please start gathering together the sample images that demonstrate the new tags and then I can start to investigate.

@cris46
Copy link

cris46 commented Oct 14, 2021

This looks good. thanks. There is just one little thing. The 4% are most certainly correct, but it's a way a photographer can't deal with easily. We use full stops and thirds between. It would be really helpful, if this could be translated. I guess a simple array should do it. With the files I attached, and the numers in this post, it should be easy to get the table right.

ver1.0.tar.gz

BTW. I believe that Nikon also allows to use one half-steps in between, but I don't know how to set it. It should be an option somewhere, but I can't find it. And I don't know anybody using it.

I didn't look for images having different codes, but shot a few, trying to be more systematic. As I mentioned before, there are two versions which can not be used together. The files I've attached are all the older version. I'm not sure how Nikon calls them, so I'll call them version 1 and 2, and this tarball has only version 1.

Image 6268 uses channel 1 and has the AF-Ill active (this means that while focussing the camera, the flash system is instructed to illuminate the scene to help the focussing system). There are two modes, one with three groups, and one with two. This file starts with 3 groups, called A, B and C. Each group can be off, in manual or in TTL mode. This starts in manual mode. Next is the power setting, which is currently output in %, but which is normally used as a fraction. This image starts at the lowest power setting (1/128). We could consider that as 1/128 +0/3, but usually it's just written as 1/128. And finally, there is a zoom setting which represents mm of focal length. I've shot enough images so you get all number of these series. This image (still 6268) has:
A manual 1/128 zoom 17mm
B manual 1/128 +1/3 zoom 18mm
C manual 1/128 + 2/3 zoom 20mm

(actually 1/64 -1/3 and 1/128 +2/3 is the same and both are used. I suggest you stick with + values)

Image 6289 uses channel 2 and has AF-Ill off. The power settings are 1/64, 1/64 +1/3 and 1/64 +2/3, and the zoom settings are 24, 28 and 35mm (there are no values in between).

Image 6270 uses channel 3. AF-Ill was turned on for this and all further images. The power settings are 1/32, 1/32 +1/3 and 1/32 +2/3. Zoom was 50, 70 and 85mm

Image 6271 uses channel 4, the highest possible in version 1. The powers are 1/16 plus 0, plus 1/3 and plus 2/3. Zoom was 105, 120 and 135mm.

Image 6272 and all further uses channel 1 again. Power is 1/8 plus 0, plus 1/3 and plus 2/3. Zoom was 180, 200 and 200mm. 200mm is the largest focal length available. For the rest, I left zoom always at 50mm.

Image 6274 has power 1/4 plus 0, plus 1/3 and plus 2/3

Image 6275 has group A at power 1/1. Of course, there is not more than that. Group B was turned off (then there is no power and no zoom). And group C was switched to TTL mode which specifies the power in terms of plus or minus n EV, and I started with +0.0 EV.

Image 6276 has all three groups in TTL, with +0.3, +0.7 and +1.0 EV.

Image 6277 is the same, but power levels are +1.3, +1.7 and +2.0 EV

Image 6278 is the same, power: +2.3, +2.7 and +2.0 EV

Images 6279, 6280 and 6281 are the same, but power levels are -0.3, -0.7 and -1.0; -1.3, -1.7 and -2.0; and -2.3, -2.7 and -3.0 EV.

The second mode is a balancing mode. There are only two groups, which are supposed to be left and right, and power can be shifted from one side to another. The display says it's the ratio of groups A:B as 1:1, 1.5:1, 2:1, 3:1, 4:1, 6:1 and 8:1 shifting left (to group A), and 1:1, 1:1.5, 1:2 etc. shifting right to group B. At the same time the whole power can be weighted by an EV setting which can be one of -3.0, -2.7, -2.3, -2.0, -1.7, -1.3, -1.0, -0.7, -0.3, -0.0, +0.3, +0.7, +1.0, +1.3, +1.7, +2.0, +2.3, +2.7 and +3.0EV.

Image 6282 is the neutral setting (AB = 1:1 and +0.0EV). Image 6283 is A:B=1.5 and +0.3EV.

If you need more images with these combinations, let me know.

When the batteries are charged, I'll do something similar with version 2 (unless you have a better suggestion). The way to identify the protocol version is the channel. Channels 1 to 4 are necessarily the older version (1), and channels 5 to 32 are the newer (2) version. The new system can set channles 1-4 as well, but then they'll operate in a compatibility mode. Channels exist to allow two or more photographers using the same system coexist in the same room, without one triggering the flashes of another. Of course, there can be only one channel at the same time.

@cris46
Copy link

cris46 commented Oct 15, 2021

ver2.0.tar.gz

Regarding the older version ("v1"), I forgot about two things. The first an automatic zoom setting according to the focal length of the lens as reported by the camera to the trigger device. To do this, there is a "mode" for the zoom which can be set to TTL (through the lens, meaning, whatever the camera chooses to report). In this setting, of course there is no manual adjustment for the zoom. The second thing is more of a hack, which possibly is not reported to Nikon at all. It's called ODS (by Phottix) and it is a delay of the flash trigger expressed in miliseconds (0.0 to 50.0 in steps of 0.1) Normally, when using flash, there is a sync time: the shutter must not be faster than that. If it is, banding or a black image is the result. However, with slow flashes, this can work nevertheless, but some delay would be needed. And that is where ODS comes in.

In image 6284 I've used channel 1, AF-Ill on, group A at manual power 1/8 and the zoom on automatic ("TTL"). Group B is also manual 1/2, the zoom at 50mm. And group C is on TTL with -3EV and a manual zoom for a 50mm lens. Additionally, I've set ODS to 0.1, hoping that this shows up somewhere. All other images had ODS at 0.0 (off).

The newer trigger can be in a mode for version 1 or 2, depending on the channel. In compatibility mode (version 1), things are almost identical to the trigger supporting only the older version. However, that automatic zoom setting (zoom mode TTL) is not supported, it must always be manual. Also, there is a global EV weighting which is set to +1.0EV.

I suspect that this is similar enough to the other pictures, so I shot only one. Should there be some difference, I can shoot more combinations.

Image 6285 has: channel 1, AF-Ill on, Group A manual 1/8 zoom 50. Group B manual 1/2, zoom 50. Group C on TTL with -3.0 EV, zoom 50. ODS was set to 0.2, and that global EV weighting was on +1.0 EV.

Images 6286 and 6287 are in version 2. There are channels 1 to 32 (but 1-4 is version 1 only) This is to avoid interference with several photographers/cameras in the same place. Additionally there is an ID (just an integer) which severs the same purpose. This has 5 groups (A to E) and allows the AF-Ill (auto focus illumination) to be set individually per group with a power level from 0 (off) to 9.

6286: channel 5, ID: 1234, AF-Ill is on (globally). All groups but C are manual, C is on TTL. Group A is 1/8, B is 1/2, D is 1/4 and E is 1/64. Group C has -3.0EV. Additionally, ODS was set to 0.2 (if that appears in Exif at all), and the global EV weighting was set to +1.0 All per group AF-Ill settings where 9.

Image 6287 is in balancing mode, i.e., only two groups shifting the power to one side or another.: channel 5, ID 1234, AF-Ill is on, A:B is 3:1, the global EV weight is +2.0 EV, zoom is 50mm for each group. ODS was on 0.2 and FEC (flash exposure compoensation) on +2.0

The last image, 6288, is also version 2. The two previous flash triggers where from Phottix and are called Odin and Odin II. The one for image 6288 is from Godox (X2T-N) and should behave like version 2. There are missing some functions, and there are some additional, and some functions are the same but have different names. As this has to play with the Nikon camera, internally, there shouldn't be so much of a difference. After all, it's the Nikon camera generating the Exif data. To get a feeling for this, I've made a test shot with this device too.

So 6288 has channel 5, ID 15, all groups on manual:
A M 1/4 +0.5
B M 1/8
C M 1/2 +0.5
D M 1/32
E M 1/16 +0.5

(BTW, the association of percentages to fraction isn't linear but logarithmic; this makes it hard for the photographer to understand the percentages).

And here are two differences: This device allows to change the subdivision to 1/10 rather than 1/3, so it is possible to set it to +0.5. (besides, there is also a decimal system between 2 and 10 or 3 and 10, but I didn't use that) Also, this device does not allow different zoom settings for each group. There is just one for all, and that was set to 50mm. ODS is called ''high speed delay" and was on 0ms (off). BTW, while the Godox trigger doesn't distinguish groups regarding the zoom, it does have the TTL variant (which is in version 2), and it is called ''auto zoom''. So the lack of TTL-Zoom in Phottix v2 is not a protocol limitation.

I know the first trigger (Phottix Odin) best. The second I have not used very much, so I know it less. And the third I've never used in a shooting, so I know little about it. The Phottix and Godox triggers are incompatible with each other; and, of course, only one can be mounted on the camera at a time.

If you understood the working of a flash trigger just by this, without having used it (or seen someone using it), you are so much more intelligent than me... It took me quite a while to wrap my head around this. So if you have any question, just ask, and I'll try to explain.

@clanmills
Copy link
Collaborator Author

Let's give a HUGE round of applause to Peter @postscript-dev for working on this issue. Well Done, Peter. So pleased to see you dig in and make the effort to bring this to life.

And a little round of applause to @cris46 for working with Peter on this. I'm on vacation and haven't followed the details of this. @cris46 - pleased don't over burden Peter with this task. Remember, he's an unpaid volunteer.

@postscript-dev
Copy link
Collaborator

@clanmills: Thanks for the kind words.

@cris46:

This looks good. thanks. There is just one little thing. The 4% are most certainly correct, but it's a way a photographer can't deal with easily. We use full stops and thirds between. It would be really helpful, if this could be translated. I guess a simple array should do it. With the files I attached, and the numbers in this post, it should be easy to get the table right.

I will take a look at the files that you have submitted and if they match up, then we have understood the tag enough to make this change. Are you thinking 4% would be 1/25, 10% would be 1/10 and 25% would be 1/4 ?

I have some small jobs that need finishing, so for the next week I plan to work on those. After that I will study your messages and start investigating the files. Thank you for explaining the different flash features, this looks very helpful.

@cris46
Copy link

cris46 commented Oct 15, 2021

As power of light is dealt with on a logarithmic scale, the association between percentage and fraction isn't that straight forward. Actually, when the values get small and there is some rounding, it's not obvious at all. That's why I included each possible power level in those files. Together with my description, it should be easy to solve this using a look up table.
If you need more explanations or more sample files, just let me know.

@postscript-dev
Copy link
Collaborator

There's another job that I am trying to finish, but I have started to look into this.

In the example files that have been posted, there are 5 tags in the NikonFl7 group that we don't know anything about (the ones that have hexadecimal in the key). A full list of the NikonFl7 tags is:

$ exiv2 --unknown --grep NikonFl7 version1/_DSC6269.exv
Exif.NikonFl7.Version                        Undefined   4  1.08
Exif.NikonFl7.FlashSource                    Byte        1  External
Exif.NikonFl7.0x0005                         Byte        1  48
Exif.NikonFl7.ExternalFlashFirmware          Short       1  5.01 (SB-900)
Exif.NikonFl7.ExternalFlashData1             Byte        1  No external flash zoom override, external flash attached
Exif.NikonFl7.ExternalFlashData2             Byte        1  n/a
Exif.NikonFl7.FlashCompensation              SByte       1  0
Exif.NikonFl7.0x000b                         Byte        1  255
Exif.NikonFl7.FlashFocalLength               Byte        1  n/a
Exif.NikonFl7.RepeatingFlashRate             Byte        1  n/a
Exif.NikonFl7.RepeatingFlashCount            Byte        1  n/a
Exif.NikonFl7.FlashGNDistance                Byte        1  None
Exif.NikonFl7.0x0010                         Byte        1  0
Exif.NikonFl7.FlashGroupAControlData         Byte        1  Manual
Exif.NikonFl7.FlashGroupBCControlData        Byte        1  (96), Manual
Exif.NikonFl7.0x0013                         Byte       21  36 34 32 96 0 0 0 0 0 0 0 0 0 1 1 16 0 0 0 0 0
Exif.NikonFl7.FlashGroupAData                Byte        1  2%
Exif.NikonFl7.FlashGroupBData                Byte        1  2%
Exif.NikonFl7.FlashGroupCData                Byte        1  2%
Exif.NikonFl7.0x002b                         Byte      120  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 85 85 85 85 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Unfortunately in all the files supplied, of those 5 tags, the following ones always have the same value.

Exif.NikonFl7.0x0005                         Byte        1  48
Exif.NikonFl7.0x000b                         Byte        1  255
Exif.NikonFl7.0x0010                         Byte        1  0

This makes deciphering the purpose difficult but perhaps over time things may become clearer.

I had an idea that I could take the supplied raw metadata files, insert them into an empty JPEG and use the free Nikon software (NX Studio) to decipher the metadata. There is an insert bug in the exiv2 sample program (#1934) but working around that, the NX Studio output for version1/_DSC6269.exv (after reformatting) is:

+ File Info 1
File:                       Nikon_test2.jpg
Date Created:               23/10/2021 15:11:17
Date Modified:              23/10/2021 15:16:38
File Size:                  15.7 KB
Image Size:                 L (150 x 91), FX

+ File Info 2
Date Shot:                  15/10/2021 04:37:03.53
Time Zone and Date:         UTC+1, DST:OFF
Image Quality:              Lossless Compressed RAW (12-bit)
Artist:                     Cris
Copyright:                  Cris

+ Camera Info
Device:                     Nikon D850
Lens:                       50mm f/1.4G
Focal Length:               50mm
Focus Mode:                 AF-S
AF-Area Mode:               Single
VR:
AF Fine Tune:               OFF

+ Exposure
Aperture:                   f/8
Shutter Speed:              1/8s
Exposure Mode:              Manual
Exposure Comp.:             0EV
Exposure Tuning:
Metering:                   Spot
ISO Sensitivity:            ISO 100

+ Flash
Device:                     SB-900
Flash Mode:                 Front Curtain
Wireless flash options:     Optical AWL
Master:                     ---
Group A:                    M x 1/8
Group B:                    M x 1/2
Group C:                    TTL, -3.0EV (Camera: 0EV, Speedlight: -3.0EV)
Group D:                    ---
Group E:                    ---
Group F:                    ---

+ Image Settings
White Balance:              Natural light auto, 0, 0
Color Space:                Adobe RGB
High ISO NR:                OFF
Long Exposure NR:           OFF
Active D-Lighting:          OFF
Vignette Control:           OFF
Auto Distortion Control:    OFF

+ Picture Control
Picture Control:            [SD] STANDARD
Base:                       [SD] STANDARD
Quick Adjust:               0.00
Sharpening:                 +3.00
Clarity:                    +1.00
Contrast:                   0.00
Brightness:                 0.00
Saturation:                 0.00
Hue:                        0.00
Filter Effects:
Toning:
Location Info
Latitude:
Longitude:
Altitude:
Altitude Reference:
Heading:
UTC:
Map Datum:

I have only started looking at this and will post updates if I make some progress or have questions.

@postscript-dev
Copy link
Collaborator

postscript-dev commented Nov 29, 2021

I have made the .exv files in colors-exv.tar.gz available as JPEGs for use in NX Studio. You can find them in colors-exv_JPEG-versions.zip.

While AWL is the correct term, I think a better term would be "commander" or "command mode". If that's too long, "cmd mode" should be acceptable as well. This term also appears in the menu of the camera, when making the adjustment from there (which I never do). The reason for this is, that even if the camera (which generates the Exif) thinks it's AWL (which is remote control by optical means), most of the time these are third party radio controlled devices, the things we hold in our hands and thus are more real than the technology used.

Exiv2 already has a tag called Exif.Nikon3.FlashDevice (vanilla==translated). e.g., When AWL is switched on,

$ exiv2 -u -K Exif.Nikon3.FlashDevice ittlbl/_DSC6314.exv
Exif.Nikon3.FlashDevice                      Ascii      20  Optional,Comdr.

I will change the NikonFl7 output to "Comdr" as this is consistent with the other tag.

I've uploaded a few further files. As you have many in AWL ("commander mode"),

NX Studio identifies the flash as:

Filename Description
_DSC6328.exv Uses Wide-Flash Adaptor
_DSC6329.exv The same as _DSC6327.exv - not using Bounce Flash adaptor
_DSC6330.exv Uses TN-A1 (for incandescent light)
_DSC6331.exv Uses FL-G1 (for fluorescent light)
_DSC6332.exv The same as _DSC6327.exv - not using Nikon Diffusion Dome
_DSC6333.exv The same as _DSC6327.exv

Exiv2 outputs the same as NX Studio, but I expected the bounce flash adaptor and the diffusion dome to appear. Are they Nikon items? Although the adaptors were used, the camera may have considered that they weren't a significant enough factor in the photos to record the effect. Perhaps some other setting or situation determines whether the photo is classified as using that adaptor. It would help if you know what the difference between ittlbl/_DSC6314.exv and colors-exv/_DSC6329.exv is, as ittlbl/_DSC6314.exv does register as Bounce Flash.

In _DSC6333.exv, for the first time Exif.NikonFl7.0x0005 changed values. This mystery tag could be connected to the FP (HSS) and it would help if I had some samples to investigate. Please include TTL and Manual examples.

I didn't even know that there is an SB-N5 flash, and certainly I don't have one. It's the first time this name comes up. Might that be the ID Nikon is lead to believe is connected when I used some third-party controller?

This value is found in Exif.NikonFl7.ExternalFlashFirmware and doesn't affect your photos. I am trying to document the things that I have found, in case others find them useful in the future.

@cris46
Copy link

cris46 commented Nov 29, 2021

Also I expected the bounce card and the dome to be recognized. Yes, they are accessories to the SB-910 and came in the same box. Of course, it's always possible that the camera does something unexpected, but with these things, they should be recognized by hardware not by some measurement. The funny thing is, that one of the previous images, you did mention to have seen the bounce card bit.

hss.tar.gz

Here are 6 more files, again w/o AWL. The first three are TTL flash, the other three manual (1/64). Both showed the FP on their screen, when I set the camera to a shutter time of 1/8000.
If you need more examples, let me know.

@postscript-dev
Copy link
Collaborator

I have converted the hss.tar.gz .exv files to JPEGs. They can be found in hss_JPEG-versions.zip

Also I expected the bounce card and the dome to be recognized. Yes, they are accessories to the SB-910 and came in the same box. Of course, it's always possible that the camera does something unexpected, but with these things, they should be recognized by hardware not by some measurement.

I was thinking about this, the examples in colors-exv.tar.gz all use the iTTL mode. The manual mode may report the hardware as-is and if you provide examples, I will take a look.

I have found the place where the illumination pattern seems to be set, but I would be interested in some samples to test this. If you could take the same photo using TTL and manual modes where only the illumination pattern is different, this would help.

I would also be interested in a couple of photos using TTL/manual modes with the camera's internal flash, master and at least one remote. I have found a value refering to the internal camera flash and the files would help explain what is happening.

@cris46
Copy link

cris46 commented Dec 3, 2021

Regarding the illumination patterns, I had to consult the manual first. There I discovered, that we have to distinguish between "bounce flash" and "bounce card"; these are two different things: "bounce flash" just means any flash (with or without modifier) not directed to the subject, i.e., the optical axis of the lens. The flash head can be tilted up and down and rotated. So the body still is sitting normally in the flash shoe on top of the camera. Typically such a bounce flash is fired against a white wall or ceiling which will diffuse the light. A different thing is the "bounce card". this is a piece of plastic that is pulled out of a slot of the flash head in order to reflect part of the light emitted by the flash tube. This can be combined with the wide panel, but not with the dome or the color filters.

flashacc.tar.gz

6340 uses the bounce card in manual mode (plastic card pulled out)
6341 bounce card in TTL mode
6342 uses a bounce flash in manual mode (just not directed to the subject)
6343 bounce flash in TTL mode
6344 the diffusion dome in manual mode
6345 dome in TTL

I didn't find a way to adjust the illumination patterns in manual mode. So the next three are the three illumination patters in TTL only:

6346 standard illumination pattern (TTL)
6347 even (wide angle) pattern (TTL)
6348 center-weighted (tele) pattern (TTL)

The D850 does not have a builtin flash, so I used the D7100. IIRC, there were some differences in the Exif-Version generated by the D7100, so I hope this won't cause more confusion than help.

5352 uses the internal flash as the commander and a remote flash in group A (channel 1) Both are set to manual mode (1/64). To do this, I can't use a third party transmitter; the only way is to use the commander menu of the camera itself (which I've used for the first time).

5352 is the same, but both are set to TTL mode.

@postscript-dev
Copy link
Collaborator

postscript-dev commented Dec 5, 2021

Thanks for providing the files. I have converted the .exv files in flashacc.tar.gz to JPEGs in flashacc_JPEG-versions.zip.

There I discovered, that we have to distinguish between "bounce flash" and "bounce card"; these are two different things: "bounce flash" just means any flash (with or without modifier) not directed to the subject, i.e., the optical axis of the lens.

When NX Studio didn't mention "adaptor" with bounce flash, I wondered if this might be the case. NX Studio identifies files _DSC6340 to _DSC6345 as all using Bounce Flash with _DSC6344 and _DSC6345 also using the Nikon Diffusion Dome. Exiv2 now seems to identify these settings correctly.

I didn't find a way to adjust the illumination patterns in manual mode. So the next three are the three illumination patters in TTL

I tried files _DSC6346 to _DSC6348 and Exiv2 now seems to identify illumination patterns correctly.

The D850 does not have a builtin flash, so I used the D7100. IIRC, there were some differences in the Exif-Version generated by the D7100, so I hope this won't cause more confusion than help.

Although the D7100 stores the data in a 0106 pattern (the D850 uses 0108), this was still interesting to look at. The camera setting only appeared when using iTTL or TTL, so wasn't visible in this example. Though while I was examining the file, I checked the flash compensation values against the manual table that we discovered earlier and they worked. For the D7100, if I had an example of either one of the M/A/B/C with the lowest and highest flash compensation values, we could confirm this.

5352 is the same, but both are set to TTL mode.

I didn't find the D7100 TTL example in flashacc.tar.gz. If you provide examples using the lowest and highest TTL flash compensation values, I can also check that the TTL table works for your old camera. Phil can add both the manual and TTL tables to ExifTool, which would help identify your photos. The 0106 and 0108 formats look more similar that I first thought and some of the work in this issue could be reused.

I would like to test something out, as I have found a second set of M/A/B/C flash compensation values, with both sets always identical. It is unlikely that the same value is stored twice, so it is possible that one set is the desired flash values (from the GUI) and the other set is the actual values found using the test flashes. I am guessing that you usually make adjustments so that the flashes match the settings on the Speedlight - which is why the two sets of values always match. If this is true, then we can test my theory. To do this, first, fix the position of the camera and then without the master, attach one of the A/B/C groups. For the photos, choose flash compensation values below the maximum (to provide some headroom) and use the same compensation values throughout. Place the remote flash closer than the selected compensation value (to "over-flash" the subject) and take 1 manual and 1 TTL photo. Move the flash to the correct location, then take 1 manual and 1 TTL photo. Then move the flash so that it is further away (to "under-flash" the subject) and take 1 manual and 1 TTL photo. Please record the desired GUI flash compensation values and I will compare the files. I don't know if my theory will work but I think that this is worth trying.

@cris46
Copy link

cris46 commented Dec 6, 2021

This looks good. I'll provide the other sample files, however it'll take a few days. Sometimes the day job claims priority.

@cris46
Copy link

cris46 commented Dec 9, 2021

I've just got a few minutes, so I can comment on your last paragraph; I'll do the rest tomorrow.

There's one D7100 file in flashacc.tar.gz, which is 5352; there should have been a second one, 5353, but somehow that escaped. I'll attach it tomorrow.

It is unlikely that the same value is stored twice, so it is possible that one set is the desired flash values (from the GUI) and the other set is the actual values found using the test flashes.

Hm, not exactly: In manual mode, I set a value and the camera will respect that value, no matter what, even if it's complete nonsense. If I'm in some automatic mode, the camera doesn't allow me to set anything. Thus, there is always only one value per item. For instance, I can set the aperture, shutter and ISO in manual mode, and the camera will just use this. In an automatic mode (and TTL is one of those), I won't set anything or only part of several settings, leaving the camera some choices. It will compute the missing settings such that a middle luminosity in the scene will become a middle brightness in the picture. Using FV or EV compensation, I can tell the camera to still compute those settings, but increase or decrease it's finding by a certain factor: +1EV means to double the light entering the camera, -1EV only half of that. So these compensations are always relative to whatever the camera has found out and depend on that. You still might be right, one value being the middle luminosity value, and one might be the value resulting from applying the offset (compensation).

Your instructions have some problems, unless I misunderstood something:

There is indeed a maximum compensation, but having to use that is going to the extremes which usually has costs in some other department. There is a neutral compensation (+0EV), such that there is automatically a headroom of say 3EV plus and minus.

While I think it is possible to use exposure compensation in manual mode (though I've never used it), I don't think it's possible to adjust for a FV compensation in manual flash mode; that's a setting that is only available in TTL mode.

I'll try to make the closest thing possible and post the files tomorrow.

@postscript-dev
Copy link
Collaborator

postscript-dev commented Dec 9, 2021

Hm, not exactly: In manual mode, I set a value and the camera will respect that value, no matter what, even if it's complete nonsense.

There are lots of things that I am still learning about, so I will try and explain my thinking. NX Studio's flash output for the version_awl/_DSC6289.jpg file is:

Device:                  SB-910
Flash Mode:              Front Curtain
Wireless flash options:  Optical AWL
Master:                  TTL, 0EV (Camera: 0EV, Speedlight: 0EV)
Group A:                 TTL, 0EV (Camera: 0EV, Speedlight: 0EV)
Group B:                 TTL, 0EV (Camera: 0EV, Speedlight: 0EV)
Group C:                 TTL, 0EV (Camera: 0EV, Speedlight: 0EV)
Zoom Position:           Manual Zoom, FX 12mm
Illumination Pattern:    CW
Advanced Operations:     Wide-flash Adapter

Using Group A as an example, the following tags can be used to change the metadata.

Tag Effect
Exif.NikonFl7.FlashGroupAData Changes the Group A: TTL value
Exif.NikonFl7.0x0013 Changes the Group A Speedlight value
Exif.NikonFl7.0x001d Changes all the M/A/B/C Camera value

As the flash compensation for TTL mode is being set automatically, then it looks like the camera is making the decision using the Camera and Speedlight components. So far, all the TTL files have had the Camera value as 0EV and the Speedlight value is the same as the TTL value. I think that the Camera component is the internal flash and I hope that the D7100 TTL file will show this in NX Studio.

For completeness, if using manual mode (e.g., with version_awl/_DSC6297.jpg), NX Studio outputs:

Device:                 SB-910
Flash Mode:             Front Curtain
Wireless flash options: Optical AWL
Master:                 M x 1/1
Group A:                ---
Group B:                ---
Group C:                ---
Zoom Position:          Manual Zoom, FX 12mm
Illumination Pattern:   CW
Advanced Operations:    Wide-flash Adapter

Now that I understand this more, I don't think that we need these sample photos after all.

There is indeed a maximum compensation, but having to use that is going to the extremes which usually has costs in some other department. There is a neutral compensation (+0EV), such that there is automatically a headroom of say 3EV plus and minus.

Once you include the D7100 TTL file, I will try and generate all the values - at the moment, I can't turn a manual mode into TTL in NX Studio. I only need the samples if I can't generate the data.

As we didn't need other samples, perhaps you could provide something else. I have found where to change the zoom head
position value but I don't know where the choice of FX<->DX, FX or DX value is stored (I think this is the FX/DX format selection). An example of each value would be helpful but I think that I only need one of the M/A/B/C in one mode.

If I understand correctly, you can also set the zoom value on each of the remote flashes. If I had a couple of examples where at least one of the remotes uses this, then I may be able to find it. Please record the zoom values that are used.

@cris46
Copy link

cris46 commented Dec 10, 2021

OK. I'll try to fine tune this a bit, but your aren't that much off, inspite of the many comments...

Group A: TTL, 0EV (Camera: 0EV, Speedlight: 0EV)

Yes, there are two compensations, because there are also two images being taken at the same time: One is the scene as illuminated by the ambient light; it's the picture that you get if the flashes don't fire. Then there is another one, which is created only by the light of the flash. As these images are overlayed, the light's energy reaching the sensor is added.

The sensor is only concerned by the number of photons reaching each of it's cells. The stronger the light, the more photons come in per unit of time, and the longer the time, the more photons can be counted in the end. As said, this is additive. It's like water. if you take a bigger hose, the pool will fill quicker. But the longer you let the water flow, the more you get into the pool. And if another one with a water hose helping you, more water will enter the pool.

Without flash there are three things which control the amount of photons reaching the sensor: ISO, aperture and shutter. If the shutter is a long time open, even weak ambient light can produce a normally bright image. If there is a flash at the same time, the duration will be much shorter, so in that time, the sensor receives photons from the ambient light as well as from the flash. The rest of the time it's ambient only.

The camera has reasonably good means to separate these two sources of light: While adjusting the camera, there is no flash, so the camera can judge ambient light only. By using pre flashes, the camera can also see the difference between the light of ambient+flash and ambient alone.

When using the camera in an automatic mode, without flash, the camera will measure the light coming in through the lens. Then it can change each of the three basic parameters to make sure, the light reaching the sensor will produce an image where the middle luminosity of the scene becomes a middle bright part of the image. In this case, the photographer has no control over the image's brightness. A candle light scene or a surfer on the beach, the image will become equally bright. But the photographer still has a choice to change that, using the EV compensation. This is a way to tell the camera, that this middle luminosity of the scene shouldn't become a middle brightness in the image, but something brighter or darker. This is why there is an ±EV for an automatic mode.

In manual mode, that compensation is not used: The photographer tells the camera what to do, and this is done. However, the camera still has displays indicating how bright or dark that image will become, how under- or overexposed it will be, given the current settings. This is the reason why it is possible to choose a compensation also in manual mode. But that has no effect on the outcome of the image; it's just informative to the photographer, and the compensation will shift that information into one direction or another. Search for ETR (expose to the right) to find an example, why one would want to do that. As there is no regard to the outcome of the image, I'm not sure if such a compensation in manual mode is even recorded in Exif.

As soon as a flash comes into the game, there is another image which will be overlayed. It's the same scene, but it's different light being reflected. Above all, it's a different duration photons run from the scene to the sensor. Again: Using an automatic mode (TTL), the camera makes all the choices, which the photographer can accept or modify using a flash exposure compensation. In a manual mode, it's the photographer making those choices, and the camera will accept without protests. There isn't an indication displayed how bright the image will become, and thus, there is no compensation available in manual mode.

Now the camera knows how the two images will be and can add up the expected photons to check if the overlayed image will be OK. If the main part of the light comes from ambient, the flash light is called "fill flash".

So: In manual modes, the photographer's choice is everything in absolute. In automatic mode, the photographer's choice is relative to whatever the camera believes is perfect.

Here is a simplified summary:

  • Camera M, Flash M: The photographer sets ISO, aperture, shutter, and for each flash, power and zoom level. No compensations.

  • Camera M, Flash TTL: The photographer sets ISO, aperture, shutter, the camera sets power and zoom. the photographer can set a compensation for the flashes.

  • Camera A, Flash M: The camera sets ISO, aperture, shutter, the photographer can set a compensation. He will also set the power and zoom for each flash, without further compensation.

  • Camera A, Flash TTL: The camera sets ISO, aperture, shutter, flash power per flash group. and the flash zoom for all groups the same. The photographer can set a compensation for the ambient exposure (shifting the effect of ISO, aperture and shutter), as well as a compensation for the all flashes together.

Exif.NikonFl7.FlashGroupAData | Changes the Group A: TTL value

There is no TTL value. TTL is a value for an entity which can be called mode. It's the choice for using the flash in automatic or manual mode. Unless you mean the compensation used in TTL mode (which would be 0EV if the choices of the camera were accepted).

Exif.NikonFl7.0x0013 | Changes the Group A Speedlight value

If speedlight value is a single number, I would guess that it is meant as an exposure value. cf. [https://en.wikipedia.org/wiki/Exposure_(photography)], [https://en.wikipedia.org/wiki/Exposure_value]. This is somewhat slippery because it's a bit ambiguous.

Normally, it is used relatively: +1EV means, that the number of photons reaching the sensor will double, and with -1EV it'll be the half only, no matter which light source. It is relative to any setting which can be considered current: If I shot an image and think it's too bright, I can half the shutter time (+1EV) to make it darker. (less time, less photons).

Sometimes it's used also in a more absolute way. Then, 0EV means the physical amount of photons which will stimulate the sensor's cells by 50%. My guess is, if ''speedlight value'' is one single number, that this might be the meaning of it. Unfortunately, more often than not, there is no mention of what is meant.

As the flash compensation for TTL mode is being set automatically,

By now you should understand, that a compensation is never set by the camera and that it is based on a previous setting. The photographer needs this only, if that previous setting isn't under his control. Rather then telling the flash with how much percent of maximum power it should fire, we tell it to look for a "perfect balance" and shift that away by a certain amount (doubling or halving a certain number of times the photons reaching the sensor).

So far, all the TTL files have had the Camera value as 0EV

This is, because I shot all images in manual mode (camera), adjusting ISO, aperture and shutter myself. I think, I haven't sent you any example in auto, because I here was thinking of the flashes and not the camera.

Speedlight value is the same as the TTL value

If you (or NX) mean by value the EV-number, this is a compensation. As said, that should be zero in any manual mode.

if using manual mode (e.g., with version_awl/_DSC6297.jpg)

You see, the compensation has gone. The (flash-)mode is manual (not TTL), and the power setting is 100% (1/1).

FX and DX are Nikon jargon for the sensor size. FX is full frame (about 24x36mm) and DX is APS-C [https://en.wikipedia.org/wiki/APS-C], much smaller. This relativates the meaning of the focal length of a lens and the aperture angle of the cone of the flash beam.

The illumination pattern is an artifact created by Nikon. It's a combination of several settings: the reflector position of the flash tube, the vertical angle of the flash head (pointing into the scene or against the ceiling used as a diffuser=bounce flash), and a couple of other things the camera becomes aware of, like the diffuser screen, the dome or color filters. While there are many different zoom settings in terms of focal length, there are only three types of illumination patterns, which Nikon believes have a similar effect, and thus may simplify the choice for the photographer. It's only used in automatic modes.

I don't think that we need these sample photos after all.

OK.

Once you include the D7100 TTL file…

I guess, you're talking about the one that escaped the tar ball last time. Here it is:
missing.tar.gz

but I don't know where the choice of FX<->DX value is stored

As said above, this information relativates the meaning of the lens' focal length and is used only with the zoom. Rather then telling the aperture angle of the flash beam's cone, this value tells "the appropriate angle for a given focal length of a lens". This is not 1:1 as the flash beam has a shallow falloff, so the opening angle of the beam must be much wider to get enough light also in the margins. If they used the opening angle of the flash beam's cone, in this context there wouldn't be a need to record the size of the sensor (FX, DX and others). But that size is fixed in a camera and can't be changed. So the obvious thing would be, that the camera communicates to the flash: the focal length either together with the sensor size, or adjusted for a "standard" sensor size, such that the flash can do it's magic.

The Nikon flashes do have a setting to choose from either FX or DX. My guess is, that this means, that the camera can not communicate its sensor size to the flash. Normally, I leave that on FX, even for the D7100, because I'm in manual mode: I guess a setting, take a test shot and change the setting, until the test shot looks good to me. That's why I don't care to much about it. So I can't tell if the flash will change that automatically when using a different camera.

Now, there is only one zoom setting for all flashes of all groups. The commander menu of the cameras (requiring an on-camera flash or an SU-800 device), doesn't allow for more than one zoom setting for all flashes and all groups. As I can adjust the FX/DX choice in each Nikon flash in it's menu, the camera can't really take much care about it. So I would expect that value to come from the camera, not the flashes. And then, I would look for it in any of the tags describing the camera, not the flash. You can check this out by looking at an image from the D7100 which should be DX.

Note, that using a third party transceiver, as I usually do, it is possible to adjust the zoom settings per group. This is what you can see in the first files I've sent you.

D850 is FX (full frame), D7100 is DX (APS-C).

If you need more files, just tell me the setup you want, I'll prepare those files.

@postscript-dev
Copy link
Collaborator

postscript-dev commented Dec 11, 2021

I have converted the .exv in missing.tar.gz to a JPEG, for use with NX Studio. It can be found in missing_JPEG-version.zip.

OK. I'll try to fine tune this a bit, but your aren't that much off, inspite of the many comments...

I now understand this much better. If I had an example then I could add the M/A/B/C Camera EV and Speedlight EV tags to NikonFl7. Using either Camera A, Flash TTL: or Camera M, Flash TTL:, if you can change the value on the camera and let me know what effect this should have on the flash (i.e. the Camera EV value). If that matches the value in NX Studio, then I can add the tags.

Exif.NikonFl7.FlashGroupAData | Changes the Group A: TTL value

There is no TTL value. TTL is a value for an entity which can be called mode. It's the choice for using the flash in automatic or manual mode. Unless you mean the compensation used in TTL mode (which would be 0EV if the choices of the camera were accepted).

For Exif.NikonFl7.FlashGroupAData, I meant the flash compensation value for the Group A mode (in this case for TTL).

Now, there is only one zoom setting for all flashes of all groups.

I was looking at a diagram in the Speedlight manual and thought that it was for each group rather than a global flash setting.

Going forward, what would you like to investigate in the NikonFl7 group? There are lots of things mentioned in the SB-910 manual, I have some suggestions but you may have something else in mind:

  1. There are several camera settings (e.g. Rear curtain/Front curtain) that affect the flash (see E-24 in the manual). I found that the FV lock is connected to 0100 0000 in Exif.NikonFl7.0x0022.
  2. The Exposure compensation: background only value has something to do with Exif.NikonFl7.0x0016 using 0000 0100.
  3. There is a Wireless Flash Options value which can be changed in the D850 camera (connected to Exif.NikonFl7.0x0043, with values 1 for Optical AWL, 2 for Optical/Radio AWL, 3 for Radio AWL). In all your files that include remote flashes, this is set to Optical AWL.
  4. Find what the difference between Exif.NikonFl7.FlashFocalLength and the FX/DX zoom value (Exif.NikonFl7.0x0026). Both are declared zooms, but often they contain different values at the same time. For Exif.NikonFl7.FlashFocalLength, NX Studio outputs nothing if the tag is zero and when non-zero, outputs Auto Zoom.

There are lots of things available but I don't know which is most useful to you.

@cris46
Copy link

cris46 commented Dec 11, 2021

I've added three files:

compen.tar.gz

File 6349 has the camera in Auto and the flash on TTL, no compensations

File 6350 has the camera in manual and the flash on TTL, no compensations

File 6352 has the camera in Auto, the Flash in TTL. The Camera has an exposure compensation of +2/3 EV, and a FV compensation of -2/3 EV.

Was it this you meant?

Going forward, what would you like to investigate in the NikonFl7 group?

Actually, the things I was looking after are already done. We are now at a point where I'm only touching things, I've never used before, quite outside of my comfort zone. And I think that's healthy. So we can try to get the other bits too.

rear curtain / front curtain.

This is one of 6 flash modes. The camera was set to Auto, because in manual mode a few modes were not available:

6353 has front-curtain (default, "normal")
6354 red-eye reduction
6355 red-eye reduction + slow sync
6356 slow sync
6357 rear curtain
6358 flash off

6359 The menu setting of "background only" seem to depend on some exposure compensation (camera), which I set to -2/3EV. For all other files, this was set to "entire frame".

The "Wireless Flash Options" require Nikon's newer AWL system (based on the SB-5000), which I don't have. Sorry.

As I explained before, FX and DX indicate two different sizes of the sensor. A lens with a certain focal length produces the image in a circle which is just large enough to cover the full sensor. So, if the sensor is larger, also the circle needs to be larger, and this corresponds to a different focal length at the same distance from the camera to the scene. If you get an FX focal length together with a DX one, the difference should be by a factor of 1.5

The normal Exif parameters often give the focal length of a lens as it is for the camera's sensor, and a second one computed as an equivalent if that would be a full frame (for Nikon: FX) sensor.

I hope this helps to identify these bits.

Regarding NX Studio, I think "Auto Zoom" makes sense only with TTL, and there, a zoom setting doesn't seem to be available anyway. With third party triggers, I can shoot in TTL but override the automatic zoom setting (which might be wanted to be different for different sets of flashes, which Nikon doesn't seem to support anyway).
flashmodes.tar.gz

@postscript-dev
Copy link
Collaborator

I have converted the .exv files in compen.tar.gz and flashmodes.tar.gz into JPEGs for use with NX Studio. You can find them in compen-JPEG_versions.zip and flashmodes-JPEG_versions.zip.

File 6349 has the camera in Auto and the flash on TTL, no compensations. File 6350 has the camera in manual and the flash on TTL, no compensations. File 6352 has the camera in Auto, the Flash in TTL. The Camera has an exposure compensation of +2/3 EV, and a FV compensation of -2/3 EV.

Was it this you meant?

I looked at the compen.tar.gz files and in NX Studio they all displayed:

Flash Control Mode:	i-TTL, 0EV (Camera: 0EV, Speedlight: 0EV)

I was hoping that by using different camera values (e.g. exposure compensation, FV compensation, etc) that the Camera EV part would change. When I examined the Exif.NikonFl7.0x001d tag in the files, they were 0 except for _DSC6352.exv which was 4 (i.e. 1/1 (-2/3EV)). This indicates that the FV Compensation is being stored in the tag, however this still wasn't displayed on screen. Perhaps the iTTL mode is evaluating the situation and deciding that the setting had no impact on the image, so it isn't displayed in NX Studio. I know that you don't have any control over iTTL/TTL but, so far, when a remote flash is attached, the mode drops to TTL. Try adding a remote flash and using both Camera A, Flash TTL: and Camera M, Flash TTL setups with an FV Compensation of -1/3 EV and an Exposure Compensation of +2/3 EV. Using 2 different EV values allows us to see the effects more easily, as they would not cancel each other out for the Camera EV value.

I don't have more time to look at this now, but will come back to it later in the week.

@cris46
Copy link

cris46 commented Dec 17, 2021

Thus is puzzling. One thing for sure: When I set an exposure compensation for the camera, this is not a "Flash Control Mode"; I can do that even without any flash. The other thing is, a compensation is never absolute. so it's not 1/1 -2/3, but always just the offset of 2/3 wrt some neutral setting. 1/1 -2/3 would probably mean just 1/3, and 1/1 +2/3 means 4/3. And that neutral setting is always chosen by the camera (TTL/automatic mode). You need to think of a compensation -1 EV to reduce the power of the flash for half of what ever the camera would choose.

The flash compensation seems thus to be identified. This can get up to ±3EV.

But I also can't think of what might be the camera part in this. Thinking out loud: Flash compensation is a setting I can make regardless the commander mode: I can tell the camera, I want to reduce (or increase) the flash power from a mathematically ideal setting, but at the same time, when using the commander mode of the camera, I can also tell to reduce or increase the power for an individual flash group. If this distinction was meant, I would expect the flash compensation to show as "camera" and the group setting as flash compensation. As this isn't the case, it can't be that. clueless.

A compensation is always a manual setting, the photographer's choice, and the camera always respects that. So even if the camera knows that such choice is stupid, it will do it. OTOH, camera manufacturers are a bit like kitchen chefs: They think it's magic if they keep the user without knowing the ingredients. And NX Studio (which, of course, I never use, as I work with Linux only) is just an extension to that. If NX Studio doesn't tell us something, it doesn't mean it isn't there.

I know for sure that iTTL is possible with remote flashes as well. And I would not have expected the mode to drop from iTTL to TTL when only Nikon gear is being deployed. I have no explanation for that. Might it be that the "i" of "iTTL" was dropped only because there was not enough space in the display?

moremodes.tar.gz

Here a few more files: 6359 was missing from the last tar. That was about "background only"…

Today I got somewhat confused: I could have bet that I already used the D850's menu to control the AWL flashes, but today I wasn't able to do so: the menu item was grayed out. Then I looked in the manual, but that says that this is only possible with the SB-5000 et al., i.e., the newer generation of radio controlled Nikon flashes (which I do not possess). So I shot the images anyway: 6360 and 6361, the first with the camera in Auto, flashes on TTL, one on camera and one remote (group A), both SB-910. The camera was set to an exposure compensation of -1/3, the flash compensation was +2/3. For 6361 I only changed the camera from automatic to manual mode, so the exposure compensation was gone.

Then I realized that I hadn't adjusted any controlling device. The on-camera flash was simply "ON", the remote on "Remote". Of course this worked, because the on-camera flash will fire anyway, and the remote camera fires whenever it sees the light of another flash. But I'm not sure how useful these files might be...

Then I changed camera and used the D7100. There I noticed, that the menu controls for the remote flashes only have one entry for the master, and groups A and B (no group C). A used it anyway and adjusted the camera and flashes as before, the commander for both in TTL. These are files 5354 and 5355.

Finally I went back to the D850 and repeated everything, but I set the on-camera flash to master, the master group to TTL as well as group A to TTL. This should be more of what you wanted.

@postscript-dev
Copy link
Collaborator

Sorry for not replying earlier, I intended to post before Christmas but didn't find the time.

I have converted the .exv files in moremodes.tar.gz into JPEGs for use with NX Studio. You can find them in moremodes_JPEG-versions.zip.

1/1 -2/3 would probably mean just 1/3, and 1/1 +2/3 means 4/3.

This is my fault, I was pushed for time and copied the wrong value into my post. In compen/_DSC6352.exv, what I meant was that the value was 4 (translated: -0.7EV). Now that I have more files, I think that some of the tags are different from what I first thought.

While looking at the new moremodes.tar.gz files, I found:

  1. The "Camera Exposure Compensation" value is stored in Exif.NikonFl7.0x001c and I have added this tag as Exif.NikonFl7.CameraExposureCompensation. This is displayed in the Exposure section of NX Studio under Exposure comp.:.
  2. The "FV Compensation" is stored in Exif.NikonFl7.0x001d and I have added this as Exif.NikonFl7.CameraFVCompensation
  3. The effective output of the master flash is in Exif.NikonFl7.0x0027 which I have called Exif.NikonFl7.FlashMasterData. This is the output after both the camera compensations and the flash value are taken into account.
  4. The effective output of the remotes in Exif.NikonFl7.FlashGroupAData, Exif.NikonFl7.FlashGroupBData and Exif.NikonFl7.FlashGroupCData is after both the camera compensations and the flash value are taken into account.

There is another possible EV value in Exif.NikonFl7.0x001b. All the files have 0 except for moremodes/_DSC6360.exv to moremodes/_DSC6363.exv which have 254 (translated: +0.3 EV). Was there something else different about these files?

Here a few more files: 6359 was missing from the last tar. That was about "background only"…

This worked as predicted and Exif.NikonFl7.0x0016 had 0000 0100 set. I have added this as Exif.NikonFl7.FlashExposureMisc and when on, outputs Exposure Comp.: Background Only (the same as NX Studio). When off, I output Exposure Comp.: Entire frame which is the same as the camera manual (NX Studio doesn't output anything).

rear curtain / front curtain.
This is one of 6 flash modes. The camera was set to Auto, because in manual mode a few modes were not available:

I didn't see anything obvious in NikonFl7 when the different modes were used, so it looks like this is stored elsewhere. This is beyond the scope of this project.

I have created a new Linux build for you to try in exiv2-1.0.0.9-Linux64-new-NikonFl7-0.7.tar.gz. This is still work in progress, so let me know if you find any problems.

@cris46
Copy link

cris46 commented Jan 2, 2022

I've downloaded your version of exiv2 in order to take a closer look at all files I've uploaded here so far, but also to perform a few scans over all of my image files.

First the comments to your post:

@1 I haven't found CameraExposureCompensation, so that's probably not yet included in that linux version.

@2 Neither did I find FV Compensation (for which I found recently that one manufacturer uses consistently the acronym FEC, flash exposure compensation). but there is a FlashExposureComp tag.

@3 I did find the FlashMasterData, and that looks good.

@4 Not sure about FlashGroup[ABC]Data wrt FlashCompensationGroup[ABC]Data.

I'm not very proficient using exiv2 as a command line tool (I normally use it by means of another program like darktable), so I don't know how to display both Exif.NikonFl7.0x001b and something like Exif.NikonFl7.FlashMasterData to find out that association. This makes it a bit hard to follow you.

FlashExposureMisc seems to have worked. I used the alternative value in only one file. If there's a chance when this is unset, outputting nothing (or n/a) may be of advantage however. IIRC, this only has an effect if there is a non-zero flash exposure compensation (and maybe some further condition). I could check the manual for details again if you want to change that.

All used flash modes did show up correctly in "FlashSetting".

Now the findings of that closer look that kept me busy the last few days. In no particular order:

(1) I'm intrigued by finding out under which circumstances "Photo.Flash" shows "return light (not) detected", and what consequences this might have.

(2) There are a few features that just don't show up anywhere. While one can doubt the usefulness of values for a transmitter channel or AF illumination, the lack of a flash zoom per group is a loss. But as there is a good chance Nikon doesn't even record it (become aware of it), as well as the possibility that is hidden in one of those super long maker note tags, I guess there is little we can do here. One particular thing I'm missing is the ODS setting of Phottix, as it allows to hack non-HSS sync times. It was the item most unlikely to find, but one of the most interesting ones (Might Nikon be reading this?).

(3) Whenever there is a compensation value regarding something which is not in an automatic but manual mode, the displayed value should be n/a.

(4) A suffix like "Data" or "Misc" is OK for now until we get a better feeling for the purpose of each tag. But in the end, we should look for something else, as it is my opinion that the length of an ID should be in proportion to the information it carries, and there is nothing in Exif which is not "Data".

(5) It would be nice, if "FlashGroupBCControlData" could be split up in "FlashGroupBControlData" and "FlashGroupCControlData". It took me a while to understand it.

(6) Something is wrong with images 6282 and 6283. I used the balancing mode, which uses only two groups, A and B. This mode shifts the power from one side to another. The idea is to set a global power level and decide how much of that should go to which side of the scene. This is the ratio setting for A:B. So there are three items necessary to recover this setting: (a) the fact, that it is a balancing mode, (b) how much energy will be available all together, and (c) how this energy is shared across the left and right side of the scene.

In 6282 the global value is ±0EV, i.e. the energy required to properly illuminate the scene according to the cameras calculations, and the ratio was 1:1. In 6283, the global power is +1/3EV and the ratio is 1:5.

These two images where using a third party trigger (Phottix), but exactly the same feature is available also in the control menus of the cameras and of the SB-910. Indeed, I think Phottix has added this mode only because it does exist in Nikon gear (and I never use it).

There is no direct clue that this balancing mode had been used, but indirectly it is a clue that there are exactly two groups being used, both in TTL. But this might also have been an explicit user setting. And I can't find the global energy (±0EV for the first and +1/3EV for the second), nor the ratios.

On the other hand, there is something I've suspected for a while and which seems to be confirmed here: Some camera or flash settings make no sense in certain contexts. So when I have some power setting and pick the stroboscopic mode (repeating flash) in the flash, these power settings aren't displayed anymore, because they don't make sense in this context. However, if I leave the stroboscopic mode, the previous settings are restored. Obviously, they just kept that variables around. The data copied to Exif seem to be a copy of those variables, so in spite of the contexts we get settings which have no meaning. This is the case here. "FlashGroupAData" certainly don't apply but get the value form image 6281. FlashCompensationGroupAData arguably is another case, as of course 1:5 can be expressed by two EV values. That's not the case here, as these values clearly come from image 6281 and do not reflect the ratio.

But I'm not sure how much can be done about it. Of course, exiv2 can't know the values of image 6281 while extracting the values of 6282, but when interpreting these data, exiv2 is probably at a point having not even the context to reset or suppress certain tags for the value of other tags. In this particular case this is rather unfortunate, as the two EV values given "could" be true, they just aren't (besides the fact that 1.5 other issues are missing: the balancing mode at half and the global power setting all togehter). Image 6287 is another case of this.

(7) I'm sure there isn't much you can do about it, but there doesn't seem to be any logic behind the "FlashFocalLength" which often isn't set at all, and rarely matching anything actually used. I guess here it's Nikon to blame. I noticed this in image 6285 where also groups B and C where used but are marked off. Thinking more slowly, I can see a slight chance that the change in grouping is connected with the fact that I was using ODS; but this doesn't explain the wrong focal length values.

(8) "Version 2" of Nikon's flash system hasn't worked anywhere. I didn't pay too much attention to this before as I mostly use the previous version which is still supported. The main difference is, that Version 1 has 3 groups and Version 2 has 5. Devices of the newer version are able to behave like those of Version 1, but these versions are not compatible. If I use channel 1-4, I get 3 groups no matter which version a device was built for. Using channels 5-32 I get the newer behavior (5 groups), but as older devices are not able to tune in any channel higher than 4, they can't receive anything. It is a pitty that a device of 5 groups can't use 3 groups to trigger older devices and two for newer ones at the same time.

I don't have any Nikon brand device for Version 2, but I do have two (Phottix and Godox) third party devices (triggers) mimicking that version 2. And in both devices the Exif output didn't work. In image 6288, I used all five channels with Godox but got a really odd output: groups A and C did match, group D showed as group B and groups B and E are missing. Besides, what came out as "1/1 -5/6EV" should have been "1/2 +0.5EV" (or "1/1 -0.5"). I felt sure that these devices would convince the camera to be Version 2 devices, and expected the Exif data to reflect that. It would be interesting to see what NX has to say about 6288. This motivated me to look for the unknown tags...

(9) Does "FlashIllusionPattern" (which I think is a well chosen name, but they call it FlashIlluminationPattern) show CW by some default? I've observed that Nikon changes this even just when the flash head is tilted to a different angle. In manual mode, that has no consequences, and I often mount those flashes secured at their head, so the tilt relative to the body doesn't change the direction of light (rendering this completely irrelevant). The thing is, when I set those patterns specifically, exiv2 did identify them correctly, otherwise I always get CW. It would be nice if we could get n/a when unset or meaningless; even STD would be preferrable, as it feels more neutral while CW carries the notion of a tele-lens.

(10) I didn't understand why 6332 (ttl I believe) did not recognize (as you noticed) the diffusion dome, but 6344 (manual) and 6345 (ttl) did.

(11) Another thing I didn't understand is in images 6341 and 6342 (and neighbors). 6341 used the bounce card. This is a rectangular sheet of plastic which can be pulled out of a slit of the flash to block and reflect light at one side of the flash, and for this image it was pulled out. 6342 does not use this card, it was within that slit and had no effect. However, this flash was not oriented to the subject but against a white wall/ceiling. So the wall acts like a huge bounce card causing the shadows on the subject to be softened. The flash head can be rotated and tilted with respect to the body of the flash. Nikon seems to assume, that the flash is always mounted vertically, the body facing the subject. So when it is rotated or tilted other than at 90°, the flash/camera have reason to assume that there is a bounce flash. As the flash also has sensors to measure the reflected light falling back to itself, there is another way it can detect a bounce flash (without bounce card). Nevertheless, this is not trivial for Nikon, as the flash head can be mounted in any position. As the Nikon manuals do distinguish these two kinds of bounced light, I wondered if they are actually able to detect a bounce flash in Exif. What I did not expect is that flash light bounced off a wall/ceiling would be detected as a "bounce flash adapter", which the wall certainly is not. Also, when bouncing a flash from a large object, specially indoors, a wide angle setting ("even") would be more plausible. Anyway, that shot was manual, so illumination patterns do not apply.

(12) Also image 6358 is somewhat off. This is one of the images exercising the flash modes (slow, rear curtain, red-eye reductions, etc.) One of those mode is "off". Meaning: The flash is mounted, all settings are set, but the flash is disabled and will not fire. I'm not sure if this should show up differently in Exif as when the flash actually doesn't even exist. Anyway there are some tags that aren't interpreted. FlashSetting has "13", FlashDevice has "20" and FlashSource has "(6)".

(13) there seems to be a typo in FlashMode when printing "fire." As the negative case ("did not fire") uses the past tense, I guess there is a "d" missing at the end.

(14) I've observed that FlashExposureComp (which seems to be interpreted for instance in image 6320), and FlashBracketComp have an undefined data type but a length and probably correct value.

(15) There is a tag FlashBracketComp. This is a feature you don't have a sample file for (and which I've never used). If you are interested I can try to make one. A bracket is an adjustment of the camera, where I can shoot several images, but doing so automatically will vary some parameter. For instance, in a scene with a very high dynamic, very bright spots besides very dark ones, the camera can be set to make images exposing for the brighter and darker areas, which can be combined in the computer in order to create an HDR image. The common settings say how many images belong to that bracket, and which variable should be varied by how much. My problem with the brackets is that I'm a distracted guy and after a few seconds often I don't remember if I've already shot 3 or 4 images, and thus I don't remember when the bracket starts and ends. The same happens, when I'm at the computer trying to combine them into one HDR, not knowing which images belong to this bracket and which to the next. Actually, it would be helpful if there was some indication in Exif that this image is the nth of such a bracket. Nikon has a code for each of the combinations of number of images, variable to vary and interval by which it is to vary. Knowing this code and knowing the current setting it would be possible to identify that nth image. But it seems, we don't know that code.

(16) I've got a feeling that the values for FlashCompensationGroup[ABC]Data is just a duplicate of FlashGroup[A]Data, and think that they should be mutually exclusive. Maybe this is a case of meaningless variables as outlined above.

Finally, I tried to deal with unknown tags, specially thinking of the 5 flash groups of Nikon's newer flash system. First, I used the following command line:

    exiv2 -pa --unknown --grep NikonFl $i | grep 0x | cut -d' ' -f1

where exiv2 is your last version I downloaded. This I applied to all files of the D7100 and piped into a file. There was only one tag showing up using sort and uniq on that file:

    Exif.NikonFl6.0x0005

This tag appears in all files and I found 661 different values.

Then I did the same for the files from the D850, yielding the following tags:

    Exif.NikonFl7.0x0005    3
    Exif.NikonFl7.0x000b    2
    Exif.NikonFl7.0x0017    14
    Exif.NikonFl7.0x001e    13
    Exif.NikonFl7.0x002b    73

Also these tags appear in all files; the number to the right is the count of different values.

I wrote down having seen somewhere an Exif.NikonFl7.0x0010 tag, but I can't find it anymore.

Tag 0x000b has only two values, 0 and 255, where 0 seems to show that no flash was used. So this feels like a basic flag, whether flash is an issue for this image.

Tag 0x0005 has only one of three different values: 0, 48 and 78. I wish there was a C-language API for exiv2, as it's really hard trying to figure out what that might mean: Trying to identify unique patterns of the other tags in order to look at a specific subset of
images, so I can try to remember what was common to them. So far I only could figure that a value of 0 means that no flash was used. I tried to find some differences between a pair of files with 48 and 78, specially of images taken consecutively, and then to find other pairs which where equal wrt that difference. But as I always was able to find such a pair, I had to discard that feature as being recorded by that value. Doing this manually and exhaustively is a task of a century. Maybe you can suggest a more efficient method.

@postscript-dev
Copy link
Collaborator

@cris46: I haven't read all you post yet, as it will take time to go through.

  1. I checked and the missing tags are in exiv2-1.0.0.9-Linux64-new-NikonFl7-0.7.tar.gz. Is it possible that you are using a different version of the exiv2 sample program instead of the one I supplied? If I unzip the new build and use those files, then I can see the new tags. e.g.,
$ ~/temp/exiv2-1.0.0.9-Linux64-new-NikonFl7-0.7/bin/exiv2 -g NikonFl7 ~/Pictures/moremodes/_DSC6360.exv
Exif.NikonFl7.Version                        Undefined   4  1.08
Exif.NikonFl7.FlashSource                    Byte        1  External
Exif.NikonFl7.ExternalFlashFirmware          Short       1  7.01 (SB-910)
Exif.NikonFl7.ExternalFlashData1             Byte        1  Manual zoom
Exif.NikonFl7.ExternalFlashData2             Byte        1  iTTL, Comdr off
Exif.NikonFl7.FlashCompensation              SByte       1  0.0 EV
Exif.NikonFl7.FlashFocalLength               Byte        1  30 mm
Exif.NikonFl7.RepeatingFlashRate             Byte        1  n/a
Exif.NikonFl7.RepeatingFlashCount            Byte        1  n/a
Exif.NikonFl7.FlashGNDistance                Byte        1  n/a
Exif.NikonFl7.FlashColorFilter               Byte        1  None
Exif.NikonFl7.FlashGroupAControlData         Byte        1  Off
Exif.NikonFl7.FlashGroupBCControlData        Byte        1  Off, Off
Exif.NikonFl7.FlashCompensationGroupAData    Byte        1  n/a
Exif.NikonFl7.FlashCompensationGroupBData    Byte        1  n/a
Exif.NikonFl7.FlashCompensationGroupCData    Byte        1  n/a
Exif.NikonFl7.FlashExposureMisc              Byte        1  Exposure Comp.: Entire frame
Exif.NikonFl7.CameraExposureCompensation     Byte        1  +0.7 EV
Exif.NikonFl7.CameraFVCompensation           Byte        1  -0.3 EV
Exif.NikonFl7.FlashIllusionPattern           Byte        1  CW
Exif.NikonFl7.FlashZoomHeadPositionM         Byte        1  24 mm
Exif.NikonFl7.FlashMasterData                Byte        1  +0.3 EV
Exif.NikonFl7.FlashGroupAData                Byte        1  n/a
Exif.NikonFl7.FlashGroupBData                Byte        1  n/a
Exif.NikonFl7.FlashGroupCData                Byte        1  n/a

In Linux, unless you specify a directory for the executable (as above), then a program is found using your PATH environment variable. You can find out which exiv2 program is being run with the command:

$ which exiv2
/usr/bin/exiv2

In Linux, by default, the current directory is not included in the search path (for security reasons). e.g., If in the ~/temp/exiv2-1.0.0.9-Linux64-new-NikonFl7-0.7/bin directory:

$ exiv2 --version | grep "exiv2 "
exiv2 0.27.2

$ ./exiv2 --version | grep "exiv2 "
exiv2 1.0.0.9

I'm not very proficient using exiv2 as a command line tool (I normally use it by means of another program like darktable), so I don't know how to display both Exif.NikonFl7.0x001b and something like Exif.NikonFl7.FlashMasterData to find out that association. This makes it a bit hard to follow you.

I include the hexadecimal values to try and document the changes that are being made. To display the hexadecimal values in the tags, use the --Print flg option. e.g., Use --Print x to display the hexadecimal value and here, to keep the output small, only display the Exif.NikonFl7.FlashMasterData tag (using --key key):

$ ./exiv2 --Print xkt --key Exif.NikonFl7.FlashMasterData ~/Pictures/moremodes/_DSC6360.exv 
0x0027 Exif.NikonFl7.FlashMasterData                 +0.3 EV

This works differently for unknown tags. To save space, a group of unknown tags are listed together under the first entry. e.g.,

$ ./exiv2 --Print xkt --unknown --key Exif.NikonFl7.0x001e ~/Pictures/moremodes/_DSC6360.exv
0x001e Exif.NikonFl7.0x001e                          0 0 1 0 144 64 0

In this case, Exif.NikonFl7.0x001f would be the second value in the Exif.NikonFl7.0x001e tag.

FlashExposureMisc seems to have worked. I used the alternative value in only one file. If there's a chance when this is unset, outputting nothing (or n/a) may be of advantage however. IIRC, this only has an effect if there is a non-zero flash exposure compensation (and maybe some further condition). I could check the manual for details again if you want to change that.

If you look into the conditions then I will update the tag.

(1) I'm intrigued by finding out under which circumstances "Photo.Flash" shows "return light (not) detected", and what consequences this might have.

I will leave you to investigate Exif.Photo.Flash yourself, as this outside the scope of this project. The available values for the tag are:

0x00 No flash
0x01 Fired
0x05 Fired, return light not detected
0x07 Fired, return light detected
0x08 Yes, did not fire
0x09 Yes, compulsory
0x0d Yes, compulsory, return light not detected
0x0f Yes, compulsory, return light detected
0x10 No, compulsory
0x14 No, did not fire, return light not detected
0x18 No, auto
0x19 Yes, auto
0x1d Yes, auto, return light not detected
0x1f Yes, auto, return light detected
0x20 No flash function
0x20 No, no flash function
0x41 Yes, red-eye reduction
0x45 Yes, red-eye reduction, return light not detected
0x47 Yes, red-eye reduction, return light detected
0x49 Yes, compulsory, red-eye reduction
0x4d Yes, compulsory, red-eye reduction, return light not detected
0x4f Yes, compulsory, red-eye reduction, return light detected
0x50 No, red-eye reduction
0x58 No, auto, red-eye reduction
0x59 Yes, auto, red-eye reduction
0x5d Yes, auto, red-eye reduction, return light not detected
0x5f Yes, auto, red-eye reduction, return light detected

(3) Whenever there is a compensation value regarding something which is not in an automatic but manual mode, the displayed value should be n/a.

There are several loose ends like this. I will get round to tidying up the values.

(5) It would be nice, if "FlashGroupBCControlData" could be split up in "FlashGroupBControlData" and "FlashGroupCControlData". It took me a while to understand it.

This looks simple but would involve big infrastructure changes and is beyond this project. As I understand the tags better, I try to improve the descriptions of the tags. You can view these using the taglist program included in the build. e.g., To display the description for the Exif.NikonFl7.FlashGroupBCControlData tag, use:

$ ./taglist NikonFl7 | grep FlashGroupBCControlData | cut --delimiter=',' --fields=5,7
Exif.NikonFl7.FlashGroupBCControlData,"Flash group B/C control data"

taglilst works with all the tag groups in the library. Also if you remove the grep portion of the command then all the tags in the NikonFl7 group will be listed.

I will look at the rest of your post later in the week, I need to finish something else first.

@postscript-dev
Copy link
Collaborator

While it is helpful to deal with all the issues involved, it is difficult to answer lots of points at one time. Something will inevitably get missed out. Perhaps we can keep posts to maybe 5-6 separate topics, as this is easier to manage. This is about what I usually aim for.

I decided to upload the output from NX Studio for you to look at - Nikon saves the data in a tab-separated format. As some of the images didn't use all the columns/categories, it was quicker to produce three files then sort through the data. They files are: NX_Studio1_D850.txt, NX_Studio1a_D7100.txt and NX_Studio1b_D7100.txt

(4) A suffix like "Data" or "Misc" is OK for now until we get a better feeling for the purpose of each tag.

I planned to rename the tags before submitting the code.

(6) Something is wrong with images 6282 and 6283. I used the balancing mode, which uses only two groups, A and B.

As you can now see, NX Studio doesn't mention balancing. It is possible that the settings are recorded but I can't see them in NikonFl7 - which is the scope of this project. As the output from Exiv2 matches NX Studio, is it possible that you listed the wrong values in your post? If you want to reshoot the images with the values that you expect, then I will have another look.

On the other hand, there is something I've suspected for a while and which seems to be confirmed here: Some camera or flash settings make no sense in certain contexts. So when I have some power setting and pick the stroboscopic mode (repeating flash) in the flash, these power settings aren't displayed anymore, because they don't make sense in this context. However, if I leave the stroboscopic mode, the previous settings are restored.

I think that these settings will be stored on your camera and only the values used in shooting an image would be recorded in the metadata. I can't see any indication in version1/_DSC6281.jpg and version1/_DSC6282.jpg where the data has crossed over.

(7) I'm sure there isn't much you can do about it, but there doesn't seem to be any logic behind the "FlashFocalLength" which often isn't set at all, and rarely matching anything actually used.

As I have mentioned before, I don't understand Exif.NikonFl7.FlashFocalLength as the fx/dx zoom value is in Exif.NikonFl7.FlashZoomHeadPositionM. I will need to think more about this.

  1. "Version 2" of Nikon's flash system hasn't worked anywhere. I didn't pay too much attention to this before as I mostly use the previous version which is still supported.

The NX Studio files show what I see on screen, so I can't be of much help. If you search online for your remote flashes, perhaps the version issue is a known problem.

(9) Does "FlashIllusionPattern" (which I think is a well chosen name, but they call it FlashIlluminationPattern) show CW by some default? I've observed that Nikon changes this even just when the flash head is tilted to a different angle.

Exiv2 outputs whatever Nikon records and this seems the best way forward as we can't detect the flash head angle. I will change the name of the tag to Exif.NikonFl7.FlashIlluminationPattern.

(10) I didn't understand why 6332 (ttl I believe) did not recognize (as you noticed) the diffusion dome, but 6344 (manual) and 6345 (ttl) did.

NX Studio doesn't mention the Diffusion Dome, so perhaps the files or filenames were mixed up? You have supplied a lot of files for me and sometimes it is difficult to keep track of all the photos and settings.

(11) Another thing I didn't understand is in images 6341 and 6342 (and neighbors). 6341 used the bounce card. This is a rectangular sheet of plastic which can be pulled out of a slit of the flash to block and reflect light at one side of the flash, and for this image it was pulled out.

If I understand correctly, use of the bounce card does not seem to be recorded, only whether light was bounced back. NX Studio only displays Bounce Flash not Bounce Flash Adaptor. In the end, the lack of distinction may be more useful to you, as it will explain how the light affected the image. This is true even when the bounce card is not used.

To find out if the flash angle automatically triggers the bounce flash status, you could cover the master flash when it is at an angle. The flash would then not be detected by the camera but the metadata might still automatically record the image as Bounce Flash. I don't know if it is safe to cover the flash when it fires though.

(12) Also image 6358 is somewhat off. This is one of the images exercising the flash modes (slow, rear curtain, red-eye reductions, etc.) One of those mode is "off". Meaning: The flash is mounted, all settings are set, but the flash is disabled and will not fire.

For flashmodes/_DSC6358.jpg, the NX Studio flash settings are empty. In Exiv2, Exif.Nikon3.FlashSetting and Exif.Nikon3.FlashDevice are strings of text set by Nikon and both are empty. You are quite right that Exif.Nikon3.FlashMode is (6) and this is a new value for Exiv2 and ExifTool. Perhaps it is something like external flash attached but off?

It is worth knowing, that a translated value containing brackets means that Exiv2 did not know how to translate the value (e.g., (6)). Also. although the flash is switched off, some of the NikonFl7 values still output translated values. I will change those to n/a.

(13) there seems to be a typo in FlashMode when printing "fire." As the negative case ("did not fire") uses the past tense, I guess there is a "d" missing at the end.

If using the past tense it would be something like "not fired", "was not fired" or "has not fired". "did not fire" is correct English and seems like a good way of explaining the situation. The text for this tag more or less comes from the Exif specification.

(14) I've observed that FlashExposureComp (which seems to be interpreted for instance in image 6320), and FlashBracketComp have an undefined data type but a length and probably correct value.

I can't find the _DSC6320.exv file.

(15) There is a tag FlashBracketComp. This is a feature you don't have a sample file for (and which I've never used). If you are interested I can try to make one.

If you provide examples then I will take a look.

(16) I've got a feeling that the values for FlashCompensationGroup[ABC]Data is just a duplicate of FlashGroup[A]Data, and think that they should be mutually exclusive. Maybe this is a case of meaningless variables as outlined above.

I only found out recently that in the case of the Master (and probably the A/B/C remotes), they are different. If you look at moremodes/_DSC6360.jpg in NX Studio, then you can see that the value for Exif.NikonFl7.FlashMasterData is the actual output and Exif.NikonFl7.FlashCompensation is the Speedlight value. The discrepancy is accounted for when you factor in Exif.NikonFl7.CameraExposureCompensation (Exposure Comp.) and Exif.NikonFl7.CameraFVCompensation (camera). I couldn't see this until I had examples using the exposure compensation and flash compensation values.

As for NikonFl6, I wanted to try a Python script with a D7100 file, so added a rough bare-bones version of the group. This was added only for experimenting on, as adding all the tags, translation output, testing, documentation and admin is a bigger job. I had planned to delete this.

Doing this manually and exhaustively is a task of a century. Maybe you can suggest a more efficient method.

I don't have a special method. I either ask for test files or I compare existing files, make guesses then confirm with NX Studio/new test photos. The Python scripts I used artificially change one value and sometimes get/trick NX Studio into displaying new/different information. Sometimes this works, but you can't be sure, as you are potentially corrupting the data. Sometimes in the real world, some values need to be changed in multiple places (even outside of NikonFl7) to make them display. You really need test photos to confirm that you have understood how a tag works.

One value that I made NX Studio display is FV Lock. If I had a couple of examples, I may be able to find out where this is stored.

@cris46
Copy link

cris46 commented Jan 14, 2022

I had a look at the NX output. There are many columns, so I tried to open it in a spread sheet, but there seem to be some tabs missing, as the columns get mixed up in the right half. It has been interesting anyway.

"Optical AWL" is the older standard, which I termed "version 1". NX obviously is prepared for "version 2" (my term, Nikon might call it "Radio AWL"), as Groups D, E, and F have their own columns. As I mentioned, I only have third party triggers using that newer standard, and those columns always stayed empty, I guess I'll have to accept, that the settings from those third party devices just don't make it into Exif.

I still don't have a clue what Nikon means by "Camera EV/Speedlight EV". As it seems to be linked to the groups, it might be related to the newer AWL standard.

Also, your are right, balancing mode indeed doesn't seem to be reflected anywhere in NX either. So it's a good thing, that I never used that.

Regarding Exif.NikonFl7.FlashFocalLength and .FlashZoomHeadPositionM: these data don't seem to be always accurate, unfortunately. Studio flashes don't have a "ZoomHeadPosition", but some (random?) values is recorded anyway. Maybe it's not worth spending too much time on this.

The diffusion dome is mentioned in NX output for 6344. There is also "bounce flash". Specially with the dome, there is no obvious indication how the flash device can detect that thing, but the values seem to be accurate. It should be easier for the flash to find out, if I pulled out the wide screen or the bounce card. The values for the wide screen seem accurate always, but that of the bounce card feels more random. I do know that the angle the flash head is tilted does change the flash' behavior regarding the illumination patterns. But as I explained before, that is some Nikon heuristic which is quite daring and often (specially with off camera flashes) useless. The bottom line is, that I've got the impression, that exiv2 already does what can be done.

The images around 6358 where to record the different flash modes. "Flash off" is one of those modes, meant to disable the flash. So "(6)" actually seems to indicate that mode. NX uses this as a context switch, suppressing the output of any other values regarding this flash, which of course makes sense. If exiv2 can interpret those other values in dependency of this one, setting them to n/a is the right thing to do.

@postscript-dev
Copy link
Collaborator

postscript-dev commented Jan 24, 2022

Sorry for the delay in replying.

I had a look at the NX output. There are many columns, so I tried to open it in a spread sheet, but there seem to be some tabs missing, as the columns get mixed up in the right half. It has been interesting anyway.

You are right about the columns. I have now used a better method to create the NX Studio output and the corrected file is in NX_Studio_full-1.txt.

"Optical AWL" is the older standard, which I termed "version 1". NX obviously is prepared for "version 2" (my term, Nikon might call it "Radio AWL"), as Groups D, E, and F have their own columns. As I mentioned, I only have third party triggers using that newer standard, and those columns always stayed empty, I guess I'll have to accept, that the settings from those third party devices just don't make it into Exif.

Perhaps the instruction manuals for your flashes can help explain which standards they support.

After reading your comment about Groups D/E/F, it reminded me that there are a lot of 0 values in the NikonFl7 group that I couldn't account for. The extra groups do help explain some of the unknown values.

I still don't have a clue what Nikon means by "Camera EV/Speedlight EV". As it seems to be linked to the groups, it might be related to the newer AWL standard.

In NX Studio, the D7100 doesn't display this information so there is a camera standard involved. NX Studio's M/A/B/C speedlight value is that 'groups' flash contribution to it's overall 'group' output (e.g., _DSC6294 and _DSC6295). This value is what you set in the SB-910 GUI. NX Studio's M/A/B/C camera value is the effect of the camera settings on the overall 'group' output. NX Studio's M/A/B/C value outside of the brackets is the overall output for that 'group'.
Additionally, the camera value seems a little more complicated to explain. So far, in _DSC6360 to _DSC6362,

camera = Exif.NikonFl7.CameraExposureCompensation + Exif.NikonFl7.CameraFVCompensation

However in _DSC6359, perhaps due to Exposure Comp.: Background only, the value is the same as Exif.NikonFl7.CameraFVCompensation (see Exposure Comp. setting). At the moment, I can't tell if these formulas are reliable. Does this seem reasonable? If I had more examples with sightly different values, then I might be able to confirm this. Perhaps you could also include non-0.0EV M/A flashes in the examples.

Regarding Exif.NikonFl7.FlashFocalLength and .FlashZoomHeadPositionM: these data don't seem to be always accurate, unfortunately. Studio flashes don't have a "ZoomHeadPosition", but some (random?) values is recorded anyway. Maybe it's not worth spending too much time on this.

Exif.NikonFl7.FlashZoomHeadPositionM seems consistent with the length part of NX Studio's Zoom Position. I did look again at Exif.NikonFl7.FlashFocalLength but didn't see anything helpful. In ExifTool's FlashInfo0107, there is a reference to the tag only applying if Standard illumination is used. If you want to try a couple of examples with this, then record the zoom values and I will take a look.

If you are still interested in looking at the Bracketing and FV lock tags then this is something that we can investigate.

@cris46
Copy link

cris46 commented Jan 29, 2022

I do know the standards supported by my flashes. I also know how to operate the remote triggers, which are third party products. It's less obvious however, what those triggers will communicate to the camera and how that is being translated into the exif data.

The D7100 is older than the newer Nikon standard; by then, only three groups and the master where supported. Thus, it's no surprise that the exif data won't have codes for the other groups. The third party flash triggers are able to push most information into the exif data. But it seems that the newer standard (with newer 3rd party triggers) are less successful.

Files 6294 and 6295 are from the D850, not the D7100.

Also the SB-910 flashes are older that the standard with the additional groups. The settings you where talking about are done in the master. The 910 can act as a master, and I did use it as such for some of the sample files, as indicated. In this configuration of course, there is no way to get the additional groups, this is completely the original standard. However, as said, I normally use the third party triggers which do support additional groups. If I set the camera to manual flash (and the flashes as remotes), those triggers will receive only the impulse to fire at the right moment. But using some TTL mode, there is a lot of communication going on between the camera and the trigger, which makes the camera believe it is one of Nikon's products.

As said this works just fine with the older standard, but even the newer triggers didn't seem to manage pushing anything about the additional groups to the exif data. Not sure, if you can understand this; it would be a lot easier watching this...

Regarding the formulas: Above all it's important to remember, that any kind of compensation is void once in manual mode. These compensations are to bias what ever the camera's computations will give. In manual mode there are no such calculations, hence, there can't be a bias to them. Nevertheless, even in manual mode the compensation values are set in the exif data. As I showed in another context, there are good chances that those values just are kept within the camera from the last time before they where relevant.

The camera's exposure values didn't match my settings. However, they don't really fit into the flash context. They should come within the regular tags where they usually are accurate. Flash compensations OTOH seem to be correct.

Regarding the flash zoom: Nikon stuffed a lot of "intelligence" into the management of the zoom, including those illumination patterns, resulting in one glorious mess. I'm sure Nikon does understand it, but I don't. So I just ignore them all together and set them manually. As I wrote, before, the values simply didn't match my settings.

Just to be clear about this: I'm blaming Nikon for these things. Even on the display of the camera, the data of the flash don't match always. I do believe that your output is correct. If the exif data are wrong, there's little you can do about it.

Maybe we can wrap this up. It would be interesting if another user could contribute files with different devices, specially of the newer generation, but until then, I think you have added a lot of new and useful information.

@postscript-dev
Copy link
Collaborator

postscript-dev commented Jan 31, 2022

As said this works just fine with the older standard, but even the newer triggers didn't seem to manage pushing anything about the additional groups to the exif data. Not sure, if you can understand this; it would be a lot easier watching this...

After reading your comments and re-reading old posts, I think that I understand this now. It has been difficult investigating the tags, as I have no experience with the hardware and cannot experiment with it either. Thanks for explaining.

I don't have an answer to your hardware problems, just general advice.

  1. Check that all hardware contains the latest firmware version. If a new version exists, it may contain a fix.
  2. Search online to see if someone else has had the same problem. A good place to start, if it exists, is is the forum of the hardware manufacturer.

Regarding the formulas: Above all it's important to remember, that any kind of compensation is void once in manual mode.

This is a good point, I hadn't considered the manual mode case. I will update the tag to reflect this.

Maybe we can wrap this up. It would be interesting if another user could contribute files with different devices, specially of the newer generation, but until then, I think you have added a lot of new and useful information.

I agree, I have been thinking for a while that we could complete the existing tags and then finish. I will make the changes we have discussed and then ask Phil Harvey to take a look. He has much more experience adding tags and has access to other sample files which may help.

@postscript-dev
Copy link
Collaborator

@cris46:
Sorry for not posting earlier, this project is still important to me. I need to finish something else first, then I plan to return and submit my NikonFl7 work.

Since we last spoke, I thought of something. Although NX Studio is only available on Windows and macOS, you could try running it on Linux using WINE. The list of software compatible with WINE shows that NX Studio has bronze level support, which may be enough to display the metadata in your files. You can check that this works correctly by comparing NX Studio's metadata with the NX_Studio_full-1.txt file I posted above.

I don't use WINE myself, so I can't provide support for you. However, if you require it, WINE has a forum where you could ask for help.

postscript-dev added a commit to postscript-dev/exiv2 that referenced this issue Jul 7, 2022
postscript-dev added a commit to postscript-dev/exiv2 that referenced this issue Jul 7, 2022
postscript-dev added a commit to postscript-dev/exiv2 that referenced this issue Aug 26, 2022
@postscript-dev
Copy link
Collaborator

@cris46:
I am sorry for the delay, circumstances and other projects have taken up my time.

Some good news, when I looked at the NikonFl6 group, I realised that it was similar to NikonFl7. This meant that I could reuse some of my existing work to quickly add the NikonFl6 group. When looking at the group in more detail, I also realised that a couple of the new tags from NikonFl7 were also found in NikonFl6 and I have added them in.

I have now finished working on the PR and when I merge the code into the main branch, this issue will automatically close. As before, the new version or exiv2 will then be available tomorrow in the nightly builds.

Thanks for working with me on this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
makerNote Anything related to one of the various supported MakerNote formats prettyPrinter Anything related to the output formatting of a value request feature request or any other kind of wish
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants