Magic Lantern Forum

Developing Magic Lantern => Scripting Corner => Topic started by: garry23 on March 06, 2016, 10:01:20 AM

Title: EOS-M for the Landscape Photographers
Post by: garry23 on March 06, 2016, 10:01:20 AM
Many are drawn to the EOS-M because of the ML-enhanced videography: I am not one of those :)

As a photographer I was attracted to the EOS-M, because I missed ML when I brought my first mirrorless, an A6000, and, after years with ML on my 5D3 and IR-converted 50D, I simply wanted ML on a mirrorless. So last week I grabbed a used EOS-M and M-2-EF adapter on ebay.

The EOS-M, with it's 18-55mm kit lens is a great package. My first 'add-on' was an Neweer grip, which greatly helps with handling the EOS-M.

The real 'downside' of the EOS-M, however, is the lack of buttons. Like many photographers, we get used to our buttons and we know their position instinctively. Our workflow is button-base, eg back-button focus and ML-ETTR via the SET button etc.

In addition to lacking the buttons, the EOS-M, because of its touch screen UI, brings in other 'complication', eg the touch screen and various 'missing' ML features. For example, the ML EOS-M version doesn't allow one to ETTR from the SET button. Also, you can not have ML ETTR (double half shutter) and ML Advanced bracketing on at the same time, so you are forced to keep going into the ML menu to change ML features: which on the EOS-M can be fiddly.

Because of the above, I have written a Lua 'helper script', specifically aimed at the EOS-M landscape photographer, that I hope some EOS-M users may get value out of, and use as a basis for your own 'personalisation', eg the 'ML feature toggler idea'.

The usual caveats apply, eg: it works for me; you use it at you own risk etc etc.

In addition, I have only tested it with all the Lua demo scripts removed, and you are advised to do this. That is, I haven't tested script-2-script (in)compatibility.

Once you put the script in the ML script folder, the script will start up automatically on camera start up. NOTE: once running you will lose the Main Dial's top toggle functionality. To get this back to normal, switch off the script under the ML Shoot Menu.

NOTE also that the EOS-M (nothing to do with my script) suffers from a 'feature' that means the shutter can fail to work sometimes. If you get this, simply switch the camera off and on quickly.

The script provides two coloured feedback areas that appear in the top ML bar on the right. When you first switch your camera on you will see one of these, a blue rectangle with "off" showing, which tells you the script is running, but that none of the script functionality is in use.

To use the script simply use the Main Dial top-toggle. Each time you toggle the top of the Main Dial the blue rectangle will show you are accessing a different ML extended functionality, eg ML ETTR or ML bracketing. In addition, for my workflow, I have added in a dark-image feature (yes I know I could put my hand in front of the camera).

As soon as you take your first image, the second area of the script feedback comes into being. This is the area that gives you visual info for focus stacking in landscape mode. As with the bracketing and ETTR functionality, make sure you have all the ML settings to you liking, eg I use these setting: all SNR ETTRs setting to zero, DoF diffraction aware on and Advanced bracketing to Auto etc etc (you decide what you want).

As an example workflow, consider a focus (lens must report focus) bracket capture session:

1.Ensure all ML background settings are correct, eg ETTR, DoF, Bracketing.
2.Press the Main Dial top toggle until you see "ETTR" in the Blue Box.
3.Do a double half shutter press to get a starting ETTR exposure and adjust as you see fit, eg using the ML Histo Bar (which I always have in ETTR Hint mode.
4.Fine compose (and ETTR again if required) and focus on the closest thing that you need for your capture, eg using the EOS-M touch focus functionality.
5.Toggle through the top of the Main Dial until you see "-BE" (for dark BookEnd) and grab an image.
6.Toggle to "+BE" to return to the correct exposure and grab your first image. This will show a yellow box to the left of the blue box, telling you that your next image needs to be taken more towards the infinity end.
7.Focus the lens towards the infinity end until you see either a green or red box. Green means take a picture, red means back off to 'just' yellow, ie you may not always get a green. The green 'tolerance' can be adjusted in the script's menu and provides an indication of positive overlap, ie the default is 20%.
8.Take another image and repeat 7 until you see INF in the left hand box, which means that DoF Far is at infinity, Consider taking an insurance shot beyond this, eg focus at infinity.
9.Toggle to "-BE" and take another bookend image. You now have a focus bracket set with two dark frames as bookends to help you identify these in post processing.

If you wanted to also take a set of exposure brackets at each focus point, you simple toggle over until you see "Auto" and press the shutter to grab an ML auto bracket set (or a numbered bracket set if you set that option). Note you should consider toggling to the "-BE" to insert a dark frame between the exposure brackets. I also put two dark frames at the beginning and end of a focus/exposure set, to differentiate this complex set in post.

As I say, I wrote this script for my workflow, and the EOS-M ML-enhanced mirrorless camera for landscape photography. The EOS-M, with a few batteries, the lens adapter and a small tripod, represents the lowest weight I can imagine in the field.

Finally, here is the script (modified 7th March 2016):

--[[
Manual Landscape bracketing helper script
Version 0.1.0 for EOS-M
Garry George March 2016
http://photography.grayheron.net/
Workflow helper script for focus and exposure bracketing for the EOS-M
Toggle through the workflow using the top of the main dial.
Yellow means move more towards the infinity end, Red means move more towards macro end,
Green means at the sweet spot. If Green not seen, move to just being in the Yellow from being in the Red.
--]]
factor = 0.2
b1 = lens.dof_far
fp = lens.focal_distance
c1 = b1 - (b1 - fp*10)*factor
inf = 1000000
started = false
current_tv = 0
play = 0

event.keypress = function(key)
if keymenu.submenu["Turn On/Off"].value == "Off" then
started = false
return true
elseif key == 12
then
play = play + 1
if play == 5 then play = 0 end
return false
elseif key == KEY.FULLSHUTTER
then
b1 = lens.dof_far -- in mm
fp = lens.focal_distance -- in cm
c1 = b1 - (b1 - fp*10)*factor
started = true
return true
end
end

lv.info
{
    name = "Info 1",
    value = "",
    priority = 100,
    update = function(this)
    this.value = ""
    if keymenu.submenu["Turn On/Off"].value == "On" and started and fp ~= 0
    then
this.foreground = COLOR.BLACK
a2 = lens.dof_near
if a2 > b1 then
this.background = COLOR.RED
elseif a2 < c1 then
this.background = COLOR.YELLOW
else
this.background = COLOR.GREEN1
end
if lens.dof_far >= inf then
this.value = "INF"
else
this.value = "   "
end
else
this.value = ""
end
end
}

lv.info
{
    name = "Info 2",
    priority = 100,
    value = "",
    update = function(this)
    if keymenu.submenu["Turn On/Off"].value == "On" then
    i = menu.set("Shoot","Advanced Bracket",0)
i = menu.set("Expo","Auto ETTR",0)
this.foreground = COLOR.YELLOW
this.background = COLOR.BLUE
if keymenu.submenu["Turn On/Off"].value == "On" then
if play == 0 then
current_tv = camera.shutter.ms
this.value = " Off"
elseif play == 1 then
this.value = "-BE "
camera.shutter.ms = 1
i = menu.set("Shoot","Advanced Bracket",0)
elseif play == 2 then
this.value = "BE+ "
camera.shutter.ms = current_tv
elseif play == 3 then
this.value = "ETTR"
i = menu.set("Expo","Auto ETTR",1)
i = menu.set("Auto ETTR","Trigger mode",3)
elseif play == 4 then
this.value = "Auto"
i = menu.set("Shoot","Advanced Bracket",1)
else
this.value = ""
end
end
end
end
}

keymenu = menu.new
{
parent = "Shoot",
name = "Landscape Helper",
help = "Toggle through workflow using top of main dial",
help2 = "Grab exposure or take picture as required",
submenu =
{
{
name = "Turn On/Off",
help = "Switches the script on/off",
help2 = "Simply enables additional button functionality",
choices = {"On","Off"},
},
{
name = "Bracket to bracket overlap",
help = "Amount to overlap each bracket",
help2 = "% of FP-2-DoF(far) distance",
choices = {"20","10", "5"},
update = function(this)
factor = tonumber(keymenu.submenu["Bracket to bracket overlap"].value)/100
end,
}
}
}


Title: Re: EOS-M for the Landscape Photographers
Post by: DeafEyeJedi on March 09, 2016, 06:11:26 PM
Thanks for sharing @garry23 and will most likely give this script a shot this weekend. Hopefully others will chime in as well! [emoji2]
Title: Re: EOS-M for the Landscape Photographers
Post by: garry23 on March 09, 2016, 10:15:13 PM
@DEJ

I really would welcome you testing out the script. As I said, I wrote it as a stills photographer: I don't do videography.

I've tweaked the script (see below), so the ML toggler part of the script, now sequences through the following states (assuming you have set the base condition of each, eg ETTR, to your liking, eg I set SNRs to zero:
Off = no ETTR, no Dual, no Auto Bracketing
BE = Bookend, ie a dark frame is set
Off = as above
ETTR = switches the ML ETTR on (I use double half press)
Auto = switches ETTR off and Auto Bracketing on
Dual = switches ETTR and Auto Bracketing off and Dual-ISO on
Off = back to the sequencing start.

When you take your first image, the focus helper comes on, indicating what you need to do to move focus towards infinity, ie this is used when focus stacking.

Finally the sequencer part of the script can be extended, ie adding other functionality, eg to switch on and off other ML menu items, thus saving having to keep going into the ML menu. The sequencing arrangement should follow your workflow.

As I say, I really would welcome some other EOS-M users testing it out for functionality and use.

Cheers

Garry

--[[
Manual Landscape bracketing helper script
Version 0.1.0 for EOS-M
Garry George March 2016
http://photography.grayheron.net/
Workflow helper script for focus and exposure bracketing for the EOS-M
Toggle through the workflow using the top of the main dial.
Yellow means move more towards the infinity end, Red means move more towards macro end,
Green means at the sweet spot. If Green not seen, move to just being in the Yellow from being in the Red.
--]]
factor = 0.2
b1 = lens.dof_far
fp = lens.focal_distance
c1 = b1 - (b1 - fp*10)*factor
inf = 1000000
started = false
current_tv = 0
play = 0

event.keypress = function(key)
if keymenu.submenu["Turn On/Off"].value == "Off" then
started = false
return true
elseif key == 12
then
play = play + 1
if play == 6 then play = 0 end
return false
elseif key == KEY.FULLSHUTTER
then
b1 = lens.dof_far -- in mm
fp = lens.focal_distance -- in cm
c1 = b1 - (b1 - fp*10)*factor
started = true
return true
end
end

lv.info
{
    name = "Info 1",
    value = "",
    priority = 100,
    update = function(this)
    this.value = ""
    if keymenu.submenu["Turn On/Off"].value == "On" and started and fp ~= 0
    then
this.foreground = COLOR.BLACK
a2 = lens.dof_near
if a2 > b1 then
this.background = COLOR.RED
elseif a2 < c1 then
this.background = COLOR.YELLOW
else
this.background = COLOR.GREEN1
end
if lens.dof_far >= inf then
this.value = "INF"
else
this.value = "   "
end
else
this.value = ""
end
end
}

lv.info
{
    name = "Info 2",
    priority = 100,
    value = "",
    update = function(this)
    if keymenu.submenu["Turn On/Off"].value == "On" then
    i = menu.set("Shoot","Advanced Bracket",0)
i = menu.set("Expo","Auto ETTR",0)
i = menu.set("Expo","Dual ISO",0)
this.foreground = COLOR.YELLOW
this.background = COLOR.BLUE
if keymenu.submenu["Turn On/Off"].value == "On" then
if play == 0 then
current_tv = camera.shutter.ms
this.value = " Off"
elseif play == 1 then
this.value = " BE "
camera.shutter.ms = 1
i = menu.set("Shoot","Advanced Bracket",0)
elseif play == 2 then
this.value = " Off"
camera.shutter.ms = current_tv
elseif play == 3 then
this.value = "ETTR"
i = menu.set("Expo","Auto ETTR",1)
i = menu.set("Auto ETTR","Trigger mode",3)
elseif play == 4 then
this.value = "Auto"
i = menu.set("Shoot","Advanced Bracket",1)
elseif play == 5 then
this.value = "Dual"
i = menu.set("Expo","Dual ISO",1)
else
this.value = ""
end
end
end
end
}

keymenu = menu.new
{
parent = "Shoot",
name = "Landscape Helper",
help = "Toggle through workflow using top of main dial",
help2 = "Grab exposure or take picture as required",
submenu =
{
{
name = "Turn On/Off",
help = "Switches the script on/off",
help2 = "Simply enables additional button functionality",
choices = {"On","Off"},
},
{
name = "Bracket to bracket overlap",
help = "Amount to overlap each bracket",
help2 = "% of FP-2-DoF(far) distance",
choices = {"20","10", "5"},
update = function(this)
factor = tonumber(keymenu.submenu["Bracket to bracket overlap"].value)/100
end,
}
}
}
Title: Re: EOS-M for the Landscape Photographers
Post by: dfort on January 10, 2017, 10:31:07 PM
Quote from: garry23 on March 06, 2016, 10:01:20 AM
...Our workflow is button-base, eg back-button focus...

Hi Garry -- I started out reading your FRSP post (http://www.magiclantern.fm/forum/index.php?topic=18655.0) so I thought I'd revisit that mode on the EOSM which got me to looking up back-button focus because it works better with the "silent.mo" module and came upon this post.

You probably already know this but to turn on back-button focus go into the Custom Functions(C.Fn) Canon menu and set C.FnIV:Operation/Others [5] Shutter/AE lock button to 1:AE lock/AF. That will turn the left wheel a.k.a. asterisk (*) into the back-button focus. I also had to Disable Continuous AF, that's probably obvious but if it is on it will sometimes trigger a half-shutter event and shoot a silent DNG frame while focusing.

Oh and yeah, that shutter-bug "feature" you mentioned. It only affects EF-M zoom lenses and some cards don't exhibit the shutter-bug at all. I've been using SanDisk Extreme Pro 32GB cards for so long that I almost forgot about that bug. Note these same cards over 32GB will show the shutter-bug. No EF-M zoom lens, no shutter-bug. More information on the bug report page:

https://bitbucket.org/hudson/magic-lantern/issues/1893/eos-m-shutter-bug
Title: Re: EOS-M for the Landscape Photographers
Post by: garry23 on January 10, 2017, 10:44:09 PM
Dan

Yes, the BBF is the first thing I set up on a camera, and, as you say, BBF on the EOSM can be set up: sort of.

BTW I just bought a 2nd EOSM, in mint condition, with 6000 shutter actions, for 58GBP!!!!! A bargain.

I think the EOSM is a real star.

I looking to use my EOSMs for timelapse. It seems a 'pity' at the moment I can't seem to get shutter value record recorded in a FRSP DNG or MVL file. The ISO seems to record, but the Tv always says 1s. I'm not worried about the lack of recorded aperture or FL, I can fix these in post, using LensTagger in LR.

If only the FRSP DNGs recorded the shutter as well as the ISO, I could do holy grail via ETTR (I think). Does ETTR work with FRSP? I must check ;-)

Cheers

Garry