28-11-24, 09:18
Bonjour,
utilisant très souvent la prise de vue en braketing d'exposition, je me retrouve à passer un temps fou à regrouper mes images en fichier *.dng et rejeter les images utilisées pour leur création !
Voilà j'ai créer un script lua qui va automatiser le travail. Il faut ce travail :
- Utilise la collection (toutes les images à l'écran de la table lumineuse)
- Regroupe les images prises à la suite en rafale
- Assemble ces images en fichier *.dng
- selon option case à cocher, rejette les images utilisées lors de la création
- met le style de votre choix aux images hrd produites !
Attention, ne l'utilisez pas sur des prises de vue prisent en rafale, il va assembler les images à tord !
Il s'agit d'un script *.lua, compatible avec le script-manager.
Il vous suffit de copier le fichier dans le dossier @utilisateur/AppData/Local/darktable/lua/nouveau dossier ou un autre qui sera repris dans le script-manager
Depuis la table lumineuse, en bas à gauche, activer le script depuis le module : script manager
Voilà le script : https://drive.google.com/file/d/1becYRB1...sp=sharing
utilisant très souvent la prise de vue en braketing d'exposition, je me retrouve à passer un temps fou à regrouper mes images en fichier *.dng et rejeter les images utilisées pour leur création !
Voilà j'ai créer un script lua qui va automatiser le travail. Il faut ce travail :
- Utilise la collection (toutes les images à l'écran de la table lumineuse)
- Regroupe les images prises à la suite en rafale
- Assemble ces images en fichier *.dng
- selon option case à cocher, rejette les images utilisées lors de la création
- met le style de votre choix aux images hrd produites !
Attention, ne l'utilisez pas sur des prises de vue prisent en rafale, il va assembler les images à tord !
Il s'agit d'un script *.lua, compatible avec le script-manager.
Il vous suffit de copier le fichier dans le dossier @utilisateur/AppData/Local/darktable/lua/nouveau dossier ou un autre qui sera repris dans le script-manager
Depuis la table lumineuse, en bas à gauche, activer le script depuis le module : script manager
Voilà le script : https://drive.google.com/file/d/1becYRB1...sp=sharing
Code :
local dt = require "darktable"
--local debug = require "darktable.debug"
local MOD = 'AutoHRD' --code recopié pour une utilisation dans script manager
local script_data = {}
script_data.metadata = {
name = "AutoHDR",
purpose = "Regroupe les images prises en rafale, puis les assemble en fichier hrd",
author = "Alain Plomb",
help = ""
}
script_data.destroy = nil
script_data.destroy_method = nil
script_data.restart = nil
script_data.show = nil
local mE = {}
mE.widgets = {}
mE.event_registered = false
mE.module_installed = false
--local file = io.open("D:/Documents/Test/test-scr.txt","w")
--io.output(file)
--io.write(dt.debug.dump(dt.database[1]))
--io.close(file)
--GUI
--case à chcher pour placer les images en rejet
local rejet = dt.new_widget("check_button"){
label = "mettre à rejetter images sources",
value = true
}
--liste déroulante de style pour image hrd
local stl ={}
for _,s in ipairs(dt.styles) do
table.insert(stl,s.name)
end
local comboboxStyle = dt.new_widget("combobox"){
label = "Style pour fichier HDR",
value = 1,
"aucun",
table.unpack(stl),
}
local function install_module()
if not mE.module_installed then
dt.register_lib(
"AutoHDR", -- Module name
"AutoHDR", -- name
true,
false,
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 100}},
dt.new_widget("box"){
orientation = "vertical",
dt.new_widget("button"){
label = "Auto HRD",
tooltip = "Exécuter les HRD",
clicked_callback = function (_)
main() --appel de la fonction principale
end
},
rejet,
comboboxStyle
},
nil,
nil
)
mE.module_installed = true
end
end
local function destroy() --fonctions de script manager
dt.gui.libs["AutoHDR"].visible = false
end
local function restart()
dt.gui.libs["AutoHDR"].visible = true
end
function main() --bouton de commande AutoHRD pressé
local function enSecondes(str) --transformer une date en seconde timestamp
local cleaned = string.gsub(str, '[^%d]',':')
cleaned = string.gsub(cleaned, '::*',':') --YYYY:MM:DD:hh:mm:ss
local year = string.sub(cleaned,1,4)
local month = string.sub(cleaned,6,7)
local day = string.sub(cleaned,9,10)
local hour = string.sub(cleaned,12,13)
local min = string.sub(cleaned,15,16)
local sec = string.sub(cleaned,18,19)
return os.time({year = year, month = month, day = day, hour = hour, min = min, sec = sec})
end
local tmp = {}
for i,v in pairs(dt.collection) do
local sec = enSecondes(v.exif_datetime_taken)
table.insert(tmp,{id = i, fn = v.filename, sec = sec, exp = math.floor(v.exif_exposure), hdr = v.is_hdr})
end
local hdr = {}
local securit = {}
for _,v in ipairs(tmp) do
local bcl = false
local suivant = false
for _,s in ipairs(securit) do
if v.id == s then
suivant = true
end
end
if not suivant and not v.hdr then
local t = v.sec + v.exp --calcul du temps pour être dans la rafale
for _,vc in ipairs(tmp) do
if v.id ~= vc.id then
if vc.sec == t or vc.sec == t + 1 then
if bcl then
table.insert(bcl, dt.collection[vc.id])
else
bcl = {dt.collection[v.id], dt.collection[vc.id]}
end
table.insert(securit, vc.id)
t = vc.sec + vc.exp
end
end
end --for ctrl
if bcl then
table.insert(hdr, bcl)
end -- if bcl
end -- suivant
end
local hdrexe = {}
local nom
for _,v in ipairs(hdr) do
local tst = true
for _,img in ipairs(v) do
nom = string.sub(img.filename,1,-5).."-hdr.dng"
for _,col in ipairs(dt.collection) do
if col.filename == nom then
tst = false
end
end
end
if tst then
table.insert(hdrexe, v)
end
end
for _,v in ipairs(hdrexe) do --création des fichiers regroupés hrd
dt.gui.selection(v)
local n = #dt.collection
dt.gui.action("lib/image/create HDR", "", "activate", 1,000)
while #dt.collection == n do --attente d'un nouveau fichier
dt.control.sleep(250)
end
end
if rejet then --rejetter les images de création de hrd
for _,v in ipairs(hdrexe) do
for _,img in ipairs(v) do
img.rating = -1
end
end
end
if comboboxStyle.selected ~= 1 then --si un style est sélectionné
for _,img in ipairs(dt.collection) do
if img.is_hdr then
dt.styles.apply(dt.styles[comboboxStyle.selected-1], img)
end
end
end
end
-- code de examples/moduleExample.lua
if dt.gui.current_view().id == "lighttable" then
install_module()
else
if not mE.event_registered then
dt.register_event(
"AutoHDR", "view-changed",
function(event, old_view, new_view)
if new_view.name == "lighttable" and old_view.name == "darkroom" then
install_module()
end
end
)
mE.event_registered = true
end
end
script_data.destroy = destroy
script_data.restart = restart
script_data.destroy_method = "hide"
script_data.show = restart
return script_data