@@ -1095,9 +1095,7 @@ def generate_config_aces(
10951095 ]
10961096 )
10971097
1098- config_mapping [transform_data ["builtin_transform_style" ]].append (
1099- transform_data
1100- )
1098+ config_mapping [transform_data ["colorspace" ]].append (transform_data )
11011099
11021100 colorspaces = []
11031101 looks = []
@@ -1156,23 +1154,31 @@ def generate_config_aces(
11561154
11571155 LOGGER .info ('Implicit colorspaces: "%s"' , [a ["name" ] for a in colorspaces ])
11581156
1159- for style , transforms_data in config_mapping .items ():
1160- if transforms_data [0 ]["interface" ] == "ViewTransform" :
1161- LOGGER .info ('Creating a "View" transform for "%s" style...' , style )
1162- view_transform = style_to_view_transform (
1163- style ,
1164- [transform_data ["ctl_transform" ] for transform_data in transforms_data ],
1165- describe ,
1166- amf_components ,
1167- signature_only = True ,
1168- scheme = scheme ,
1169- )
1170- view_transform ["transforms_data" ] = transforms_data
1171- view_transforms .append (view_transform )
1172- view_transform_name = view_transform ["name" ]
1173- view_transform_names .append (view_transform_name )
1157+ for transforms_data in config_mapping .values ():
1158+ for transform_data in transforms_data :
1159+ ctl_transform = transform_data ["ctl_transform" ]
1160+ style = transform_data ["builtin_transform_style" ]
1161+
1162+ if transform_data ["interface" ] == "ViewTransform" :
1163+ LOGGER .info ('Creating a "View" transform for "%s" style...' , style )
1164+ view_transform = style_to_view_transform (
1165+ style ,
1166+ [
1167+ transform_data ["ctl_transform" ]
1168+ for transform_data in transforms_data
1169+ ],
1170+ describe ,
1171+ amf_components ,
1172+ signature_only = True ,
1173+ scheme = scheme ,
1174+ )
1175+ view_transform ["transforms_data" ] = transforms_data
1176+ view_transforms .append (view_transform )
1177+ view_transform_name = view_transform ["name" ]
1178+
1179+ if view_transform_name not in view_transform_names :
1180+ view_transform_names .append (view_transform_name )
11741181
1175- for transform_data in transforms_data :
11761182 display_style = transform_data ["linked_display_colorspace_style" ]
11771183
11781184 display = style_to_display_colorspace (
@@ -1208,64 +1214,78 @@ def generate_config_aces(
12081214 display_name ,
12091215 )
12101216 shared_views .append (shared_view )
1211- else :
1212- for transform_data in transforms_data :
1213- ctl_transform = transform_data ["ctl_transform" ]
1214-
1215- if transform_data ["interface" ] == "Look" :
1216- LOGGER .info ('Creating a "Look" transform for "%s" style...' , style )
1217- look = ctl_transform_to_look (
1218- ctl_transform ,
1219- describe ,
1220- amf_components ,
1221- signature_only = True ,
1222- scheme = scheme ,
1223- analytical = analytical ,
1224- forward_transform = {
1225- "transform_type" : "BuiltinTransform" ,
1226- "style" : style ,
1227- },
1228- process_space = scene_reference_colorspace ["name" ],
1229- )
1230- look ["transforms_data" ] = [transform_data ]
1231- if look not in looks :
1232- looks .append (look )
1233- else :
1234- LOGGER .info (
1235- 'Creating a "Colorspace" transform for "%s" style...' ,
1236- style ,
1237- )
12381217
1239- colorspace = ctl_transform_to_colorspace (
1240- ctl_transform ,
1241- describe ,
1242- amf_components ,
1243- signature_only = True ,
1244- scheme = scheme ,
1245- analytical = analytical ,
1246- to_reference = {
1247- "transform_type" : "BuiltinTransform" ,
1248- "style" : style ,
1249- },
1250- encoding = transform_data .get ("encoding" ),
1251- categories = transform_data .get ("categories" ),
1252- aliases = transform_data_aliases (transform_data ),
1253- )
1254- colorspace ["transforms_data" ] = [transform_data ]
1255- if colorspace not in colorspaces :
1256- colorspaces .append (colorspace )
1218+ elif transform_data ["interface" ] == "Look" :
1219+ LOGGER .info ('Creating a "Look" transform for "%s" style...' , style )
1220+ look = ctl_transform_to_look (
1221+ ctl_transform ,
1222+ describe ,
1223+ amf_components ,
1224+ signature_only = True ,
1225+ scheme = scheme ,
1226+ analytical = analytical ,
1227+ forward_transform = {
1228+ "transform_type" : "BuiltinTransform" ,
1229+ "style" : style ,
1230+ },
1231+ process_space = scene_reference_colorspace ["name" ],
1232+ )
1233+ look ["transforms_data" ] = [transform_data ]
1234+ if look not in looks :
1235+ looks .append (look )
1236+ else :
1237+ LOGGER .info (
1238+ 'Creating a "Colorspace" transform for "%s" style...' ,
1239+ style ,
1240+ )
1241+
1242+ colorspace = ctl_transform_to_colorspace (
1243+ ctl_transform ,
1244+ describe ,
1245+ amf_components ,
1246+ signature_only = True ,
1247+ scheme = scheme ,
1248+ analytical = analytical ,
1249+ to_reference = {
1250+ "transform_type" : "BuiltinTransform" ,
1251+ "style" : style ,
1252+ },
1253+ encoding = transform_data .get ("encoding" ),
1254+ categories = transform_data .get ("categories" ),
1255+ aliases = transform_data_aliases (transform_data ),
1256+ )
1257+ colorspace ["transforms_data" ] = [transform_data ]
1258+ if colorspace not in colorspaces :
1259+ colorspaces .append (colorspace )
12571260
12581261 # Ordering displays, "sRGB" first and then shared views.
12591262 display_names = sorted (display_names )
12601263 for i , display_name in enumerate (display_names [:]):
12611264 if display_name .startswith ("sRGB" ):
12621265 display_names .insert (0 , display_names .pop (i ))
12631266
1264- shared_views , unordered_shared_views = [], shared_views
1265- for display_name in display_names :
1266- for shared_view in unordered_shared_views :
1267- if shared_view ["display" ] == display_name :
1268- shared_views .append (shared_view )
1267+ # Ordering active views by luminance, whitepoint, and, dynamic range.
1268+ def ordering (element ):
1269+ """Return the ordering key for given element."""
1270+
1271+ score = 0
1272+
1273+ if match := re .search (r"(\w+)\snits" , element ):
1274+ score += int (match .group (1 ))
1275+
1276+ if "D60 in" in element :
1277+ score += 1
1278+
1279+ if "SDR" in element :
1280+ score += 1e16
1281+
1282+ return score
1283+
1284+ active_views = sorted (view_transform_names , key = ordering )
1285+ for active_view in active_views [:]:
1286+ if "SDR" in active_view :
1287+ active_views .remove (active_view )
1288+ active_views .append (active_view )
12691289
12701290 untonemapped_view_transform = {
12711291 "name" : "Un-tone-mapped" ,
@@ -1329,7 +1349,7 @@ def generate_config_aces(
13291349 shared_views = shared_views ,
13301350 views = shared_views + views ,
13311351 active_displays = display_names ,
1332- active_views = [* view_transform_names , "Un-tone-mapped" , "Raw" ],
1352+ active_views = [* active_views , "Un-tone-mapped" , "Raw" ],
13331353 file_rules = [
13341354 {
13351355 "name" : "Default" ,
0 commit comments