exiv2 icon indicating copy to clipboard operation
exiv2 copied to clipboard

Add a decoder for Exif.Nikon3.FlashInfo

Open clanmills opened this issue 4 years ago • 70 comments

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.

clanmills avatar Oct 02 '21 07:10 clanmills

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.

postscript-dev avatar Oct 02 '21 15:10 postscript-dev

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 avatar Oct 02 '21 21:10 clanmills

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

clanmills avatar Oct 03 '21 09:10 clanmills

@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 avatar Oct 03 '21 10:10 clanmills

@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.

cris46 avatar Oct 04 '21 07:10 cris46

@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.

clanmills avatar Oct 04 '21 08:10 clanmills

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

cris46 avatar Oct 04 '21 09:10 cris46

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...

kmilos avatar Oct 04 '21 09:10 kmilos

@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.

clanmills avatar Oct 04 '21 10:10 clanmills

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.

cris46 avatar Oct 04 '21 10:10 cris46

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?

postscript-dev avatar Oct 04 '21 10:10 postscript-dev

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.

cris46 avatar Oct 04 '21 12:10 cris46

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 avatar Oct 04 '21 13:10 postscript-dev

@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.

clanmills avatar Oct 04 '21 16:10 clanmills

@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 avatar Oct 04 '21 20:10 cris46

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

cris46 avatar Oct 04 '21 20:10 cris46

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.

postscript-dev avatar Oct 14 '21 18:10 postscript-dev

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 avatar Oct 14 '21 20:10 cris46

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.

cris46 avatar Oct 15 '21 06:10 cris46

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.

clanmills avatar Oct 15 '21 06:10 clanmills

@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.

postscript-dev avatar Oct 15 '21 14:10 postscript-dev

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.

cris46 avatar Oct 15 '21 14:10 cris46

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 avatar Oct 23 '21 15:10 postscript-dev

First, I don't know the meaning of these 5 tags. Then I have some thoughts, the usefulness of which I also don't know. But here they go:

There may be some bytes reserved for a certain context, not being used in other contexts. And I'm not sure if those (then meaningless) bytes would be initialized to anything. I vaguely recall that I hit on such a suspicion last time.

I've used all combinations of settings withing the trigger at least once in those files. But:

TTL is an older idea which has been replaced by iTTL (Nikon) or eTTL (Canon). While TTL was unidirectional [camera->trigger-receiver(s)->flash(es)], iTTL is said to be bidirectional, i.e. also the same path backwards. I've never come across how this works in detail, but there should be such information around, as there are third party triggers around using it.

The trigger works no matter if it is actually mounted on the camera, or if there is actually a flash connected somewhere (although it is aware of both facts). When I generated those files I submitted in my previous messages, the trigger was indeed mounted on the camera, but there was no receiver or flash actually connected.

As said, I know very little about the backward flow of information. As a matter of fact, I have non-Nikon flashes which seem to behave just like the Nikon flashes, so I can't really see a difference in effect. But then, I also don't know if the flashes communicate with the camera, maybe even if the camera has no need for information (e.g., because everything is set to manual). If this would be the case, we might have a purpose for the bytes in those 5 tags.

The menu of the SB-910 flashes (the Nikon-branded flashes I have) is quite extensive, allowing for many exotic settings, even for triggering a stroboscopic light. So any menu setting of the flash potentially could be recorded in those bytes. Besides that, the SB-910 flashes are aware of some mechanical settings like the rotation or tilt of the flash heads, but also if a Nikon-branded color filter or diffuser is mounted on the flash head.

OTOH, the triggering configures only the power of the flashes and the zoom setting (position of the reflector within the flash to focus or broaden the light cone). So only these settings need to be the same for all flashes belonging to the same group (unless one is set to manual (*)). Everything else can be set differently in each flash, even if they are in the same group. So there might be three flashes configured for group A, but only one of them having a diffuser put on. I can't see a way that Nikon records so much detail in Exif, as this would require potentially a very large amount of data coming potentially from a hundred flashes. At the same time, I do remember that Mr. Harvey did discover some bytes regarding the diffuser and color filter settings (but I don't recall if that required to mount the flash directly on camera, without a trigger).

(*) The distinction between Manual and TTL is not only within the trigger (i.e, the information coming from the camera or a setting of the trigger). There is a similar but independent Manual or TTL setting in each flash: If the flash itself is set to manual, I can adjust the flash to anything I like. The receiver will only cause the flash to be triggered at a certain moment, but the power/zoom settings will be ignored by the flash. This is less comfortable, as I have to go to that flash (maybe climbing up to reach the flash), so I won't use such a setting unless I need more than 3 (or newer: 5) groups of power/zoom settings.

Trying to generate files with every thinkable combination of settings would generate a very large amount of sample files. For this reason, I think it would be more efficient, if you (@peter) could make a first guess, I'll shoot one or more files with those settings and we'll see where that leads us.

cris46 avatar Oct 23 '21 18:10 cris46

For anyone following this, there are copies of the instruction manuals online which may help. See Nikon D850 and Nikon Flash SB-900.

postscript-dev avatar Oct 25 '21 09:10 postscript-dev

@cris46: I am sorry for not working on this more, I have been busy.

If anyone is interested, I have inserted the .exv files into JPEGs, so that they can be used with NX Studio. You can find the version1 files here and version 2 files here.

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.

Today I looked at the Exif.NikonFl7.FlashGroupAData tag. It seems that there is not one universal measure, but each flash type (e.g. manual) has their own set of values (I only have manual and iTTL-BL sample files). I have made changes so that the output is the same as the NX Studio program. For example, now the version 1 files output:

$ exiv2 --Print kyvt --key Exif.NikonFl7.FlashGroupAData version1/*.exv
version1/_DSC6268.exv  Exif.NikonFl7.FlashGroupAData                Byte       42  1/128
version1/_DSC6269.exv  Exif.NikonFl7.FlashGroupAData                Byte       36  1/64
version1/_DSC6270.exv  Exif.NikonFl7.FlashGroupAData                Byte       30  1/32
version1/_DSC6271.exv  Exif.NikonFl7.FlashGroupAData                Byte       24  1/16
version1/_DSC6272.exv  Exif.NikonFl7.FlashGroupAData                Byte       18  1/8
version1/_DSC6273.exv  Exif.NikonFl7.FlashGroupAData                Byte       12  1/4
version1/_DSC6274.exv  Exif.NikonFl7.FlashGroupAData                Byte       6  1/2
version1/_DSC6275.exv  Exif.NikonFl7.FlashGroupAData                Byte       0  1/1
version1/_DSC6276.exv  Exif.NikonFl7.FlashGroupAData                Byte       254  +2.3EV
version1/_DSC6277.exv  Exif.NikonFl7.FlashGroupAData                Byte       248  +1.3EV
version1/_DSC6278.exv  Exif.NikonFl7.FlashGroupAData                Byte       242  +0.3EV
version1/_DSC6279.exv  Exif.NikonFl7.FlashGroupAData                Byte       2  -0.3EV
version1/_DSC6280.exv  Exif.NikonFl7.FlashGroupAData                Byte       8  -1.3EV
version1/_DSC6281.exv  Exif.NikonFl7.FlashGroupAData                Byte       14  -2.3EV
version1/_DSC6282.exv  Exif.NikonFl7.FlashGroupAData                Byte       14  -2.3EV
version1/_DSC6283.exv  Exif.NikonFl7.FlashGroupAData                Byte       14  -2.3EV

and version 2 files output:

$ exiv2 --Print kyvt --key Exif.NikonFl7.FlashGroupAData version2/*.exv
version2/_DSC6284.exv  Exif.NikonFl7.FlashGroupAData                Byte       18  1/8
version2/_DSC6285.exv  Exif.NikonFl7.FlashGroupAData                Byte       0  0EV
version2/_DSC6286.exv  Exif.NikonFl7.FlashGroupAData                Byte       0  0EV
version2/_DSC6287.exv  Exif.NikonFl7.FlashGroupAData                Byte       0  0EV
version2/_DSC6288.exv  Exif.NikonFl7.FlashGroupAData                Byte       15  1/4 (-1/2EV)

Note: Generally, the fractions are for manual and the EV for iTTL-BL.

There is one oddity though. NX Studio reports that the version1/_DSC6273.jpg value is 1/4 (exiv2 vanilla value 12) and that version2/_DSC6288.jpg is 1/4 (-1/2EV) (exiv2 vanilla value 15) - both using manual settings. This doesn't follow the +/-6 difference pattern used by the other sample files. Above, you did mention that the _DSC6288.exv file was different, although I am a little unclear how.

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

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).

What is the difference between 1/4 and 1/4 (-1/2EV)? Is the notation A M 1/4 +0.5 the same as 1/4 (-1/2EV)?

I will look at the Exif.NikonFl7.FlashGroupBData and Exif.NikonFl7.FlashGroupCData tags which are hopefully very similar to the Exif.NikonFl7.FlashGroupAData tag.

postscript-dev avatar Oct 30 '21 18:10 postscript-dev

In manual mode, you set the absolute value of the power a flash device is able to emit. If a flash can emit at most 500Ws (Watt seconds), 1/1 means that. And 1/4 would mean 125Ws. And if I buy a second flash with 2000Ws, at max it's just 2 stops (2 EV) brighter.

Then there is the EV (https://en.wikipedia.org/wiki/Exposure_value). This is a measure for differences: If one of two power settings produces the double or half of the physical energy of light regarding the other, the difference is called "one stop" or 1.0 EV (exposure values).

So the difference between 1/2 and 1/1 is perceived as the same change in brightness as the difference between 1/64 and 1/32. This is a logarithmic relation.

There is one amount of light which makes the sensors particularly happy (it's related to the middle gray). It's a physical amount of light, the "luminous exposure" measured in lx.s (lux seconds). This is proportional to a particular amount of photons arriving at the sensor during the time the shutter is open or the flash is emitting light. This happy amount is often called 0.0 EV, such that +12EV would be 12 stops brighter requiring 12 times doubling that lux seconds of 0.0 EV arriving at the sensor. The scale based on those 0EV is represented by table 1 in the wikipedia page. Each setting can be produced by a host of combinations of ISO, aperture and shutter. The units are the same as for the EVs of flash power differences. So if there is iTTL +2EV you can read this as 0.0EV + 2EV and compare that to the table in wikipedia. My guess is that "vanilla value 12" is on such a scale.

Note that flash power does not make any statement of how much light will reach the sensor. So one difference between manual and TTL-mode is, that manual refers to light as emitted by the flash, and TTL as light arriving at the sensor. There is much too little information even in the camera to convert one into the other.

So in 1/4 -1/2EV (or simple 1/4 -1/2), the first fraction is absolute and regarding physical power emitted by the flash. The second fraction is a relative measure in EV, i.e., related to the double (if positive) or half (if negative), each of which would represent the difference of 1EV (doubling or halfing) of the first fraction. 1/4 power plus 1 EV is 1/2 power, and 1/4 power minus 1 EV is 1/8th power. In these cases, of course, we'd use directly 1/2 or 1/8; the notation is only useful if it's a fraction of that.

Cameras can be adjusted to subdivide 1.0 EV in thirds or halves. This controls the sequence of settings which can be made turning the camera's dials. But more values can be produced by the automatic modes. Some triggers allow for subdivisions as fine as 1/10th of an EV. But this is somewhat virtual: First, there is no guarantee that the flash device does support such a setting (it might be "rounding"). And the same for the camera, which might not be able to register that or there might not be an encoding for Exif. So I can't know--if a flash trigger allows me to set 1/4 +4/10--what value would arrive at the flash or at the Exif file. I do know that some fine subdivisions of my flash triggers are not supported by my Metz flashes, which has a somewhat undefined behavior (sometimes "rounding", but not always).

Now I can answer your questions:

1/4 is the absolute light emitted by the flash device. You can express that in Ws as soon as you know that device.

1/4 -1/2EV means that there is a power setting causing an emission of light of that flash device which is between 1/4 and 1/8th of the maximum power that device is able to emit (because of the minus sign). The 1/2EV means, that it is perceived to be right in the middle between 1/8 and 1/4. As this is a logarithmic concept, it is not equal to 1/8 + 1/16 (0.1875).

"A M 1/4 +0.5" means group A in manual mode at a power setting which is perceived as right in the middle of 1/4 and 1/2 of the full power that flash device is able to emit.

1/4 -0.5 is not the same. It's between 1/8 and 1/4, or, it's one stop darker than 1/4 +0.5

"1/4 +0.5" and "1/2 -0.5" however are synonyms. This is like in music: d sharp and e flat is the same (although in some cases, there is a subtle difference in music, but never in light measures)

Finally: Yes, Group[ABCDEF]Data must be analogue to each other. These groups can be used freely, When triggering just one single light, I can use any group I want, as long as the Group settings of the transmitter and receiver match. It is just a lower hierarchy of the channel/ID settings (which would distinguish all groups and flashes for one camera/transmitter from another).

cris46 avatar Oct 30 '21 23:10 cris46

@cris46: Thanks for the help. Using your explanation, I have added intermediate values to the translated output for the Exif.NikonFl7.FlashGroupAData tag.

Manual mode:

Vanilla value Translated value
0 "1/1"
3 "1/1 (-1/2EV)"
6 "1/2"
9 "1/2 (-1/2EV)"
12 "1/4"
15 "1/4 (-1/2EV)"
18 "1/8"
21 "1/8 (-1/2EV)"
24 "1/16"
27 "1/16 (-1/2EV)"
30 "1/32"
33 "1/32 (-1/2EV)"
36 "1/64"
39 "1/64 (-1/2EV)"
42 "1/128"
45 "1/128 (-1/2EV)"

iTTL-BL mode:

Vanilla value Translated value
0 "0EV"
2 "-0.3EV"
4 "-0.6EV"
6 "-1EV"
8 "-1.3EV"
10 "-1.6EV"
12 "-2.0EV"
14 "-2.3EV"
242 "+0.3EV"
244 "+0.6EV"
246 "+1.0EV"
248 "+1.3EV"
250 "+1.6EV"
252 "+2.0EV"
254 "+2.3EV"

I think that the 2 tables cover all the available values but if there are translated values missing, let me know.

ExifTool also listed modes such as iTTL, Auto Aperture, Automatic, GN (distance priority) and Repeating Flash, but I don't have examples for those, so can only output percentages. It this is something that you want me to add, then I will need more example files (.exv). For a mode, I only require an example of the highest, lowest and, if available, zero'th value - also let me know what values and increments are used for that mode. I think that I can work out the rest if I have that information.

postscript-dev avatar Nov 02 '21 16:11 postscript-dev

In my previous explanation I tried to clarify things using the terms "absolute" and "relative". But also the "absolute" setting is actually relative, because 100% power doesn't say how much power is indeed emitted. So strictly, both are relative but refer to a different thing:

What I called "absolute" is actually relative to the power the device is able to emit. As the flash can be closer of further away from the subject, this doesn't tell how much light will be reflected from the subject and how much would reach the camera's sensor.

What I called "relative" is relative to an optimal lighting the camera has computed by measuring some pre-flashes through the lens (TTL). A setting perfectly aligned with that computation would be 0EV, a setting of -n EV would make that darker than "ideal" and +n EV lighter. This is "more" relative, because it depends on a varying value computed by the camera, while the previous refers to a maximum power which is not variable.

One thing to remember is, that doubling or halving any amount of light (be it emitted by a light source or measured as reaching the sensor) is called "one stop" or 1.0 EV, depending on context. This is a very important concept, as such stops also exist in the context of ISO, aperture and shutter timing. They are interchangeable, as I can open the aperture one stop and reduce flash power by one stop and would get the same final brightness. For all of them, Nikon internally uses a subdivision of 1/6th of "one stop" (or of one EV):

n-stop, 1/6, 1/3, 1/2, 2/3, 5/6 next-stop...

[I am sure this is accurate for the older version, but I guess it's also accurate for the newer one. If the other flash is able to adjust in subdivisions of 1/10th of a stop, it's a thing limited to the communication between trigger and compatible flash, but the camera and Exif-file probably would get just a rounded value.]

So you can make a scale and simply number each possible setting. Nikon starts numbering with zero (like an offset from a starting point rather than a count). In order to leave integers for subdividing settings, there need to be 5 integers reserved between one stop and the next. And this is how Nikon encodes these values: 0 is the highest power value, 6 is one stop below, 12 is two stops below, etc. As you can measure a distance of 10 inches and 1/2 or 11 inches minus 1/2 (referring to the same absolute distance), 2 stops and 1/3 (of a stop) is the same setting than 3 stops minus 2/3 (of a stop). You chose to use the minus variant, which is perfectly fine. The devices used the plus or minus variants depending on the last change.

The table for the manual mode is correct, but all integers exist. It depends on the UI settings of the device if I can select thirds or halves, but that's just the UI. I can always change that to get another subdivision, and that wouldn't change the encoding (which can deal with both as it is based on 1/6ths). There is no way to dial in 1/6 or 5/6 between two stops however. The difference of 1/6th of a stop is very little. So if I usually work in 1/3 subdivisions, I would accept 1/3 even if 1/2 would be (very slightly) better. OTOH, if the setting wasn't dialed in but chosen by the camera in some automatic mode, any 1/6th subdivision is possible to show up in Exif.

This is the reason, why the "vanilla value" of 0 is actually to be expected.

The values in the TTL table also look correct, but I would assume that the high nibble is just the sign. If these values come from the sample files, that sign is inverted: 0xf0 would mean positive and 0x00 negative (are you sure?). Then, you get the same scale as before with the only difference that the reference is in the middle of - and +: While the manual mode represents a fraction of the maximum power, where the maximum power is 100% (1/1), and there can't be more than that, such that the full stops are always +0, +6, +12…, in TTL mode 0 means the mathematically perfect setting as computed by the camera. This setting can be adjusted increasing or decreasing the brightness in the scene, such that you get full stops at …, -12, -6, 0, +6, +12…. But the intermediate values can again be added or subtracted: Logically, there could be a "+1EV +1/2" which is the same as "+2EV -1/2". The first number would tell how far this setting defers from the camera's computation, and the second how far that is between two full stops. Device displays (specially the viewfinder of the camera) have little space, so they often replace the second fraction by .3 for 1/3 and .7 for 2/3, and of course .5 for 1/2.

Regarding the additional modes: I'm not really sure how these work. These modes can only be set on the flash itself, not on the trigger nor the camera. But even if there are only 3 (or 5) groups, there can be many flashes belonging to each of those groups. Potentially there could be hundreds of flashes fireing at the same time. But Exif doesn't provide the tags for so many flashes. Maybe this is only when (exactly) one flash is mounted on the camera. Would this make sense?

Normally I use the flashes off camera (i.e., fired by a remote trigger), and normally, they are set to TTL mode, meaning that they take the setting from the electronic contacts on it's foot, believing it is mounted on the camera, while in fact it is mounted on a receiver. In the (rare) cases I need more different setting than available groups (as all members of a group receive the same adjustments), I can set two (or more) flashes to the same group to manual, in order to adjust the power for them individually.

Caveat: There is a difference between manual in the trigger and manual in the flash: Manual in the flash means, that the flash will fire when receiving the signal, but ignoring all external settings. Manual in the trigger means, that the setting sent to the receiver comes either from the user or from the camera. But if the flash is set to manual, the manual or TTL setting in the trigger won't have any effect on the flash. While the manual/TTL setting of the trigger is per group, the manual/TTL (etc) settings for the flash is per flash device, of which there can be many in each group.

Setting the flash to TTL can mean iTTL or "iTTL BL" likewise; it's the camera which considers the information received by the lens (iTTL) and the intensity of ambient light (BL=balanced) picking those sub-modes always automatically. I've never used the other modes (besides manual and repeating flash), but I would guess that Automatic and Auto Aperture are just variations of TTL, while GN is a variation of manual (setting a distance rather than a power level). Maybe you can tell me some context where these values appear in the Exif file (single on-camera flash? group related?), then I could make some tests to see if I find out how to use it.

What complicates understanding the different TTL modes is that between Nikon products, there is also a two-way communication between the flashes and the camera. There are pre-flashes emitting light which the camera can measure, but there are also codes transmitting binary data, as each flash also has sensors and a lot of logic to find out circumstances in it's environment. But I don't know the protocols this is based on. This is also a reason why I avoid certain modes, as they just yield a surprising result, which changes with small changes in the scene without me noticing.

The last mode is the "repeating flash". This is stroboscopic light, defined by a number of flash lights emitted and a frequency (time between one light and the next). This is the only other mode I've used (very rarely). There are some severe limitations, as flashes require time to recharge the capacitor, thus, the more flashes are fired, the less power each can emit. I can make a few test shots (exv files) this weekend.

cris46 avatar Nov 03 '21 01:11 cris46

I was planning on working on the tags last week, but I had problems with my computer which took several days to fix.

@cris46: The existing tags that ExifTool defined have now been merged into Exiv2. When we release the next version of the library, those tags will be available for darktable to use.

You chose to use the minus variant, which is perfectly fine. The devices used the plus or minus variants depending on the last change.

I used the output from NX Studio. If you provide a sample using a positive variant, then I can check if a different vanilla value is stored. If the two settings are equivalent though, the same vanilla value may be used and it is up to the software to decide whether to display the positive or negative version.

The values in the TTL table also look correct, but I would assume that the high nibble is just the sign. If these values come from the sample files, that sign is inverted: 0xf0 would mean positive and 0x00 negative (are you sure?)

Using the samples you provided, NX Studio outputs:

Filename Vanilla Exif.NikonFl7.FlashGroupAData NX Studio output
version1/_DSC6278.exv 242 "+0.3EV"
version1/_DSC6277.exv 248 "+1.3EV"
version1/_DSC6276.exv 254 "+2.3EV"

The signed nibble looks correct. I noticed that the n.6 translated entries are better rounded to n.7, so I will update the iTTL-BL mode table accordingly.

postscript-dev avatar Nov 08 '21 15:11 postscript-dev