Updated __init__.py to reflect version no. and new LUT defaults
[OpenColorIO-Configs.git] / spi-vfx / make_vfx_ocio.py
1 #!/usr/bin/env python
2
3
4 import  math, os, sys
5 import SpImport
6 OCIO = SpImport.SpComp2("PyOpenColorIO",2)
7
8 print "OCIO",OCIO.version
9
10 outputfilename = "config.ocio"
11
12 config = OCIO.Config()
13
14 LUT_SEARCH_PATH = ['luts']
15 config.setSearchPath(':'.join(LUT_SEARCH_PATH))
16
17
18 # Set roles
19 config.setRole(OCIO.Constants.ROLE_SCENE_LINEAR, "lnf")
20 config.setRole(OCIO.Constants.ROLE_REFERENCE, "lnf")
21 config.setRole(OCIO.Constants.ROLE_COLOR_TIMING, "lg10")
22 config.setRole(OCIO.Constants.ROLE_COMPOSITING_LOG, "lgf")
23 config.setRole(OCIO.Constants.ROLE_COLOR_PICKING,"cpf")
24 config.setRole(OCIO.Constants.ROLE_DATA,"ncf")
25 config.setRole(OCIO.Constants.ROLE_DEFAULT,"ncf")
26 config.setRole(OCIO.Constants.ROLE_MATTE_PAINT,"vd8")
27 config.setRole(OCIO.Constants.ROLE_TEXTURE_PAINT,"dt16")
28 ## Scene Linear ###############################################################
29
30 cs = OCIO.ColorSpace(family='ln',name='lnf')
31 cs.setDescription("lnf :  linear show space")
32 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
33 cs.setAllocationVars([-15.0,6.0])
34 cs.setAllocation(OCIO.Constants.ALLOCATION_LG2)
35 config.addColorSpace(cs)
36
37 cs = OCIO.ColorSpace(family='ln',name='lnh')
38 cs.setDescription("lnh :  linear show space")
39 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_F16)
40 cs.setAllocationVars([-15.0,6.0])
41 cs.setAllocation(OCIO.Constants.ALLOCATION_LG2)
42 config.addColorSpace(cs)
43
44 cs = OCIO.ColorSpace(family='ln',name='ln16')
45 cs.setDescription("ln16 : linear show space")
46 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT16)
47 cs.setAllocationVars([-15.0,0.0])
48 cs.setAllocation(OCIO.Constants.ALLOCATION_LG2)
49 config.addColorSpace(cs)
50
51
52 ## Log ########################################################################
53
54 cs = OCIO.ColorSpace(family='lg',name='lg16')
55 cs.setDescription("lg16 : conversion from film log ")
56 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT16)
57 t = OCIO.FileTransform('lg16.spi1d',interpolation=OCIO.Constants.INTERP_NEAREST )
58 cs.setTransform(t, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
59 config.addColorSpace(cs)
60
61 cs = OCIO.ColorSpace(family='lg',name='lg10')
62 cs.setDescription("lg10 : conversion from film log")
63 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT10)
64 t = OCIO.FileTransform('lg10.spi1d',interpolation=OCIO.Constants.INTERP_NEAREST )
65 cs.setTransform(t, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
66 config.addColorSpace(cs)
67
68 cs = OCIO.ColorSpace(family='lg',name='lgf')
69 cs.setDescription("lgf : conversion from film log")
70 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
71 cs.setAllocationVars([-0.25,1.5])
72 t = OCIO.FileTransform('lgf.spi1d',interpolation=OCIO.Constants.INTERP_LINEAR)
73 cs.setTransform(t, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
74 config.addColorSpace(cs)
75
76
77
78 ## PANALOG ########################################################################
79
80 cs = OCIO.ColorSpace(family='gn',name='gn10')
81 cs.setDescription("gn10 :conversion from Panalog")
82 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT10)
83 t = OCIO.FileTransform('gn10.spi1d',interpolation=OCIO.Constants.INTERP_NEAREST)
84 cs.setTransform(t, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
85 config.addColorSpace(cs)
86
87
88 ## VD ########################################################################
89
90 cs = OCIO.ColorSpace(family='vd',name='vd16')
91 cs.setDescription("vd16 :conversion from a gamma 2.2 ")
92 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT16)
93 groupTransform = OCIO.GroupTransform()
94 groupTransform.push_back(OCIO.FileTransform('version_8_whitebalanced.spimtx',direction=OCIO.Constants.TRANSFORM_DIR_INVERSE))
95 groupTransform.push_back(OCIO.FileTransform('vd16.spi1d',interpolation=OCIO.Constants.INTERP_NEAREST ))
96 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
97 config.addColorSpace(cs)
98
99 cs = OCIO.ColorSpace(family='vd',name='vd10')
100 cs.setDescription("vd10 :conversion from a gamma 2.2 ")
101 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT10)
102 groupTransform = OCIO.GroupTransform()
103 groupTransform.push_back(OCIO.FileTransform('version_8_whitebalanced.spimtx',direction=OCIO.Constants.TRANSFORM_DIR_INVERSE))
104 groupTransform.push_back(OCIO.FileTransform('vd10.spi1d',interpolation=OCIO.Constants.INTERP_NEAREST ))
105 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
106 config.addColorSpace(cs)
107
108 cs = OCIO.ColorSpace(family='vd',name='vd8')
109 cs.setDescription("vd8 :conversion from a gamma 2.2")
110 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT8)
111 groupTransform = OCIO.GroupTransform()
112 groupTransform.push_back(OCIO.FileTransform('version_8_whitebalanced.spimtx',direction=OCIO.Constants.TRANSFORM_DIR_INVERSE))
113 groupTransform.push_back(OCIO.FileTransform('vd8.spi1d',interpolation=OCIO.Constants.INTERP_NEAREST ))
114 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
115 config.addColorSpace(cs)
116
117 # REC709 CONVERSIONS#############################################################################
118 cs = OCIO.ColorSpace(family='hd',name='hd10')
119 cs.setDescription("hd10 : conversion from REC709")
120 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT10)
121 groupTransform = OCIO.GroupTransform()
122 groupTransform.push_back(OCIO.FileTransform('hdOffset.spimtx',interpolation=OCIO.Constants.INTERP_NEAREST ,direction=OCIO.Constants.TRANSFORM_DIR_INVERSE))
123 groupTransform.push_back(OCIO.ColorSpaceTransform(src='vd16',dst='lnf'))
124 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
125 config.addColorSpace(cs)
126
127
128 ## TEXTURE PUBLISHING ########################################################################
129 """
130 cs = OCIO.ColorSpace(family='dt',name='dt8')
131 cs.setDescription("dt8 :conversion for diffuse texture")
132 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT8)
133 groupTransform = OCIO.GroupTransform()
134 groupTransform.push_back(OCIO.FileTransform('diffuseTextureMultiplier.spimtx',interpolation=OCIO.Constants.INTERP_NEAREST ,direction=OCIO.Constants.TRANSFORM_DIR_FORWARD))
135 groupTransform.push_back(OCIO.ColorSpaceTransform(dst='lnf',src='vd16'))
136 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
137 config.addColorSpace(cs)
138 """
139 cs = OCIO.ColorSpace(family='dt',name='dt16')
140 cs.setDescription("dt16 :conversion for diffuse texture")
141 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT16)
142 groupTransform = OCIO.GroupTransform()
143 groupTransform.push_back(OCIO.FileTransform('diffuseTextureMultiplier.spimtx',interpolation=OCIO.Constants.INTERP_NEAREST ,direction=OCIO.Constants.TRANSFORM_DIR_FORWARD))
144 groupTransform.push_back(OCIO.ColorSpaceTransform(dst='lnf',src='vd16'))
145 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
146 config.addColorSpace(cs)
147
148
149 ## COLOR PICKER ########################################################################
150
151 cs = OCIO.ColorSpace(family='cp',name='cpf')
152 cs.setDescription("cpf :video like conversion used for color picking ") 
153 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
154 t=OCIO.FileTransform(src='cpf.spi1d',interpolation=OCIO.Constants.INTERP_LINEAR )
155 cs.setTransform(t, OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
156 config.addColorSpace(cs)
157
158
159
160 ## DATA ########################################################################
161
162
163 cs = OCIO.ColorSpace(family='nc',name='nc8')
164 cs.setDescription("nc8 :nc,Non-color used to store non-color data such as depth or surface normals")
165 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT8)
166 cs.setIsData(True)
167 config.addColorSpace(cs)
168
169 cs = OCIO.ColorSpace(family='nc',name='nc10')
170 cs.setDescription("nc10 :nc,Non-color used to store non-color data such as depth or surface normals")
171 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT10)
172 cs.setIsData(True)
173 config.addColorSpace(cs)
174
175 cs = OCIO.ColorSpace(family='nc',name='nc16')
176 cs.setDescription("nc16 :nc,Non-color used to store non-color data such as depth or surface normals")
177 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT16)
178 cs.setIsData(True)
179 config.addColorSpace(cs)
180
181 cs = OCIO.ColorSpace(family='nc',name='ncf')
182 cs.setDescription("ncf :nc,Non-color used to store non-color data such as depth or surface normals")
183 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
184 cs.setIsData(True)
185 config.addColorSpace(cs)
186
187 ## DISPLAY SPACES ##################################################################
188
189 cs = OCIO.ColorSpace(family='srgb',name='srgb8')
190 cs.setDescription("srgb8 :rgb display space for the srgb standard.")
191 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT8)
192 groupTransform = OCIO.GroupTransform()
193 groupTransform.push_back(OCIO.ColorSpaceTransform(src='lnf', dst='lg10'))
194 groupTransform.push_back(OCIO.FileTransform('spi_ocio_srgb_test.spi3d',interpolation=OCIO.Constants.INTERP_LINEAR))
195 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_FROM_REFERENCE)
196 config.addColorSpace(cs)
197
198 cs = OCIO.ColorSpace(family='p3dci',name='p3dci8')
199 cs.setDescription("p3dci8 :rgb display space for gamma 2.6 P3 projection.")
200 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT8)
201 groupTransform = OCIO.GroupTransform()
202 groupTransform.push_back(OCIO.ColorSpaceTransform(src='lnf', dst='lg10'))
203 groupTransform.push_back( OCIO.FileTransform('colorworks_filmlg_to_p3.3dl',interpolation=OCIO.Constants.INTERP_LINEAR))
204 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_FROM_REFERENCE)
205 config.addColorSpace(cs)
206
207 cs = OCIO.ColorSpace(family='xyz',name='xyz16')
208 cs.setDescription("xyz16 :Conversion for  DCP creation.")
209 cs.setBitDepth(OCIO.Constants.BIT_DEPTH_UINT16)
210 groupTransform = OCIO.GroupTransform()
211 groupTransform.push_back(OCIO.ColorSpaceTransform(src='lnf', dst='p3dci8'))
212 groupTransform.push_back(OCIO.ExponentTransform([2.6,2.6,2.6,1.0]))
213 groupTransform.push_back(OCIO.FileTransform('p3_to_xyz16_corrected_wp.spimtx'))
214 groupTransform.push_back(OCIO.ExponentTransform([2.6,2.6,2.6,1.0],direction=OCIO.Constants.TRANSFORM_DIR_INVERSE))
215 cs.setTransform(groupTransform, OCIO.Constants.COLORSPACE_DIR_FROM_REFERENCE)
216 config.addColorSpace(cs)
217
218 ## DISPLAY SPACES ##################################################################
219
220 for name,colorspace in [ ['Film','srgb8'], ['Log','lg10'], ['Raw','nc10']]:
221     config.addDisplay('sRGB',name,colorspace)
222
223 for name,colorspace in [ ['Film','p3dci8'], ['Log','lg10'], ['Raw','nc10']]:
224     config.addDisplay('DCIP3',name,colorspace)
225     
226
227 config.setActiveViews(','.join(['Film','Log','Raw']))
228 config.setActiveDisplays(','.join(['sRGB','DCIP3']))
229
230 try:
231     config.sanityCheck()
232 except Exception,e:
233     print e
234     print "Configuration was not written due to a failed Sanity Check"
235     sys.exit()
236 else:    
237     f = file(outputfilename,"w")
238     f.write(config.serialize())
239     f.close()
240     print "Wrote",outputfilename