-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathdtstyle_to_xmp.py
executable file
·102 lines (86 loc) · 4.03 KB
/
dtstyle_to_xmp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/python3
# Simple script for converting darktable .dtstyle files to .xmp (version 2)
from sys import argv
from os import path
import xml.etree.ElementTree as ET
if len(argv) != 3 :
print ("usage:",argv[0],"style.dtstyle file.xmp")
exit(1)
# Check if the input file exists.
if not path.exists(argv[1]):
print ("ERROR: input file:",argv[1],"doesn't exists.")
exit(1)
# Check if the requested output file already exist
if path.exists(argv[2]):
print ("ERROR: output file:",argv[2],"already exists.")
exit(1)
try:
styletree = ET.parse(argv[1]) or die("This doesn't work for me")
except ET.ParseError:
print ("ERROR: input file:",argv[1],"is not a valid dtsyle-file.")
exit(1)
styleroot = styletree.getroot()
# Create a new xml structure.
xmpmeta=ET.Element("x:xmpmeta",{"xmlns:x":"adobe:ns:meta/",
"x:xmptk":"XMP Core 4.4.0-Exiv2"})
rdf=ET.SubElement(xmpmeta,"rdf:RDF",{"xmlns:rdf":"http://www.w3.org/1999/02/22-rdf-syntax-ns#"})
description=ET.SubElement(rdf,"rdf:Description",{"rdf:about":"",
"xmlns:xmp":"http://ns.adobe.com/xap/1.0/",
"xmlns:xmpMM":"http://ns.adobe.com/xap/1.0/mm/",
"xmlns:dc":"http://purl.org/dc/elements/1.1/",
"xmlns:darktable":"http://darktable.sf.net/",
"xmp:Rating":"0",
"xmpMM:DerivedFrom":"PureAwesome.raw",
"darktable:xmp_version":"2",
"darktable:raw_params":"0",
"darktable:auto_presets_applied":"1"})
# darktable:history_end is not needed with a conversion, darktable will defaults to the topmost element in the history stack
# "darktable:history_end":"8"})
maskid=ET.SubElement(description,"darktable:mask_id")
maskid.append(ET.Element("rdf:Seq"))
masktype=ET.SubElement(description,"darktable:mask_type")
masktype.append(ET.Element("rdf:Seq"))
maskname=ET.SubElement(description,"darktable:mask_name")
maskname.append(ET.Element("rdf:Seq"))
maskversion=ET.SubElement(description,"darktable:mask_version")
maskversion.append(ET.Element("rdf:Seq"))
mask=ET.SubElement(description,"darktable:mask")
mask.append(ET.Element("rdf:Seq"))
masknb=ET.SubElement(description,"darktable:mask_nb")
masknb.append(ET.Element("rdf:Seq"))
masksrc=ET.SubElement(description,"darktable:mask_src")
masksrc.append(ET.Element("rdf:Seq"))
darktablehistory=ET.SubElement(description,"darktable:history")
darktablehistoryid=ET.SubElement(darktablehistory,"rdf:Seq")
# iterate through the dtstyle to find and add the used plugins to the xmp
for plugins in styleroot.findall('./style/plugin'):
enabled = plugins.find('enabled')
if enabled.text == "1":
li=ET.SubElement(darktablehistoryid,"rdf:li")
li.set("darktable:enabled","1")
modversion = plugins.find('module')
if modversion != None:
li.set("darktable:modversion",modversion.text)
operation = plugins.find('operation')
if operation != None:
li.set("darktable:operation",operation.text)
params = plugins.find('op_params')
if params != None:
li.set("darktable:params",params.text)
blendop_params = plugins.find('blendop_params')
if blendop_params != None:
li.set("darktable:blendop_params",blendop_params.text)
blendop_version = plugins.find('blendop_version')
if blendop_version != None:
li.set("darktable:blendop_version",blendop_version.text)
multi_name = plugins.find('multi_name')
if multi_name != None:
if multi_name.text is None:
li.set("darktable:multi_name","")
else:
li.set("darktable:multi_name",multi_name.text)
multi_priority = plugins.find('multi_priority')
if multi_priority != None:
li.set("darktable:multi_priority",multi_priority.text)
# Write the newly created xmp to a file
ET.ElementTree(xmpmeta).write(argv[2],"UTF-8")