-
Notifications
You must be signed in to change notification settings - Fork 282
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
Comments
I had a look at Exiftool's website and the Nikon tags are listed here and the pretty printing here (both found under As we don't know Christoph's camera model and don't having a sample image, it is unlikely that we can proceed. |
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. |
The architecture of tag decoding is discussed in my book in 7.7 Tag Decoder https://exiv2.org/book/#7-7 |
@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). |
@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 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 @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. |
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 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. |
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 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. |
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. |
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.
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? |
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 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. |
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 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. |
@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. |
Here is a file from the D7100. |
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 Now when using the exiv2 tool with your test file, you will see:
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. |
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. 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: (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. |
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: (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. |
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: Thanks for the kind words.
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. |
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. |
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
Unfortunately in all the files supplied, of those 5 tags, the following ones always have the same value.
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
I have only started looking at this and will post updates if I make some progress or have questions. |
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.
Exiv2 already has a tag called
I will change the
NX Studio identifies the flash as:
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 In _DSC6333.exv, for the first time
This value is found in |
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. 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. |
I have converted the hss.tar.gz .exv files to JPEGs. They can be found in hss_JPEG-versions.zip
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. |
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. 6340 uses the bounce card in manual mode (plastic card pulled out) 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) 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. |
Thanks for providing the files. I have converted the .exv files in flashacc.tar.gz to JPEGs in flashacc_JPEG-versions.zip.
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
I tried files _DSC6346 to _DSC6348 and Exiv2 now seems to identify illumination patterns correctly.
Although the D7100 stores the data in a
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 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. |
This looks good. I'll provide the other sample files, however it'll take a few days. Sometimes the day job claims priority. |
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.
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. |
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:
Using Group A as an example, the following tags can be used to change the metadata.
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 For completeness, if using manual mode (e.g., with version_awl/_DSC6297.jpg), NX Studio outputs:
Now that I understand this more, I don't think that we need these sample photos after all.
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 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. |
OK. I'll try to fine tune this a bit, but your aren't that much off, inspite of the many comments...
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:
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).
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.
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).
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.
If you (or NX) mean by value the EV-number, this is a compensation. As said, that should be zero in any manual mode.
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.
OK.
I guess, you're talking about the one that escaped the tar ball last time. Here it is:
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. |
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.
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.
For
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:
There are lots of things available but I don't know which is most useful to you. |
I've added three files: 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?
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.
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") 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). |
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.
I looked at the compen.tar.gz files and in NX Studio they all displayed:
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 I don't have more time to look at this now, but will come back to it later in the week. |
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? 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. |
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.
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 While looking at the new moremodes.tar.gz files, I found:
There is another possible EV value in
This worked as predicted and
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. |
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:
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:
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:
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 |
@cris46: I haven't read all you post yet, as it will take time to go through.
$ ~/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
In Linux, by default, the current directory is not included in the search path (for security reasons). e.g., If in the
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
This works differently for unknown tags. To save space, a group of unknown tags are listed together under the first entry. e.g.,
In this case,
If you look into the conditions then I will update the tag.
I will leave you to investigate
There are several loose ends like this. I will get round to tidying up the values.
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
I will look at the rest of your post later in the week, I need to finish something else first. |
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
I planned to rename the tags before submitting the code.
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.
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.
As I have mentioned before, I don't understand
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.
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
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.
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 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
For flashmodes/_DSC6358.jpg, the NX Studio flash settings are empty. In Exiv2, It is worth knowing, that a translated value containing brackets means that Exiv2 did not know how to translate the value (e.g.,
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.
I can't find the _DSC6320.exv file.
If you provide examples then I will take a look.
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 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.
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. |
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. |
Sorry for the delay in replying.
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.
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
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'. camera = However in _DSC6359, perhaps due to
If you are still interested in looking at the Bracketing and FV lock tags then this is something that we can investigate. |
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. |
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.
This is a good point, I hadn't considered the manual mode case. I will update the tag to reflect this.
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. |
@cris46: 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. |
@cris46: Some good news, when I looked at the I have now finished working on the PR and when I merge the code into the Thanks for working with me on this. |
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:
We don’t decode it. Here’s an example with my D5300:
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#FlashInfo0106I 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.
The text was updated successfully, but these errors were encountered: