Skip to content

Commit 191fedb

Browse files
committed
Implement support for amf_transform_ids.
Closes #154. Signed-off-by: Thomas Mansencal <[email protected]>
1 parent eab53aa commit 191fedb

File tree

10 files changed

+99
-7
lines changed

10 files changed

+99
-7
lines changed

docs/opencolorio_config_aces.config.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Reference Configuration
8282
version_aces_dev
8383
classify_aces_ctl_transforms
8484
discover_aces_ctl_transforms
85+
filter_amf_components
8586
filter_ctl_transforms
8687
generate_amf_components
8788
print_aces_taxonomy

opencolorio_config_aces/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
conversion_path,
5050
ctl_transform_to_node,
5151
discover_aces_ctl_transforms,
52+
filter_amf_components,
5253
filter_ctl_transforms,
5354
filter_nodes,
5455
generate_amf_components,
@@ -108,6 +109,7 @@
108109
"conversion_path",
109110
"ctl_transform_to_node",
110111
"discover_aces_ctl_transforms",
112+
"filter_amf_components",
111113
"filter_ctl_transforms",
112114
"filter_nodes",
113115
"generate_amf_components",

opencolorio_config_aces/config/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
conversion_path,
3131
ctl_transform_to_node,
3232
discover_aces_ctl_transforms,
33+
filter_amf_components,
3334
filter_ctl_transforms,
3435
filter_nodes,
3536
generate_amf_components,
@@ -75,6 +76,7 @@
7576
"conversion_path",
7677
"ctl_transform_to_node",
7778
"discover_aces_ctl_transforms",
79+
"filter_amf_components",
7880
"filter_ctl_transforms",
7981
"filter_nodes",
8082
"generate_amf_components",

opencolorio_config_aces/config/cg/generate/config.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
)
4343
from opencolorio_config_aces.config.reference import (
4444
DescriptionStyle,
45+
filter_amf_components,
4546
generate_config_aces,
4647
)
4748
from opencolorio_config_aces.config.reference.generate.config import (
@@ -1202,10 +1203,25 @@ def remove_existing_named_transform(name: str) -> None:
12021203
clf_transform_id = transform_data["clf_transform_id"]
12031204

12041205
if style:
1206+
clf_transform = clf_transform_from_style(style)
1207+
1208+
filtered_amf_components = None
1209+
if (
1210+
aces_transform_id := clf_transform.information.get( # pyright: ignore
1211+
"ACEStransformID"
1212+
)
1213+
) is not None:
1214+
filtered_amf_components = filter_amf_components(
1215+
amf_components, aces_transform_id.aces_transform_id
1216+
)
1217+
12051218
kwargs.update(
12061219
{
12071220
"style": style,
1208-
"clf_transform": clf_transform_from_style(style),
1221+
"clf_transform": clf_transform,
1222+
"interchange_mapping": None
1223+
if filtered_amf_components is None
1224+
else {"amf_transform_ids": ", ".join(filtered_amf_components)},
12091225
}
12101226
)
12111227

@@ -1250,7 +1266,24 @@ def remove_existing_named_transform(name: str) -> None:
12501266
f'"{clf_transform_id}" "CLF" transform does not exist!',
12511267
)
12521268

1253-
kwargs["clf_transform"] = clf_transform
1269+
filtered_amf_components = None
1270+
if (
1271+
aces_transform_id := clf_transform.information.get( # pyright: ignore
1272+
"ACEStransformID"
1273+
)
1274+
) is not None:
1275+
filtered_amf_components = filter_amf_components(
1276+
amf_components, aces_transform_id.aces_transform_id
1277+
)
1278+
1279+
kwargs.update(
1280+
{
1281+
"clf_transform": clf_transform,
1282+
"interchange_mapping": None
1283+
if filtered_amf_components is None
1284+
else {"amf_transform_ids": ", ".join(filtered_amf_components)},
1285+
}
1286+
)
12541287

12551288
if transform_data["interface"] == "NamedTransform":
12561289
LOGGER.info(

opencolorio_config_aces/config/generation/configuration.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,19 @@ def extended_fields(self) -> dict[str, str]:
9191
BuildConfiguration(
9292
aces=Version(2, 0),
9393
colorspaces=Version(3, 0, 0),
94-
ocio=Version(2, 4),
94+
ocio=Version(2, 5),
9595
variant="",
9696
),
9797
BuildConfiguration(
9898
aces=Version(2, 0),
9999
colorspaces=Version(3, 0, 0),
100-
ocio=Version(2, 4),
100+
ocio=Version(2, 5),
101101
variant="D60 Views",
102102
),
103103
BuildConfiguration(
104104
aces=Version(2, 0),
105105
colorspaces=Version(3, 0, 0),
106-
ocio=Version(2, 4),
106+
ocio=Version(2, 5),
107107
variant="All Views",
108108
),
109109
]

opencolorio_config_aces/config/generation/factories.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def colorspace_factory(
125125
is_data: bool | None = None,
126126
reference_space: str | int | None = None,
127127
interop_id: str | None = None,
128+
interchange_mapping: dict[str, str] | None = None,
128129
base_colorspace: Mapping[str, Any] | ocio.ColorSpace | None = None,
129130
**kwargs: Any,
130131
) -> ocio.ColorSpace:
@@ -166,6 +167,9 @@ def colorspace_factory(
166167
See https://github.com/AcademySoftwareFoundation/ColorInterop/blob/\
167168
5aebc3f37ac192c86694a47bb92fa65cc95e4e67/Recommendations/\
168169
01_TextureAssetColorSpaces/TextureAssetColorSpaces.md
170+
interchange_mapping : dict, optional
171+
Mapping of key and value pairs for interchange, e.g.,
172+
`amf_transform_ids` or `icc_profile_name`.
169173
base_colorspace : dict or ColorSpace, optional
170174
*OpenColorIO* base `Colorspace` inherited for initial attribute values.
171175
@@ -261,6 +265,10 @@ def colorspace_factory(
261265
if interop_id is not None:
262266
colorspace.setInteropID(interop_id) # pyright: ignore
263267

268+
if interchange_mapping is not None:
269+
for key, value in interchange_mapping.items():
270+
colorspace.setInterchangeAttribute(key, value) # pyright: ignore
271+
264272
return colorspace
265273

266274

opencolorio_config_aces/config/reference/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
discover_aces_ctl_transforms,
77
classify_aces_ctl_transforms,
88
unclassify_ctl_transforms,
9+
filter_amf_components,
910
filter_ctl_transforms,
1011
generate_amf_components,
1112
print_aces_taxonomy,
@@ -26,6 +27,7 @@
2627
"discover_aces_ctl_transforms",
2728
"classify_aces_ctl_transforms",
2829
"unclassify_ctl_transforms",
30+
"filter_amf_components",
2931
"filter_ctl_transforms",
3032
"generate_amf_components",
3133
"print_aces_taxonomy",

opencolorio_config_aces/config/reference/discover/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
discover_aces_ctl_transforms,
77
classify_aces_ctl_transforms,
88
unclassify_ctl_transforms,
9+
filter_amf_components,
910
filter_ctl_transforms,
1011
generate_amf_components,
1112
print_aces_taxonomy,
@@ -24,6 +25,7 @@
2425
"discover_aces_ctl_transforms",
2526
"classify_aces_ctl_transforms",
2627
"unclassify_ctl_transforms",
28+
"filter_amf_components",
2729
"filter_ctl_transforms",
2830
"generate_amf_components",
2931
"print_aces_taxonomy",

opencolorio_config_aces/config/reference/discover/classify.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"filter_ctl_transforms",
7171
"print_aces_taxonomy",
7272
"generate_amf_components",
73+
"filter_amf_components",
7374
]
7475

7576
LOGGER: logging.Logger = logging.getLogger(__name__)
@@ -1553,9 +1554,31 @@ def generate_amf_components(
15531554
- {relation}
15541555
)
15551556

1556-
result = {key: sorted(set(value)) for key, value in amf_components.items() if value}
1557+
return {key: sorted(set(value)) for key, value in amf_components.items() if value}
15571558

1558-
return result
1559+
1560+
def filter_amf_components(
1561+
amf_components: dict[str, list[str]], aces_transform_id: str
1562+
) -> list[str] | None:
1563+
"""
1564+
Filter the *ACES* *AMF* components for specified *ACEStransformID*.
1565+
1566+
Parameters
1567+
----------
1568+
amf_components : dict
1569+
*ACES* *AMF* components to filter.
1570+
aces_transform_id : str
1571+
*ACEStransformID* to filter the *ACES* *AMF* components with.
1572+
1573+
Returns
1574+
-------
1575+
:class:`list`
1576+
Filtered *ACES* *AMF* components.
1577+
"""
1578+
1579+
filtered_amf_components = list(amf_components.get(aces_transform_id, []))
1580+
1581+
return filtered_amf_components if len(filtered_amf_components) else None
15591582

15601583

15611584
if __name__ == "__main__":

opencolorio_config_aces/config/reference/generate/config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from opencolorio_config_aces.config.reference import (
4545
classify_aces_ctl_transforms,
4646
discover_aces_ctl_transforms,
47+
filter_amf_components,
4748
filter_ctl_transforms,
4849
generate_amf_components,
4950
unclassify_ctl_transforms,
@@ -1196,6 +1197,10 @@ def generate_config_aces(
11961197

11971198
display_style = transform_data["linked_display_colorspace_style"]
11981199

1200+
filtered_amf_components = filter_amf_components(
1201+
amf_components, display_style
1202+
)
1203+
11991204
display = style_to_display_colorspace(
12001205
display_style,
12011206
describe,
@@ -1206,6 +1211,11 @@ def generate_config_aces(
12061211
categories=transform_data.get("categories"),
12071212
aliases=transform_data_aliases(transform_data),
12081213
interop_id=transform_data.get("interop_id"),
1214+
interchange_mapping=(
1215+
None
1216+
if filtered_amf_components is None
1217+
else {"amf_transform_ids": ", ".join(filtered_amf_components)}
1218+
),
12091219
)
12101220
display["transforms_data"] = [transform_data]
12111221
display_name = display["name"]
@@ -1255,6 +1265,10 @@ def generate_config_aces(
12551265
style,
12561266
)
12571267

1268+
filtered_amf_components = filter_amf_components(
1269+
amf_components, ctl_transform.aces_transform_id.aces_transform_id
1270+
)
1271+
12581272
colorspace = ctl_transform_to_colorspace(
12591273
ctl_transform,
12601274
describe,
@@ -1270,6 +1284,11 @@ def generate_config_aces(
12701284
categories=transform_data.get("categories"),
12711285
aliases=transform_data_aliases(transform_data),
12721286
interop_id=transform_data.get("interop_id"),
1287+
interchange_mapping=(
1288+
None
1289+
if filtered_amf_components is None
1290+
else {"amf_transform_ids": ", ".join(filtered_amf_components)}
1291+
),
12731292
)
12741293
colorspace["transforms_data"] = [transform_data]
12751294
if colorspace not in colorspaces:

0 commit comments

Comments
 (0)