And if you say there's a new build coming... I'm not expecting you to do it at all, but just wanted to remind you this
5- Ideally in the future (completely optional), once the cameras are on their final placement, I think it'd be great to have each camera's focus point saved in an external file, and recall it at the start of every session. But this is just dreamland material for me right now. Better focus on the other stuff
This would definitely be a good feature, I may be able to add support for it in multicam at some point.
In the latest multicam version (r900) I added code to set different shooting options per camera. This doesn't do exactly what you described, but it provides building blocks to do it. The way it works is you can specify any of the shooting options like sv, tv, sd per camera, using an option named camopts, which is a table of id = {options} for each camera. So
mc:shoot{camopts={[1]={sd=100},[2]={sd=1000}}}
would set the focus distance of camera 1 to 100mm and camera to 1000. If there were cameras other than 1 or 2, they would just use autofocus or whatever was previously set. The top level values are merged, so if you use
mc:shoot{sd=500,camopts={[1]={sd=100},[2]={sd=1000}}}
Any other cameras would use 500. You can also specify different values for different cameras, like
mc:shoot{sd=500,svm=768,camopts={[1]={sd=100,tv=96},[2]={sd=1000,av=512}}}
so the default focus distance would be 500, all cameras would use svm 768, and cameras 1 and 2 would have shutter and aperture set, respectively.
Now, typing this all out every time would be annoying, but you can put the table in variable instead: Like
my_focus_table={
[1]={sd=100},
[2]={sd=500},
...
[20]={sd=123},
}
(... means you fill in the rest of the values)
and then use it like
mc:shoot{tv=123,camopts=my_focus_table}
If you wanted to just change settings for one camera, you could use
my_focus_table[3]={sd=456}
If you want to save it to a file, you could use
fsutil.writefile_e(util.serialize(my_focus_table,{compact_arrays=false}),'my_focus_table.txt')
and to load it
my_focus_table=util.unserialize(fsutil.readfile_e('my_focus_table.txt'))
The format is simple, so you could edit the .txt file in a text editor to adjust the distances if you wanted.
If you wanted to start from the cameras current focus distance from auto focus, you could use something like
my_focus_table={}
mc:cmwait('preshoot')
local status,result=mc:cmdwait("call return get_focus()")
for id, res in pairs(result) do
my_focus_table[id]={sd=res.status.status[1]}
end