ML Toggler Script for Still Photography

Started by garry23, March 19, 2016, 08:08:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

garry23

The following script has been written for still photographers who want easy access to: landscape focus bracketing, exposure bracketing, dual-ISO, ETTR and Full Res Silent Picture.

The power of the script is 'The Toggler' concept, that allows one-button access to the above, ie without going into the ML menu.

I have written a little about The Toggler on my blog: http://photography.grayheron.net/2016/03/silent-toggler.html

To get the full value you need a lens that reports focus distance. I have tested the script on a 5D3, an EOSM and with Canon and Sigma lenses.

Here is the script:

--[[
Still photography toggler script
Version 1.0 (should work on all ML enabled cameras with the Lua module)
Garry George March 2016
http://photography.grayheron.net/
Workflow toggler script to help with focus and exposure setting.
Toggle through your workflow using the selected option ie a button or the top of the main dial or toggle switch.
For focus feedback 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
toggler = 0
-- Change toggler value to your choice of button, eg KEY.RATE, KEY.UP, KEY.INFO or KEY.PLAY.
-- See http://davidmilligan.github.io/ml-lua/modules/constants.html for key constants
-- Default is KEY.RATE for non-EOSM cameras. EOSM self selects upper toggle on main dial as the EOSM doesn't have many buttons!
if camera.model_short == "EOSM" then toggler = KEY.UP else toggler = KEY.RATE end

event.keypress = function(key)
if keymenu.submenu["Turn On/Off"].value == "Off" then
started = false
return true
elseif key == toggler 
then
play = play + 1
if play == 7 then play = 0 end
return false
elseif key == KEY.FULLSHUTTER and play ~= 6
then
b1 = lens.dof_far -- in mm
fp = lens.focal_distance -- in cm
c1 = b1 - (b1 - fp*10)*factor
started = true
return true
elseif key == KEY.HALFSHUTTER and play == 6
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)
i = menu.set("Shoot","Silent Picture",0)
this.foreground = COLOR.YELLOW
this.background = COLOR.BLUE
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)
elseif play == 6 then
this.value = "FRSP"
i = menu.set("Shoot","Silent Picture",1)
else
this.value = ""
end
end
end
}

keymenu = menu.new
{
parent = "Shoot",
name = "Landscape Helper",
help = "Toggle through workflow",
help2 = "Grab exposure or take picture as required",
submenu =
{
{
name = "Turn On/Off",
help = "Switches the script on/off",
help2 = "Provides access to ML 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,
}
}
}