Implements support for *ACES* colorspaces conversions and transfer functions.
"""
-import array
import math
import numpy
import os
import pprint
import string
+import shutil
import PyOpenColorIO as ocio
-import aces_ocio.generate_lut as genlut
from aces_ocio.generate_lut import (
generate_1d_LUT_from_CTL,
generate_3d_LUT_from_CTL,
write_SPI_1d)
-from aces_ocio.utilities import ColorSpace, mat44_from_mat33, sanitize_path, compact
+from aces_ocio.utilities import (
+ ColorSpace,
+ mat44_from_mat33,
+ sanitize_path,
+ compact)
__author__ = 'ACES Developers'
__email__ = 'aces@oscars.org'
__status__ = 'Production'
-__all__ = ['create_ACEScc',
+__all__ = ['ACES_AP1_TO_AP0',
+ 'ACES_AP0_TO_XYZ',
+ 'create_ACEScc',
'create_ACESproxy',
'create_ACEScg',
'create_ADX',
# -------------------------------------------------------------------------
# Matrix converting *ACES AP1* primaries to *AP0*.
-ACES_AP1_to_AP0 = [0.6954522414, 0.1406786965, 0.1638690622,
+ACES_AP1_TO_AP0 = [0.6954522414, 0.1406786965, 0.1638690622,
0.0447945634, 0.8596711185, 0.0955343182,
-0.0055258826, 0.0040252103, 1.0015006723]
# Matrix converting *ACES AP0* primaries to *XYZ*.
-ACES_AP0_to_XYZ = [0.9525523959, 0.0000000000, 0.0000936786,
+ACES_AP0_TO_XYZ = [0.9525523959, 0.0000000000, 0.0000936786,
0.3439664498, 0.7281660966, -0.0721325464,
0.0000000000, 0.0000000000, 1.0088251844]
# *ACEScc*
# -------------------------------------------------------------------------
def create_ACEScc(aces_CTL_directory,
- lut_directory,
+ lut_directory,
lut_resolution_1d,
cleanup,
name='ACEScc',
min_value=0.0,
max_value=1.0,
input_scale=1.0):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
cs.aliases = ["acescc_ap1"]
# *AP1* primaries to *AP0* primaries.
cs.to_reference_transforms.append({
'type': 'matrix',
- 'matrix': mat44_from_mat33(ACES_AP1_to_AP0),
+ 'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
'direction': 'forward'})
cs.from_reference_transforms = []
# *ACESproxy*
# -------------------------------------------------------------------------
def create_ACESproxy(aces_CTL_directory,
- lut_directory,
+ lut_directory,
lut_resolution_1d,
cleanup,
name='ACESproxy'):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
cs.aliases = ["acesproxy_ap1"]
# *AP1* primaries to *AP0* primaries.
cs.to_reference_transforms.append({
'type': 'matrix',
- 'matrix': mat44_from_mat33(ACES_AP1_to_AP0),
+ 'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
'direction': 'forward'
})
cs.from_reference_transforms = []
return cs
+
# -------------------------------------------------------------------------
# *ACEScg*
# -------------------------------------------------------------------------
def create_ACEScg(aces_CTL_directory,
- lut_directory,
+ lut_directory,
lut_resolution_1d,
cleanup,
name='ACEScg'):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
cs.aliases = ["lin_ap1"]
# *AP1* primaries to *AP0* primaries.
cs.to_reference_transforms.append({
'type': 'matrix',
- 'matrix': mat44_from_mat33(ACES_AP1_to_AP0),
- 'direction': 'forward'
- })
+ 'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
+ 'direction': 'forward'})
cs.from_reference_transforms = []
return cs
+
# -------------------------------------------------------------------------
# *ADX*
# -------------------------------------------------------------------------
-def create_ADX(lut_directory,
+def create_ADX(lut_directory,
lut_resolution_1d,
- bit_depth=10,
+ bit_depth=10,
name='ADX'):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
name = '%s%s' % (name, bit_depth)
cs = ColorSpace(name)
cs.description = '%s color space - used for film scans' % name
cs.from_reference_transforms = []
return cs
+
# -------------------------------------------------------------------------
# *Generic Log Transform*
# -------------------------------------------------------------------------
middle_grey=0.18,
min_exposure=-6.0,
max_exposure=6.5):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
cs.aliases = aliases
lut_resolution_3d=64,
cleanup=True,
aliases=[]):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
cs = ColorSpace('%s' % lmt_name)
cs.description = 'The ACES Look Transform: %s' % lmt_name
cs.aliases = aliases
if 'transformCTLInverse' in lmt_values:
ctls = [os.path.join(aces_CTL_directory,
+ # TODO: Investigate "odt_values" undeclared
+ # variable.
odt_values['transformCTLInverse']),
shaper_from_ACES_CTL % aces_CTL_directory]
lut = 'Inverse.%s.%s.spi3d' % (odt_name, shaper_name)
return cs
+
# -------------------------------------------------------------------------
# *LMTs*
# -------------------------------------------------------------------------
def create_lmts(aces_CTL_directory,
- lut_directory,
+ lut_directory,
lut_resolution_1d,
lut_resolution_3d,
lmt_info,
shaper_name,
cleanup):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
colorspaces = []
return colorspaces
+
# -------------------------------------------------------------------------
# *ACES RRT* with supplied *ODT*.
# -------------------------------------------------------------------------
lut_resolution_3d=64,
cleanup=True,
aliases=[]):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
cs = ColorSpace('%s' % odt_name)
cs.description = '%s - %s Output Transform' % (
odt_values['transformUserNamePrefix'], odt_name)
return cs
+
# -------------------------------------------------------------------------
# *ODTs*
# -------------------------------------------------------------------------
def create_odts(aces_CTL_directory,
- lut_directory,
+ lut_directory,
lut_resolution_1d,
lut_resolution_3d,
odt_info,
cleanup,
linear_display_space,
log_display_space):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
colorspaces = []
displays = {}
# *AP1* primaries to *AP0* primaries.
log2_shaper_AP1.to_reference_transforms.append({
'type': 'matrix',
- 'matrix': mat44_from_mat33(ACES_AP1_to_AP0),
+ 'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
'direction': 'forward'
})
colorspaces.append(log2_shaper_AP1)
return (colorspaces, displays)
+
def create_aces():
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
+
# Defining the reference colorspace.
ACES = ColorSpace('ACES2065-1')
ACES.description = (
transform_full_legal_switch = False
for line in lines:
if line.strip() == "input varying int legalRange = 0":
- #print( "%s has legal range flag" % transform_user_name)
+ # print( "%s has legal range flag" % transform_user_name)
transform_full_legal_switch = True
break
- return (transform_id, transform_user_name, transform_user_name_prefix, transform_full_legal_switch)
+ return (transform_id, transform_user_name, transform_user_name_prefix,
+ transform_full_legal_switch)
+
def get_ODT_info(aces_CTL_directory):
"""
odts[odt_name]['transformID'] = transform_ID
odts[odt_name]['transformUserNamePrefix'] = transform_user_name_prefix
odts[odt_name]['transformUserName'] = transform_user_name
- odts[odt_name]['transformHasFullLegalSwitch'] = transform_full_legal_switch
+ odts[odt_name][
+ 'transformHasFullLegalSwitch'] = transform_full_legal_switch
forward_CTL = odts[odt_name]['transformCTL']
print('\tTransform ID : %s' % transform_ID)
print('\tTransform User Name Prefix : %s' % transform_user_name_prefix)
print('\tTransform User Name : %s' % transform_user_name)
- print('\tHas Full / Legal Switch : %s' % transform_full_legal_switch)
+ print(
+ '\tHas Full / Legal Switch : %s' % transform_full_legal_switch)
print('\tForward ctl : %s' % forward_CTL)
if 'transformCTLInverse' in odts[odt_name]:
inverse_CTL = odts[odt_name]['transformCTLInverse']
return lmts
-def create_colorspaces(aces_CTL_directory,
- lut_directory,
- lut_resolution_1d,
+
+def create_colorspaces(aces_CTL_directory,
+ lut_directory,
+ lut_resolution_1d,
lut_resolution_3d,
lmt_info,
odt_info,
ACES = create_aces()
- ACEScc = create_ACEScc(aces_CTL_directory, lut_directory, lut_resolution_1d, cleanup)
+ ACEScc = create_ACEScc(aces_CTL_directory, lut_directory,
+ lut_resolution_1d, cleanup)
colorspaces.append(ACEScc)
- ACESproxy = create_ACESproxy(aces_CTL_directory, lut_directory, lut_resolution_1d, cleanup)
+ ACESproxy = create_ACESproxy(aces_CTL_directory, lut_directory,
+ lut_resolution_1d, cleanup)
colorspaces.append(ACESproxy)
- ACEScg = create_ACEScg(aces_CTL_directory, lut_directory, lut_resolution_1d, cleanup)
+ ACEScg = create_ACEScg(aces_CTL_directory, lut_directory,
+ lut_resolution_1d, cleanup)
colorspaces.append(ACEScg)
ADX10 = create_ADX(lut_directory, lut_resolution_1d, bit_depth=10)
ADX16 = create_ADX(lut_directory, lut_resolution_1d, bit_depth=16)
colorspaces.append(ADX16)
- lmts = create_lmts(aces_CTL_directory,
- lut_directory,
- lut_resolution_1d,
+ lmts = create_lmts(aces_CTL_directory,
+ lut_directory,
+ lut_resolution_1d,
lut_resolution_3d,
lmt_info,
shaper_name,
cleanup)
colorspaces.extend(lmts)
- (odts, displays) = create_odts(aces_CTL_directory,
- lut_directory,
- lut_resolution_1d,
- lut_resolution_3d,
- odt_info,
- shaper_name,
- cleanup,
- ACES,
- ACEScc)
+ odts, displays = create_odts(aces_CTL_directory,
+ lut_directory,
+ lut_resolution_1d,
+ lut_resolution_3d,
+ odt_info,
+ shaper_name,
+ cleanup,
+ ACES,
+ ACEScc)
colorspaces.extend(odts)
- return (ACES, colorspaces, displays, ACEScc)
+ return ACES, colorspaces, displays, ACEScc
Defines objects creating the *ACES* configuration.
"""
-import math
import os
-import shutil
import sys
import PyOpenColorIO as ocio
import aces_ocio.create_sony_colorspaces as sony
import aces_ocio.create_general_colorspaces as general
-from aces_ocio.generate_lut import (
- generate_1d_LUT_from_CTL,
- generate_3d_LUT_from_CTL,
- write_SPI_1d)
from aces_ocio.process import Process
-from aces_ocio.utilities import ColorSpace, mat44_from_mat33, sanitize_path, compact
__author__ = 'ACES Developers'
__copyright__ = 'Copyright (C) 2014 - 2015 - ACES Developers'
'set_config_default_roles',
'write_config',
'generate_OCIO_transform',
+ 'add_colorspace_alias',
'create_config',
'generate_LUTs',
'generate_baked_LUTs',
transform['interpolation']],
direction=direction_options[transform['direction']])
ocio_transforms.append(ocio_transform)
-
+
# matrix transform
elif transform['type'] == 'matrix':
ocio_transform = ocio.MatrixTransform()
# color space transform
elif transform['type'] == 'colorspace':
- ocio_transform = ocio.ColorSpaceTransform( src=transform['src'],
- dst=transform['dst'],
- direction=direction_options['forward'] )
+ ocio_transform = ocio.ColorSpaceTransform(src=transform['src'],
+ dst=transform['dst'],
+ direction=
+ direction_options[
+ 'forward'])
ocio_transforms.append(ocio_transform)
# unknown type
return transform
-def add_colorspace_alias(config, reference_colorspace, colorspace, colorspace_alias_names):
+
+def add_colorspace_alias(config, reference_colorspace, colorspace,
+ colorspace_alias_names):
"""
Object description.
if colorspace.to_reference_transforms != []:
print("Generating To-Reference transforms")
- ocio_transform = generate_OCIO_transform([{
- 'type': 'colorspace',
- 'src': colorspace.name,
- 'dst': reference_colorspace.name,
- 'direction': 'forward'
- }])
+ ocio_transform = generate_OCIO_transform(
+ [{'type': 'colorspace',
+ 'src': colorspace.name,
+ 'dst': reference_colorspace.name,
+ 'direction': 'forward'}])
ocio_colorspace_alias.setTransform(
ocio_transform,
ocio.Constants.COLORSPACE_DIR_TO_REFERENCE)
if colorspace.from_reference_transforms != []:
print("Generating From-Reference transforms")
- ocio_transform = generate_OCIO_transform([{
- 'type': 'colorspace',
- 'src': reference_colorspace.name,
- 'dst': colorspace.name,
- 'direction': 'forward'
- }])
+ ocio_transform = generate_OCIO_transform(
+ [{'type': 'colorspace',
+ 'src': reference_colorspace.name,
+ 'dst': colorspace.name,
+ 'direction': 'forward'}])
ocio_colorspace_alias.setTransform(
ocio_transform,
ocio.Constants.COLORSPACE_DIR_FROM_REFERENCE)
# Add alias
if reference_data.aliases != []:
add_colorspace_alias(config, reference_data,
- reference_data, reference_data.aliases)
+ reference_data, reference_data.aliases)
print("")
# Add alias to normal colorspace, using compact name
#
if colorspace.aliases != []:
- add_colorspace_alias(config, reference_data,
- colorspace, colorspace.aliases)
+ add_colorspace_alias(config, reference_data,
+ colorspace, colorspace.aliases)
print('')
return config
+
def generate_LUTs(odt_info,
lmt_info,
shaper_name,
# *ACES* colorspaces
(aces_reference,
- aces_colorspaces,
+ aces_colorspaces,
aces_displays,
aces_log_display_space) = aces.create_colorspaces(aces_CTL_directory,
- lut_directory,
+ lut_directory,
lut_resolution_1d,
lut_resolution_3d,
lmt_info,
config_data['colorSpaces'].append(cs)
# *RED* colorspaces to *ACES*.
- red_colorspaces = red.create_colorspaces(lut_directory,
+ red_colorspaces = red.create_colorspaces(lut_directory,
lut_resolution_1d)
for cs in red_colorspaces:
config_data['colorSpaces'].append(cs)
return lut_directory
+
def create_ACES_config(aces_CTL_directory,
config_directory,
lut_resolution_1d=4096,
import os
import aces_ocio.generate_lut as genlut
-from aces_ocio.utilities import ColorSpace, mat44_from_mat33, sanitize_path, compact
+from aces_ocio.utilities import ColorSpace, mat44_from_mat33, sanitize_path
__author__ = 'ACES Developers'
Implements support for general colorspaces conversions and transfer functions.
"""
-import array
-import math
-import os
-
-import aces_ocio.generate_lut as genlut
import aces_ocio.create_aces_colorspaces as aces
-from aces_ocio.utilities import ColorSpace, mat44_from_mat33, sanitize_path, compact
+from aces_ocio.utilities import ColorSpace, mat44_from_mat33
__author__ = 'ACES Developers'
from_reference_values=None,
to_reference_values=None,
aliases=[]):
+ """
+ Object description.
+
+ Parameters
+ ----------
+ parameter : type
+ Parameter description.
+
+ Returns
+ -------
+ type
+ Return value description.
+ """
if from_reference_values is None:
- from_reference_values = []
+ from_reference_values = []
+
if to_reference_values is None:
- to_reference_values = []
+ to_reference_values = []
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
return cs
-def create_colorspaces(lut_directory,
- lut_resolution_1d,
- lut_resolution_3d):
+def create_colorspaces(lut_directory,
+ lut_resolution_1d,
+ lut_resolution_3d):
"""
Generates the colorspace conversions.
colorspaces = []
- cs = create_generic_matrix('XYZ',
- from_reference_values=[aces.ACES_AP0_to_XYZ],
- aliases=["lin_xyz"])
+ cs = create_generic_matrix('XYZ',
+ from_reference_values=[aces.ACES_AP0_TO_XYZ],
+ aliases=["lin_xyz"])
colorspaces.append(cs)
cs = create_generic_matrix(
- 'Linear - AP1',
- to_reference_values=[aces.ACES_AP1_to_AP0],
+ 'Linear - AP1',
+ to_reference_values=[aces.ACES_AP1_TO_AP0],
aliases=["lin_ap1"])
colorspaces.append(cs)
cs = create_generic_matrix(
'Linear - P3-D60',
- from_reference_values=[aces.ACES_AP0_to_XYZ, XYZ_to_P3D60],
+ from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_P3D60],
aliases=["lin_p3d60"])
colorspaces.append(cs)
cs = create_generic_matrix(
'Linear - P3-DCI',
- from_reference_values=[aces.ACES_AP0_to_XYZ, XYZ_to_P3DCI],
+ from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_P3DCI],
aliases=["lin_p3dci"])
colorspaces.append(cs)
cs = create_generic_matrix(
'Linear - Rec.709',
- from_reference_values=[aces.ACES_AP0_to_XYZ, XYZ_to_Rec709],
+ from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_Rec709],
aliases=["lin_rec709"])
colorspaces.append(cs)
cs = create_generic_matrix(
'Linear - Rec.2020',
- from_reference_values=[aces.ACES_AP0_to_XYZ, XYZ_to_Rec2020],
+ from_reference_values=[aces.ACES_AP0_TO_XYZ, XYZ_to_Rec2020],
aliases=["lin_rec2020"])
colorspaces.append(cs)
# *ACES* to *Linear*, *Pro Photo* primaries.
- AP0_to_RIMM = [ 1.2412367771, -0.1685692287, -0.0726675484,
- 0.0061203066, 1.083151174, -0.0892714806,
- -0.0032853314, 0.0099796402, 0.9933056912]
+ AP0_to_RIMM = [1.2412367771, -0.1685692287, -0.0726675484,
+ 0.0061203066, 1.083151174, -0.0892714806,
+ -0.0032853314, 0.0099796402, 0.9933056912]
cs = create_generic_matrix(
'Linear - ProPhoto',
colorspaces.append(cs)
# *ACES* to *Linear*, *Adobe RGB* primaries.
- AP0_to_ADOBERGB = [ 1.7245603168, -0.4199935942, -0.3045667227,
- -0.2764799142, 1.3727190877, -0.0962391734,
- -0.0261255258, -0.0901747807, 1.1163003065]
+ AP0_to_ADOBERGB = [1.7245603168, -0.4199935942, -0.3045667227,
+ -0.2764799142, 1.3727190877, -0.0962391734,
+ -0.0261255258, -0.0901747807, 1.1163003065]
cs = create_generic_matrix(
'Linear - Adobe RGB',
colorspaces.append(cs)
# *ACES* to *Linear*, *Adobe Wide Gamut RGB* primaries.
- AP0_to_ADOBERGB = [ 1.3809814778, -0.1158594573, -0.2651220205,
- 0.0057015535, 1.0402949043, -0.0459964578,
- -0.0038908746, -0.0597091815, 1.0636000561]
+ AP0_to_ADOBERGB = [1.3809814778, -0.1158594573, -0.2651220205,
+ 0.0057015535, 1.0402949043, -0.0459964578,
+ -0.0038908746, -0.0597091815, 1.0636000561]
cs = create_generic_matrix(
'Linear - Adobe Wide Gamut RGB',
return path.replace(' ', '_').replace(')', '_').replace('(', '_')
+
def compact(string):
"""
Removes blanks, underscores, dashes and parentheses