__status__ = 'Production'
__all__ = ['ACES_AP1_TO_AP0',
__status__ = 'Production'
__all__ = ['ACES_AP1_TO_AP0',
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
# -------------------------------------------------------------------------
# *ACEScg*
# -------------------------------------------------------------------------
# -------------------------------------------------------------------------
# *ACEScg*
# -------------------------------------------------------------------------
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
cs.aliases = ['acescg', 'lin_ap1']
cs = ColorSpace(name)
cs.description = 'The %s color space' % name
cs.aliases = ['acescg', 'lin_ap1']
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
cs.from_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP0_TO_AP1),
cs.from_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP0_TO_AP1),
# *ADX*
# -------------------------------------------------------------------------
def create_ADX(lut_directory,
# *ADX*
# -------------------------------------------------------------------------
def create_ADX(lut_directory,
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': [0.75573, 0.22197, 0.02230, 0,
cs.to_reference_transforms.append({
'type': 'matrix',
'matrix': [0.75573, 0.22197, 0.02230, 0,
return (100 / 55) * x - REF_PT
def fit(value, from_min, from_max, to_min, to_max):
return (100 / 55) * x - REF_PT
def fit(value, from_min, from_max, to_min, to_max):
# -------------------------------------------------------------------------
def create_generic_log(aces_ctl_directory,
lut_directory,
# -------------------------------------------------------------------------
def create_generic_log(aces_ctl_directory,
lut_directory,
'minExposure': min_exposure,
'maxExposure': max_exposure},
cleanup,
'minExposure': min_exposure,
'maxExposure': max_exposure},
cleanup,
# -------------------------------------------------------------------------
def create_ACES_LMT(lmt_name,
lmt_values,
shaper_info,
aces_ctl_directory,
lut_directory,
# -------------------------------------------------------------------------
def create_ACES_LMT(lmt_name,
lmt_values,
shaper_info,
aces_ctl_directory,
lut_directory,
os.path.join(aces_ctl_directory,
lmt_values['transformCTL'])]
lut = '%s.%s.spi3d' % (shaper_name, lmt_name)
os.path.join(aces_ctl_directory,
lmt_values['transformCTL'])]
lut = '%s.%s.spi3d' % (shaper_name, lmt_name)
if 'transformCTLInverse' in lmt_values:
ctls = [os.path.join(aces_ctl_directory,
lmt_values['transformCTLInverse']),
if 'transformCTLInverse' in lmt_values:
ctls = [os.path.join(aces_ctl_directory,
lmt_values['transformCTLInverse']),
- shaper_from_ACES_CTL % aces_ctl_directory]
- lut = 'Inverse.%s.%s.spi3d' % (odt_name, shaper_name)
+ shaper_from_aces_ctl % aces_ctl_directory]
+ lut = 'Inverse.%s.%s.spi3d' % (lmt_name, shaper_name)
- sorted_LMTs = sorted(lmt_info.iteritems(), key=lambda x: x[1])
- print(sorted_LMTs)
- for lmt in sorted_LMTs:
+ sorted_lmts = sorted(lmt_info.iteritems(), key=lambda x: x[1])
+ print(sorted_lmts)
+ for lmt in sorted_lmts:
lmt_name, lmt_values = lmt
lmt_aliases = ['look_%s' % compact(lmt_values['transformUserName'])]
cs = create_ACES_LMT(
lmt_name, lmt_values = lmt
lmt_aliases = ['look_%s' % compact(lmt_values['transformUserName'])]
cs = create_ACES_LMT(
'interpolation': 'tetrahedral',
'direction': 'forward'})
elif 'transformCTL' in odt_values:
ctls = [
'interpolation': 'tetrahedral',
'direction': 'forward'})
elif 'transformCTL' in odt_values:
ctls = [
generate_3d_LUT_from_CTL(
os.path.join(lut_directory, lut),
generate_3d_LUT_from_CTL(
os.path.join(lut_directory, lut),
shutil.copy(odt_values['transformLUTInverse'], lut)
cs.to_reference_transforms.append({
'type': 'lutFile',
shutil.copy(odt_values['transformLUTInverse'], lut)
cs.to_reference_transforms.append({
'type': 'lutFile',
shaper_inverse['direction'] = 'forward'
cs.to_reference_transforms.append(shaper_inverse)
elif 'transformCTLInverse' in odt_values:
shaper_inverse['direction'] = 'forward'
cs.to_reference_transforms.append(shaper_inverse)
elif 'transformCTLInverse' in odt_values:
lut = 'InvRRT.a1.0.0.%s.%s.spi3d' % (odt_name, shaper_name)
lut = sanitize(lut)
generate_3d_LUT_from_CTL(
os.path.join(lut_directory, lut),
lut = 'InvRRT.a1.0.0.%s.%s.spi3d' % (odt_name, shaper_name)
lut = sanitize(lut)
generate_3d_LUT_from_CTL(
os.path.join(lut_directory, lut),
# Space with a more user-friendly name. Direct copy otherwise.
log2_shaper_copy_name = 'Log2 Shaper'
log2_shaper_copy_colorspace = ColorSpace(log2_shaper_copy_name)
# Space with a more user-friendly name. Direct copy otherwise.
log2_shaper_copy_name = 'Log2 Shaper'
log2_shaper_copy_colorspace = ColorSpace(log2_shaper_copy_name)
log2_shaper_copy_colorspace.aliases = [
'crv_%s' % compact(log2_shaper_copy_name)]
log2_shaper_copy_colorspace.equality_group = log2_shaper_copy_name
log2_shaper_copy_colorspace.aliases = [
'crv_%s' % compact(log2_shaper_copy_name)]
log2_shaper_copy_colorspace.equality_group = log2_shaper_copy_name
# Defining the *Log2 shaper that includes the AP1* primaries.
log2_shaper_api1_name = '%s - AP1' % 'Log2 Shaper'
log2_shaper_api1_colorspace = ColorSpace(log2_shaper_api1_name)
# Defining the *Log2 shaper that includes the AP1* primaries.
log2_shaper_api1_name = '%s - AP1' % 'Log2 Shaper'
log2_shaper_api1_colorspace = ColorSpace(log2_shaper_api1_name)
log2_shaper_api1_colorspace.aliases = [
'%s_ap1' % compact(log2_shaper_copy_name)]
log2_shaper_api1_colorspace.equality_group = log2_shaper_api1_name
log2_shaper_api1_colorspace.aliases = [
'%s_ap1' % compact(log2_shaper_copy_name)]
log2_shaper_api1_colorspace.equality_group = log2_shaper_api1_name
log2_shaper_api1_colorspace.from_reference_transforms = list(
log2_shaper_colorspace.from_reference_transforms)
log2_shaper_api1_colorspace.from_reference_transforms = list(
log2_shaper_colorspace.from_reference_transforms)
log2_shaper_api1_colorspace.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
log2_shaper_api1_colorspace.to_reference_transforms.append({
'type': 'matrix',
'matrix': mat44_from_mat33(ACES_AP1_TO_AP0),
- # Defining the *Log2 shaper that includes the AP1* primaries.
- # Named with 'shaper_name' variable. Needed for some LUT baking steps.
+ # Defining the *Log2* shaper that includes the *AP1* primaries.
+ # Named with `shaper_name` variable and needed for some *LUT* baking steps.
shaper_api1_colorspace.aliases = ['%s_ap1' % compact(shaper_name)]
shaper_api1_colorspace.equality_group = shaper_api1_name
shaper_api1_colorspace.family = log2_shaper_colorspace.family
shaper_api1_colorspace.aliases = ['%s_ap1' % compact(shaper_name)]
shaper_api1_colorspace.equality_group = shaper_api1_name
shaper_api1_colorspace.family = log2_shaper_colorspace.family
- dolbypq_shaper_name = 'Dolby PQ 10000'
- dolbypq_shaper_name_aliases = ['crv_%s' % 'dolbypq_10000']
+ dolby_pq_shaper_name = 'Dolby PQ 10000'
+ dolby_pq_shaper_name_aliases = ['crv_%s' % 'dolbypq_10000']
- name=dolbypq_shaper_name,
- aliases=dolbypq_shaper_name_aliases)
- colorspaces.append(dolbypq_shaper_colorspace)
+ name=dolby_pq_shaper_name,
+ aliases=dolby_pq_shaper_name_aliases)
+ colorspaces.append(dolby_pq_shaper_colorspace)
- #
- dolbypq_scaled_shaper_name = 'Dolby PQ Scaled'
- dolbypq_scaled_shaper_name_aliases = ['crv_%s' % 'dolbypq_scaled']
+ dolby_pq_scaled_shaper_name = 'Dolby PQ Scaled'
+ dolby_pq_scaled_shaper_name_aliases = ['crv_%s' % 'dolbypq_scaled']
- name=dolbypq_scaled_shaper_name,
- aliases=dolbypq_scaled_shaper_name_aliases)
- colorspaces.append(dolbypq_scaled_shaper_colorspace)
+ name=dolby_pq_scaled_shaper_name,
+ aliases=dolby_pq_scaled_shaper_name_aliases)
+ colorspaces.append(dolby_pq_scaled_shaper_colorspace)
- dolbypq_scaled_shaper_data = [
- dolbypq_scaled_shaper_name,
+ dolby_pq_scaled_shaper_data = [
+ dolby_pq_scaled_shaper_name,
# *RRT + ODT* combinations.
sorted_odts = sorted(odt_info.iteritems(), key=lambda x: x[1])
# *RRT + ODT* combinations.
sorted_odts = sorted(odt_info.iteritems(), key=lambda x: x[1])
- # Generating only full range transform for *ODTs* that can generate
- # either *legal* or *full* output.
+ # Defining full range transform for *ODTs* that can generate either
+ # *legal* or *full* output.
- # Uncomment these lines and the lower section and flip the 'legalRange' value to 1
- # to recover the old behavior, where both legal and full range LUTs were generated
+ # Uncomment these lines and the lower section and
+ # flip the `legalRange` value to 1 to restore the old behavior,
+ # where both *legal* or *full* range *LUTs* were generated.
if odt_values['transformHasFullLegalSwitch']:
# odt_name_legal = '%s - Legal' % odt_values['transformUserName']
odt_legal['legalRange'] = 0
if odt_values['transformHasFullLegalSwitch']:
# odt_name_legal = '%s - Legal' % odt_values['transformUserName']
odt_legal['legalRange'] = 0
odt_path_tokens = os.path.split(odt_path_tokens[-2])
odt_dir = os.path.join(odt_path_tokens[-1], odt_dir)
odt_path_tokens = os.path.split(odt_path_tokens[-2])
odt_dir = os.path.join(odt_path_tokens[-1], odt_dir)
- # Building full name,
- transform_CTL = odt_tokens[-1]
- odt_name = string.join(transform_CTL.split('.')[1:-1], '.')
+ # Building full name.
+ transform_ctl = odt_tokens[-1]
+ odt_name = string.join(transform_ctl.split('.')[1:-1], '.')
transform_user_name,
transform_user_name_prefix,
transform_full_legal_switch) = get_transform_info(
transform_user_name,
transform_user_name_prefix,
transform_full_legal_switch) = get_transform_info(
- os.path.join(aces_ctl_directory, 'odt', odt_dir, transform_CTL))
+ os.path.join(aces_ctl_directory, 'odt', odt_dir, transform_ctl))
- os.path.join(odt_tokens[-2], transform_CTL_inverse)):
- transform_CTL_inverse = None
+ os.path.join(odt_tokens[-2], transform_ctl_inverse)):
+ transform_ctl_inverse = None
- odts[odt_name]['transformCTL'] = os.path.join(odt_dir, transform_CTL)
- if transform_CTL_inverse is not None:
+ odts[odt_name]['transformCTL'] = os.path.join(odt_dir, transform_ctl)
+ if transform_ctl_inverse is not None:
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]['transformUserNamePrefix'] = transform_user_name_prefix
odts[odt_name]['transformUserName'] = transform_user_name
odts[odt_name][
'transformHasFullLegalSwitch'] = transform_full_legal_switch
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('\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)
- transform_CTL = lmt_tokens[-1]
- lmt_name = string.join(transform_CTL.split('.')[1:-1], '.')
+ transform_ctl = lmt_tokens[-1]
+ lmt_name = string.join(transform_ctl.split('.')[1:-1], '.')
transform_user_name,
transform_user_name_prefix,
transform_full_legal_switch) = get_transform_info(
transform_user_name,
transform_user_name_prefix,
transform_full_legal_switch) = get_transform_info(
- os.path.join(lmt_tokens[-2], transform_CTL_inverse)):
- transform_CTL_inverse = None
+ os.path.join(lmt_tokens[-2], transform_ctl_inverse)):
+ transform_ctl_inverse = None
- lmts[lmt_name]['transformCTL'] = os.path.join(lmt_dir, transform_CTL)
- if transform_CTL_inverse is not None:
+ lmts[lmt_name]['transformCTL'] = os.path.join(lmt_dir, transform_ctl)
+ if transform_ctl_inverse is not None:
lmts[lmt_name]['transformUserNamePrefix'] = transform_user_name_prefix
lmts[lmt_name]['transformUserName'] = transform_user_name
lmts[lmt_name]['transformUserNamePrefix'] = transform_user_name_prefix
lmts[lmt_name]['transformUserName'] = transform_user_name
print('\tTransform User Name Prefix : %s' % transform_user_name_prefix)
print('\tTransform User Name : %s' % transform_user_name)
print('\tTransform User Name Prefix : %s' % transform_user_name_prefix)
print('\tTransform User Name : %s' % transform_user_name)
lut_resolution_1d, cleanup)
colorspaces.append(ACESproxy)
lut_resolution_1d, cleanup)
colorspaces.append(ACESproxy)
- ACEScg = create_ACEScg(aces_ctl_directory, lut_directory,
- lut_resolution_1d, cleanup)
+ ACEScg = create_ACEScg()
colorspaces.append(ADX16)
lmts = create_LMTs(aces_ctl_directory,
colorspaces.append(ADX16)
lmts = create_LMTs(aces_ctl_directory,
- # Wish there was an automatic way to get this from the CTL
- defaultDisplay = 'sRGB (D60 sim.)'
+ # TODO: Investigate if there is a way to retrieve the value from *CTL*.
+ default_display = 'sRGB (D60 sim.)'
roles = {'color_picking': ACEScg.name,
'color_timing': ACEScc.name,
roles = {'color_picking': ACEScg.name,
'color_timing': ACEScc.name,
- return ACES, colorspaces, displays, ACEScc, roles, defaultDisplay
+ return ACES, colorspaces, displays, ACEScc, roles, default_display