Automatisation de la création de fichiers HRD

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/1becYRB1uAklswMZ-qO2cSPeQ38ekcrhH/view?usp=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[/code]

Merci du partage.
Un script Lua existe déjà : https://www.multimedia4linux.de/index.php/bildbearbeitung/darktable/darktable-plugin-enfuse-professional

Ce n’est pas la même chose !
Celui que vous proposez utilise un programme externe : Enfuse, et ne s’utilise que image par image, comme le bouton « Créer HDR » de darktable. Du même style il y a aussi un script pour HDRmerge ou Hugin …
Ce que fait mon script est un regroupement automatique des photos, puis la création des HDR avec la fonction de darktable. Si la collection contient 30 prises de vue de 3 photos chacune, mon script va créer directement les 10 fichiers HDR sans sélectionner aucune photo !
Je l’ai créer pour gagner du temps et ne plus avoir de tâche répétitive à faire !

Avec darktable, la création de HDR exige des prises alignées. Enfuse pro utilise effectivement un programme externe mais dans un script, il y a une partie qui aligne les prises ! Oui HDRmerge et Hugin le font aussi et juste pour un HDR !

Oui exactement, mais vu que je fais mes photos sur trépied, avec souvent des longues pauses, l’assemblage HRD de darktable me convient très bien, en plus, j’aime bien son rendu et il est assez rapide !
Mes photos sont visibles sur insta : https://www.instagram.com/urbex.meetoooo/ Je suis un fan d’urbex et de photo !

Merci pour ce partage de ton travail en HDR. Je te propose ce pano sur 2 EV fait avec Hugin et post-traité avec darktable : https://www.flickr.com/photos/113336874@N07/30892267755/in/dateposted/

Merci du partage, superbe urbex.