def test_constructor_wrong_parameter_type(self):
        """
        Test AllocationTransform constructor with a wrong parameter type.
        """

        for invalid in (None, 1):
            with self.assertRaises(TypeError):
                allo_tr = OCIO.AllocationTransform(invalid)
    def test_values(self):
        """
        Test setValue() and getValue().
        """

        gct = OCIO.GradingRGBCurveTransform(OCIO.GRADING_LOG)
        gct.setValue(self.valDefaultLin)
        assertEqualRGBCurve(self, gct.getValue(), self.valDefaultLin)
Exemple #3
0
    def test_constructor_wrong_parameter_type(self):
        """
        Test FileTransform constructor with a wrong parameter type.
        """

        for invalid in (None, 1):
            with self.assertRaises(TypeError):
                file_tr = OCIO.ExponentTransform(invalid)
Exemple #4
0
    def test_constructor_wrong_parameter_type(self):
        """
        Test ExposureContrastTransform constructor with a wrong parameter type.
        """

        for invalid in (None, 1, self.TEST_ID):
            with self.assertRaises(TypeError):
                exp_tr = OCIO.ExponentWithLinearTransform(invalid)
    def test_constructor_wrong_parameter_type(self):
        """
        Test FixedFunctionTransform constructor with a wrong parameter type.
        """

        for invalid in (None, 1):
            with self.assertRaises(TypeError):
                fixed_func_tr = OCIO.FixedFunctionTransform(invalid)
Exemple #6
0
    def test_constructor_with_keyword(self):
        """
        Test ColorSpace constructor with keywords and validate its values.
        """

        # With keywords in their proper order.
        cs = OCIO.ColorSpace(name='test',
                             family='ocio family',
                             encoding='scene-linear',
                             equalityGroup='My_Equality',
                             description='This is a test colourspace!',
                             bitDepth=OCIO.BIT_DEPTH_F32,
                             isData=False,
                             allocation=OCIO.ALLOCATION_LG2,
                             allocationVars=[0.0, 1.0])

        self.assertEqual(cs.getName(), 'test')
        self.assertEqual(cs.getFamily(), 'ocio family')
        self.assertEqual(cs.getEncoding(), 'scene-linear')
        self.assertEqual(cs.getEqualityGroup(), 'My_Equality')
        self.assertEqual(cs.getDescription(), 'This is a test colourspace!')
        self.assertEqual(cs.getBitDepth(), OCIO.BIT_DEPTH_F32)
        self.assertFalse(cs.isData())
        self.assertEqual(cs.getAllocation(), OCIO.ALLOCATION_LG2)
        self.assertEqual(cs.getAllocationVars(), [0.0, 1.0])

        # With keyword not in their proper order.
        cs2 = OCIO.ColorSpace(family='ocio family',
                              name='test',
                              isData=False,
                              allocationVars=[0.0, 1.0],
                              allocation=OCIO.ALLOCATION_LG2,
                              description='This is a test colourspace!',
                              equalityGroup='My_Equality',
                              encoding='scene-linear',
                              bitDepth=OCIO.BIT_DEPTH_F32)

        self.assertEqual(cs2.getName(), 'test')
        self.assertEqual(cs2.getFamily(), 'ocio family')
        self.assertEqual(cs2.getEncoding(), 'scene-linear')
        self.assertEqual(cs2.getEqualityGroup(), 'My_Equality')
        self.assertEqual(cs2.getDescription(), 'This is a test colourspace!')
        self.assertEqual(cs2.getBitDepth(), OCIO.BIT_DEPTH_F32)
        self.assertFalse(cs2.isData())
        self.assertEqual(cs2.getAllocation(), OCIO.ALLOCATION_LG2)
        self.assertEqual(cs2.getAllocationVars(), [0.0, 1.0])
def make_raw_color_space():
    cs = OCIO.ColorSpace(name='raw')
    cs.setDescription("raw")
    cs.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
    cs.setAllocation(OCIO.Constants.ALLOCATION_UNIFORM)
    cs.setAllocationVars([0, 1])

    return cs
 def test_interface(self):
     
     OCIO.ClearAllCaches()
     #self.assertEqual("1.0.8", OCIO.version)
     #self.assertEqual(16779264, OCIO.hexversion)
     self.assertEqual(OCIO.Constants.LOGGING_LEVEL_INFO, OCIO.GetLoggingLevel())
     OCIO.SetLoggingLevel(OCIO.Constants.LOGGING_LEVEL_NONE)
     self.assertEqual(OCIO.Constants.LOGGING_LEVEL_NONE, OCIO.GetLoggingLevel())
     foo = OCIO.GetCurrentConfig()
     self.assertEqual(self.FOO, foo.serialize())
     OCIO.SetLoggingLevel(OCIO.Constants.LOGGING_LEVEL_INFO)
     bar = OCIO.Config().CreateFromStream(foo.serialize())
     OCIO.SetCurrentConfig(bar)
     wee = OCIO.GetCurrentConfig()
Exemple #9
0
def aces_rec709_output():
    """ACES Rec. 709 output"""
    col_space = OCIO.ColorSpace(name="Output - ACES Rec. 709", family="Output")
    col_space.setDescription("ACES Rec. 709 output transform")
    col_space.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
    group_xform = OCIO.GroupTransform()
    group_xform.push_back(
        OCIO.FileTransform("Log2_48_nits_Shaper_to_linear.spi1d",
                           interpolation=OCIO.Constants.INTERP_LINEAR,
                           direction=OCIO.Constants.TRANSFORM_DIR_INVERSE))
    group_xform.push_back(
        OCIO.FileTransform("Log2_48_nits_Shaper.RRT.Rec.709.spi3d",
                           interpolation=OCIO.Constants.INTERP_TETRAHEDRAL))
    col_space.setTransform(group_xform,
                           OCIO.Constants.COLORSPACE_DIR_FROM_REFERENCE)

    group_xform = OCIO.GroupTransform()
    group_xform.push_back(
        OCIO.FileTransform("InvRRT.Rec.709.Log2_48_nits_Shaper.spi3d",
                           interpolation=OCIO.Constants.INTERP_TETRAHEDRAL))
    group_xform.push_back(
        OCIO.FileTransform("Log2_48_nits_Shaper_to_linear.spi1d",
                           interpolation=OCIO.Constants.INTERP_LINEAR,
                           direction=OCIO.Constants.TRANSFORM_DIR_FORWARD))
    col_space.setTransform(group_xform,
                           OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
    return col_space
Exemple #10
0
    def test_default_contructor(self):
        """
        Test the constructor.
        """
        for ref_type in OCIO.ReferenceSpaceType.__members__.values():
            vt = OCIO.ViewTransform(ref_type)
            self.assertEqual(vt.getReferenceSpaceType(), ref_type)
            self.assertEqual(vt.getName(), '')
            self.assertEqual(vt.getFamily(), '')
            self.assertEqual(vt.getDescription(), '')
            self.assertEqual(len(vt.getCategories()), 0)
            for dir in OCIO.ViewTransformDirection.__members__.values():
                self.assertEqual(vt.getTransform(dir), None)

        vt = OCIO.ViewTransform()
        self.assertEqual(vt.getReferenceSpaceType(),
                         OCIO.REFERENCE_SPACE_SCENE)

        vt = OCIO.ViewTransform(referenceSpace=OCIO.REFERENCE_SPACE_DISPLAY)
        self.assertEqual(vt.getReferenceSpaceType(),
                         OCIO.REFERENCE_SPACE_DISPLAY)

        vt = OCIO.ViewTransform(name='test')
        self.assertEqual(vt.getName(), 'test')

        vt = OCIO.ViewTransform(family='family')
        self.assertEqual(vt.getFamily(), 'family')

        vt = OCIO.ViewTransform(description='description')
        self.assertEqual(vt.getDescription(), 'description')

        vt = OCIO.ViewTransform(categories=['cat1', 'cat2'])
        cats = vt.getCategories()
        self.assertEqual(len(cats), 2)
        self.assertEqual(cats[0], 'cat1')
        self.assertEqual(cats[1], 'cat2')

        mat = OCIO.MatrixTransform()
        vt = OCIO.ViewTransform(toReference=mat)
        self.assertTrue(
            vt.getTransform(OCIO.VIEWTRANSFORM_DIR_TO_REFERENCE).equals(mat))

        vt = OCIO.ViewTransform(fromReference=mat)
        self.assertTrue(
            vt.getTransform(OCIO.VIEWTRANSFORM_DIR_FROM_REFERENCE).equals(mat))
Exemple #11
0
    def test_family(self):
        """
        Test get/setFamily.
        """
        vt = OCIO.ViewTransform()
        self.assertEqual(vt.getFamily(), '')

        vt.setFamily('test family')
        self.assertEqual(vt.getFamily(), 'test family')
Exemple #12
0
def acesproxy_colorspace():
    """ACESproxy"""
    col_space = OCIO.ColorSpace(name="ACES - ACESproxy", family="ACES")
    col_space.setDescription("ACESproxy colorspace, gamma and primaries")
    col_space.setBitDepth(OCIO.Constants.BIT_DEPTH_F32)
    col_space.setAllocationVars([0, 1])
    col_space.setAllocation(OCIO.Constants.ALLOCATION_UNIFORM)
    group_xform = OCIO.GroupTransform()
    group_xform.push_back(
        OCIO.FileTransform("ACESproxy_to_linear.spi1d",
                           interpolation=OCIO.Constants.INTERP_LINEAR,
                           direction=OCIO.Constants.TRANSFORM_DIR_FORWARD))
    group_xform.push_back(
        OCIO.FileTransform("AP1_to_AP0.spimtx",
                           direction=OCIO.Constants.TRANSFORM_DIR_FORWARD))
    col_space.setTransform(group_xform,
                           OCIO.Constants.COLORSPACE_DIR_TO_REFERENCE)
    return col_space
Exemple #13
0
    def test_constructor_positional(self):
        # Positional args
        builtin_tr = OCIO.BuiltinTransform(self.EXAMPLE_STYLE, 
                                           OCIO.TRANSFORM_DIR_FORWARD)

        self.assertEqual(builtin_tr.getStyle(), self.EXAMPLE_STYLE)
        self.assertEqual(builtin_tr.getDescription(), self.EXAMPLE_DESC)
        self.assertEqual(builtin_tr.getDirection(), 
                         OCIO.TRANSFORM_DIR_FORWARD)
Exemple #14
0
    def test_constructor_with_positional(self):
        """
        Test Look constructor without keywords and validate its values.
        """

        exp_tr = OCIO.ExponentTransform()
        inv_exp_tr = OCIO.ExponentTransform()
        look = OCIO.Look('coollook',
                         'somespace',
                         exp_tr,
                         inv_exp_tr,
                         'this is a test')

        self.assertEqual(look.getName(), 'coollook')
        self.assertEqual(look.getProcessSpace(), 'somespace')
        self.assertIsInstance(look.getTransform(), type(exp_tr))
        self.assertIsInstance(look.getInverseTransform(), type(inv_exp_tr))
        self.assertEqual(look.getDescription(), 'this is a test')
    def test_display_view_transform(self):
        """
        Test the get/setDisplayViewTransform functions.
        """
        pipeline = OCIO.LegacyViewingPipeline()
        self.assertEqual(pipeline.getDisplayViewTransform(), None)
        dvt = OCIO.DisplayViewTransform(src='test', display='display', view='view')
        pipeline.setDisplayViewTransform(dvt)
        self.assertEqual(pipeline.getDisplayViewTransform().getSrc(), 'test')
        pipeline.setDisplayViewTransform(None)
        self.assertEqual(pipeline.getDisplayViewTransform(), None)

        with self.assertRaises(TypeError):
            pipeline.setDisplayViewTransform()
        with self.assertRaises(TypeError):
            pipeline.setDisplayViewTransform(OCIO.TRANSFORM_DIR_FORWARD)
        with self.assertRaises(TypeError):
            pipeline.setDisplayViewTransform(False)
Exemple #16
0
 def test_interface(self):
     desc = OCIO.GpuShaderDesc()
     desc.setLanguage(OCIO.Constants.GPU_LANGUAGE_GLSL_1_3)
     self.assertEqual(OCIO.Constants.GPU_LANGUAGE_GLSL_1_3, desc.getLanguage())
     desc.setFunctionName("foo123")
     self.assertEqual("foo123", desc.getFunctionName())
     desc.finalize()
     self.assertEqual("glsl_1.3 foo123 ocio outColor $664fefaf8040c8fae4a3b56f2239872d", 
                      desc.getCacheID())
Exemple #17
0
 def test_interface(self):
     desc = OCIO.GpuShaderDesc()
     desc.setLanguage(OCIO.Constants.GPU_LANGUAGE_GLSL_1_3)
     self.assertEqual(OCIO.Constants.GPU_LANGUAGE_GLSL_1_3, desc.getLanguage())
     desc.setFunctionName("foo123")
     self.assertEqual("foo123", desc.getFunctionName())
     desc.setLut3DEdgeLen(32)
     self.assertEqual(32, desc.getLut3DEdgeLen())
     self.assertEqual("glsl_1.3 foo123 32", desc.getCacheID())
    def test_constructor_with_keyword(self):
        """
        Test LogTransform constructor with keywords and validate its values.
        """

        # With keywords in their proper order.
        log_tr = OCIO.LogTransform(base=self.TEST_BASE,
                                   direction=self.TEST_DIRECTION)

        self.assertEqual(log_tr.getBase(), self.TEST_BASE)
        self.assertEqual(log_tr.getDirection(), self.TEST_DIRECTION)

        # With keywords not in their proper order.
        log_tr2 = OCIO.LogTransform(direction=self.TEST_DIRECTION,
                                    base=self.TEST_BASE)

        self.assertEqual(log_tr2.getBase(), self.TEST_BASE)
        self.assertEqual(log_tr2.getDirection(), self.TEST_DIRECTION)
Exemple #19
0
    def test_constructor_keyword(self):
        # Keyword args in order
        builtin_tr1 = OCIO.BuiltinTransform(
            style=self.EXAMPLE_STYLE, direction=OCIO.TRANSFORM_DIR_FORWARD)

        self.assertEqual(builtin_tr1.getStyle(), self.EXAMPLE_STYLE)
        self.assertEqual(builtin_tr1.getDescription(), self.EXAMPLE_DESC)
        self.assertEqual(builtin_tr1.getDirection(),
                         OCIO.TRANSFORM_DIR_FORWARD)

        # Keyword args out of order
        builtin_tr2 = OCIO.BuiltinTransform(
            direction=OCIO.TRANSFORM_DIR_FORWARD, style=self.EXAMPLE_STYLE)

        self.assertEqual(builtin_tr2.getStyle(), self.EXAMPLE_STYLE)
        self.assertEqual(builtin_tr2.getDescription(), self.EXAMPLE_DESC)
        self.assertEqual(builtin_tr2.getDirection(),
                         OCIO.TRANSFORM_DIR_FORWARD)
    def test_dynamic(self):
        """
        Test isDynamic() and makeDynamic().
        """

        gct = OCIO.GradingRGBCurveTransform(OCIO.GRADING_LOG)
        self.assertEqual(gct.isDynamic(), False)
        gct.makeDynamic()
        self.assertEqual(gct.isDynamic(), True)
Exemple #21
0
    def test_name(self):
        """
        Test get/setName.
        """
        vt = OCIO.ViewTransform()
        self.assertEqual(vt.getName(), '')

        vt.setName('test name')
        self.assertEqual(vt.getName(), 'test name')
Exemple #22
0
    def test_description(self):
        """
        Test get/setDescription.
        """
        vt = OCIO.ViewTransform()
        self.assertEqual(vt.getDescription(), '')

        vt.setDescription('test description')
        self.assertEqual(vt.getDescription(), 'test description')
    def test_aliases(self):
        """
        Test NamedTransform aliases.
        """

        named_tr = OCIO.NamedTransform()
        self.assertEqual(named_tr.getName(), '')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 0)

        named_tr.addAlias('alias1')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 1)
        self.assertEqual(aliases[0], 'alias1')

        named_tr.addAlias('alias2')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 2)
        self.assertEqual(aliases[0], 'alias1')
        self.assertEqual(aliases[1], 'alias2')

        # Alias is already there, not added.

        named_tr.addAlias('Alias2')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 2)
        self.assertEqual(aliases[0], 'alias1')
        self.assertEqual(aliases[1], 'alias2')

        # Name might remove an alias.

        named_tr.setName('name')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 2)

        named_tr.setName('alias2')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 1)
        self.assertEqual(aliases[0], 'alias1')

        # Removing an alias.

        named_tr.addAlias('to remove')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 2)

        named_tr.removeAlias('not found')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 2)

        named_tr.removeAlias('to REMOVE')
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 1)

        named_tr.clearAliases()
        aliases = named_tr.getAliases()
        self.assertEqual(len(aliases), 0)
Exemple #24
0
 def test_interface(self):
     lk = OCIO.Look()
     lk.setName("coollook")
     self.assertEqual("coollook", lk.getName())
     lk.setProcessSpace("somespace")
     self.assertEqual("somespace", lk.getProcessSpace())
     et = OCIO.ExponentTransform()
     et.setValue([0.1, 0.2, 0.3, 0.4])
     lk.setTransform(et)
     oet = lk.getTransform()
     vals = oet.getValue()
     self.assertAlmostEqual(0.2, vals[1], delta=1e-8)
     iet = OCIO.ExponentTransform()
     iet.setValue([-0.1, -0.2, -0.3, -0.4])
     lk.setInverseTransform(iet)
     ioet = lk.getInverseTransform()
     vals2 = ioet.getValue()
     self.assertAlmostEqual(-0.2, vals2[1], delta=1e-8)
    def test_constructor_with_positional(self):
        """
        Test LogTransform constructor without keywords and validate its values.
        """

        log_tr = OCIO.LogTransform(self.TEST_BASE, self.TEST_DIRECTION)

        self.assertEqual(log_tr.getBase(), self.TEST_BASE)
        self.assertEqual(log_tr.getDirection(), self.TEST_DIRECTION)
    def test_interface(self):

        rt = OCIO.RangeTransform()
        self.assertEqual(rt.hasMinInValue(), False)
        self.assertEqual(rt.hasMaxInValue(), False)
        self.assertEqual(rt.hasMinOutValue(), False)
        self.assertEqual(rt.hasMaxOutValue(), False)

        rt.setMinInValue(0.12301234)
        self.assertEqual(0.12301234, rt.getMinInValue())
        self.assertEqual(rt.hasMinInValue(), True)

        rt.setMaxInValue(0.12401234)
        self.assertEqual(0.12401234, rt.getMaxInValue())
        self.assertEqual(rt.hasMaxInValue(), True)

        rt.setMinOutValue(0.12501234)
        self.assertEqual(0.12501234, rt.getMinOutValue())
        self.assertEqual(rt.hasMinOutValue(), True)

        rt.setMaxOutValue(0.12601234)
        self.assertEqual(0.12601234, rt.getMaxOutValue())
        self.assertEqual(rt.hasMaxOutValue(), True)

        self.assertEqual(0.12301234, rt.getMinInValue())
        self.assertEqual(0.12401234, rt.getMaxInValue())
        self.assertEqual(0.12501234, rt.getMinOutValue())
        self.assertEqual(0.12601234, rt.getMaxOutValue())

        self.assertEqual(rt.hasMinInValue(), True)
        self.assertEqual(rt.hasMaxInValue(), True)
        self.assertEqual(rt.hasMinOutValue(), True)
        self.assertEqual(rt.hasMaxOutValue(), True)

        rt.unsetMinInValue()
        self.assertEqual(rt.hasMinInValue(), False)
        self.assertEqual(rt.hasMaxInValue(), True)
        self.assertEqual(rt.hasMinOutValue(), True)
        self.assertEqual(rt.hasMaxOutValue(), True)

        rt.unsetMaxInValue()
        self.assertEqual(rt.hasMinInValue(), False)
        self.assertEqual(rt.hasMaxInValue(), False)
        self.assertEqual(rt.hasMinOutValue(), True)
        self.assertEqual(rt.hasMaxOutValue(), True)

        rt.unsetMinOutValue()
        self.assertEqual(rt.hasMinInValue(), False)
        self.assertEqual(rt.hasMaxInValue(), False)
        self.assertEqual(rt.hasMinOutValue(), False)
        self.assertEqual(rt.hasMaxOutValue(), True)

        rt.unsetMaxOutValue()
        self.assertEqual(rt.hasMinInValue(), False)
        self.assertEqual(rt.hasMaxInValue(), False)
        self.assertEqual(rt.hasMinOutValue(), False)
        self.assertEqual(rt.hasMaxOutValue(), False)
Exemple #27
0
    def test_aliases(self):
        """
        Test NamedTransform aliases.
        """

        cs = OCIO.ColorSpace()
        self.assertEqual(cs.getName(), '')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 0)

        cs.addAlias('alias1')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 1)
        self.assertEqual(aliases[0], 'alias1')

        cs.addAlias('alias2')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 2)
        self.assertEqual(aliases[0], 'alias1')
        self.assertEqual(aliases[1], 'alias2')

        # Alias is already there, not added.

        cs.addAlias('Alias2')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 2)
        self.assertEqual(aliases[0], 'alias1')
        self.assertEqual(aliases[1], 'alias2')

        # Name might remove an alias.

        cs.setName('name')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 2)

        cs.setName('alias2')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 1)
        self.assertEqual(aliases[0], 'alias1')

        # Removing an alias.

        cs.addAlias('to remove')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 2)

        cs.removeAlias('not found')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 2)

        cs.removeAlias('to REMOVE')
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 1)

        cs.clearAliases()
        aliases = cs.getAliases()
        self.assertEqual(len(aliases), 0)
    def test_style(self):
        """
        Test setStyle() and getStyle().
        """

        gpt = OCIO.GradingPrimaryTransform(OCIO.GRADING_LOG)
        for style in OCIO.GradingStyle.__members__.values():
            gpt.setStyle(style)
            self.assertEqual(gpt.getStyle(), style)
Exemple #29
0
 def test_data_bypass(self):
     """
     Test setDataBypass() and getDataBypass().
     """
     ct = OCIO.ColorSpaceTransform()
     ct.setDataBypass(False)
     self.assertEqual(False, ct.getDataBypass())
     ct.setDataBypass(True)
     self.assertEqual(True, ct.getDataBypass())
Exemple #30
0
def style_to_display_colorspace(style,
                                describe=ColorspaceDescriptionStyle.
                                OPENCOLORIO,
                                **kwargs):
    """
    Creates an *OpenColorIO* display colorspace for given style.

    Parameters
    ----------
    style : unicode
        *OpenColorIO* builtin transform style
    describe : int, optional
        Any value from the
        :class:`opencolorio_config_aces.ColorspaceDescriptionStyle` enum.
    Other Parameters
    ----------------
    \\**kwargs : dict, optional
        Keywords arguments for the
        :func:`opencolorio_config_aces.colorspace_factory` definition.

    Returns
    -------
    ColorSpace
        *OpenColorIO* display colorspace for given style.
    """

    import PyOpenColorIO as ocio

    kwargs.setdefault('family', ACES_CONFIG_DISPLAY_FAMILY)

    name = beautify_display_name(style)
    builtin_transform = ocio.BuiltinTransform(style)

    description = None
    if describe != ColorspaceDescriptionStyle.NONE:
        description = []

        if describe in (ColorspaceDescriptionStyle.OPENCOLORIO,
                        ColorspaceDescriptionStyle.SHORT_UNION,
                        ColorspaceDescriptionStyle.LONG_UNION):
            description.append(builtin_transform.getDescription())

        description = '\n'.join(description)

    settings = {
        'name': name,
        'family': ACES_CONFIG_DISPLAY_FAMILY,
        'description': description,
        'from_reference': builtin_transform,
        'reference_space': ocio.REFERENCE_SPACE_DISPLAY,
    }
    settings.update(kwargs)

    colorspace = colorspace_factory(**settings)

    return colorspace