# -*- coding: utf-8 -*-
"""
-Defines objects to generate various kind of 1d, 2d and 3d LUTs in various file
+Defines objects to generate various kind of 1D and 3D LUTs in various file
formats.
"""
min_value=0,
max_value=1):
"""
- Object description.
+ Generates a 1D LUT image, i.e. a simple ramp, going from the min_value to
+ the max_value.
Parameters
----------
- parameter : type
- Parameter description.
+ ramp_1d_path : str or unicode
+ The path of the 1D ramp image to be written
+ resolution : int, optional
+ The resolution of the 1D ramp image to be written
+ min_value : float, optional
+ The lowest value in the 1D ramp
+ max_value : float, optional
+ The highest value in the 1D ramp
Returns
-------
- type
- Return value description.
+ None
"""
ramp = oiio.ImageOutput.create(ramp_1d_path)
channels,
components=3):
"""
- Object description.
+ Writes a 1D LUT in the Sony Pictures Imageworks .spi1d format.
Credit to *Alex Fry* for the original single channel version of the spi1d
writer.
Parameters
----------
- parameter : type
- Parameter description.
+ filename : str or unicode
+ The path of the 1D LUT to be written
+ from_min : float
+ The lowest value in the 1D ramp
+ from_max : float
+ The highest value in the 1D ramp
+ data : array of floats
+ The entries in the LUT
+ entries : int
+ The resolution of the LUT, i.e. number of entries in the data set
+ channels : int
+ The number of channels in the data
+ components : int, optional
+ The number of channels in the data to actually write
Returns
-------
- type
- Return value description.
+ None
"""
# May want to use fewer components than there are channels in the data
channels,
components=3):
"""
- Object description.
+ Writes a 1D LUT in the Rising Sun Research Cinespace .csp format.
Parameters
----------
- parameter : type
- Parameter description.
+ filename : str or unicode
+ The path of the 1D LUT to be written
+ from_min : float
+ The lowest value in the 1D ramp
+ from_max : float
+ The highest value in the 1D ramp
+ data : array of floats
+ The entries in the LUT
+ entries : int
+ The resolution of the LUT, i.e. number of entries in the data set
+ channels : int
+ The number of channels in the data
+ components : int, optional
+ The number of channels in the data to actually write
Returns
-------
- type
- Return value description.
+ None
"""
# May want to use fewer components than there are channels in the data
channels,
components=3):
"""
- Object description.
+ Writes a 1D LUT in the Academy Color Transformation Language .ctl format.
Parameters
----------
- parameter : type
- Parameter description.
+ filename : str or unicode
+ The path of the 1D LUT to be written
+ from_min : float
+ The lowest value in the 1D ramp
+ from_max : float
+ The highest value in the 1D ramp
+ data : array of floats
+ The entries in the LUT
+ entries : int
+ The resolution of the LUT, i.e. number of entries in the data set
+ channels : int
+ The number of channels in the data
+ components : int, optional
+ The number of channels in the data to actually write
Returns
-------
- type
- Return value description.
+ None
"""
# May want to use fewer components than there are channels in the data
lut_components=3,
format='spi1d'):
"""
- Object description.
+ Writes a 1D LUT in the specified format.
Parameters
----------
- parameter : type
- Parameter description.
+ filename : str or unicode
+ The path of the 1D LUT to be written
+ from_min : float
+ The lowest value in the 1D ramp
+ from_max : float
+ The highest value in the 1D ramp
+ data : array of floats
+ The entries in the LUT
+ data_entries : int
+ The resolution of the LUT, i.e. number of entries in the data set
+ data_channels : int
+ The number of channels in the data
+ lut_components : int, optional
+ The number of channels in the data to actually use when writing
+ format : str or unicode, optional
+ The format of the the 1D LUT that will be written
Returns
-------
- type
- Return value description.
+ None
"""
ocio_formats_to_extensions = {'cinespace': 'csp',
channels=3,
format='spi1d'):
"""
- Object description.
+ Reads a 1D LUT image and writes a 1D LUT in the specified format.
Parameters
----------
- parameter : type
- Parameter description.
+ ramp_1d_path : str or unicode
+ The path of the 1D ramp image to be read
+ output_path : str or unicode, optional
+ The path of the 1D LUT to be written
+ min_value : float, optional
+ The lowest value in the 1D ramp
+ max_value : float, optional
+ The highest value in the 1D ramp
+ channels : int, optional
+ The number of channels in the data
+ format : str or unicode, optional
+ The format of the the 1D LUT that will be written
Returns
-------
- type
- Return value description.
+ None
"""
if output_path is None:
def generate_3d_LUT_image(ramp_3d_path, resolution=32):
"""
- Object description.
+ Generates a 3D LUT image covering the specified resolution
+ Relies on OCIO's ociolutimage command
Parameters
----------
- parameter : type
- Parameter description.
+ ramp_3d_path : str or unicode
+ The path of the 3D ramp image to be written
+ resolution : int, optional
+ The resolution of the 3D ramp image to be written
Returns
-------
- type
- Return value description.
+ None
"""
args = ['--generate',
resolution=32,
format='spi3d'):
"""
- Object description.
+ Reads a 3D LUT image and writes a 3D LUT in the specified format.
+ Relies on OCIO's ociolutimage command
Parameters
----------
- parameter : type
- Parameter description.
+ ramp_3d_path : str or unicode
+ The path of the 3D ramp image to be read
+ output_path : str or unicode, optional
+ The path of the 1D LUT to be written
+ resolution : int, optional
+ The resolution of the 3D LUT represented in the image
+ format : str or unicode, optional
+ The format of the the 3D LUT that will be written
Returns
-------
- type
- Return value description.
+ None
"""
if output_path is None:
global_params=None,
aces_ctl_directory=None):
"""
- Object description.
+ Applies a set of Academy Color Transformation Language .ctl files to
+ an input image and writes a new image.
+ Relies on the ACES ctlrender command
Parameters
----------
- parameter : type
- Parameter description.
+ input_image : str or unicode
+ The path to the image to transform using the CTL files
+ output_image : str or unicode
+ The path to write the result of the transforms
+ ctl_paths : array of str or unicode, optional
+ The path to write the result of the transforms
+ input_scale : float, optional
+ The argument to the ctlrender -input_scale parameter
+ For images with integer bit depths, this divides image code values
+ before they are sent to the ctl commands
+ For images with float or half bit depths, this multiplies image code
+ values before they are sent to the ctl commands
+ output_scale : float, optional
+ The argument to the ctlrender -output_scale parameter
+ For images with integer bit depths, this multiplies image code values
+ before they are written to a file.
+ For images with float or half bit depths, this divides image code values
+ before they are sent to the ctl commands
+ global_params : dict of key value pairs, optional
+ The set of parameter names and values to pass to the ctlrender
+ -global_param1 parameter
+ aces_ctl_directory : str or unicode, optional
+ The path to the aces 'transforms/ctl/utilities'
Returns
-------
- type
- Return value description.
+ None
"""
if ctl_paths is None:
def convert_bit_depth(input_image, output_image, depth):
"""
- Object description.
+ Convert the input image to the specified bit depth and write a new image
+ Relies on the OIIO oiiotool command
Parameters
----------
- parameter : type
- Parameter description.
+ input_image : str or unicode
+ The path to the image to transform using the CTL files
+ output_image : str or unicode
+ The path to write the result of the transforms
+ depth : str or unicode
+ The bit depth of the output image
+ Data types include: uint8, sint8, uint10, uint12, uint16, sint16, half, float, double
Returns
-------
- type
- Return value description.
+ None
"""
args = [input_image,
channels=3,
format='spi1d'):
"""
- Object description.
+ Creates a 1D LUT from the specified CTL files by creating a 1D LUT image,
+ applying the CTL files and then extracting and writing a LUT based on the
+ resulting image
Parameters
----------
- parameter : type
- Parameter description.
+ lut_path : str or unicode
+ The path to write the 1D LUT
+ ctl_paths : array of str or unicode
+ The CTL files to apply
+ lut_resolution : int, optional
+ The resolution of the 1D LUT to generate
+ identity_lut_bit_depth : string, optional
+ The bit depth to use for the intermediate 1D LUT image
+ input_scale : float, optional
+ The argument to the ctlrender -input_scale parameter
+ For images with integer bit depths, this divides image code values
+ before they are sent to the ctl commands
+ For images with float or half bit depths, this multiplies image code
+ values before they are sent to the ctl commands
+ output_scale : float, optional
+ The argument to the ctlrender -output_scale parameter
+ For images with integer bit depths, this multiplies image code values
+ before they are written to a file.
+ For images with float or half bit depths, this divides image code values
+ before they are sent to the ctl commands
+ global_params : dict of key, value pairs, optional
+ The set of parameter names and values to pass to the ctlrender
+ -global_param1 parameter
+ cleanup : bool, optional
+ Whether or not to clean up the intermediate images
+ aces_ctl_directory : str or unicode, optional
+ The path to the aces 'transforms/ctl/utilities'
+ min_value : float, optional
+ The minimum value to consider as input to the LUT
+ max_value : float, optional
+ The maximum value to consider as input to the LUT
+ channels : int, optional
+ The number of channels to use for the LUT. 1 or 3 are valid.
+ format : str or unicode, optional
+ The format to use when writing the LUT
Returns
-------
- type
- Return value description.
+ None
"""
if global_params is None:
corrected_lut_image,
lut_resolution):
"""
- Object description.
+ For some combinations of resolution and bit depth, ctlrender would generate
+ images with the right number of pixels but with the values for width and
+ height transposed. This function generating a new, corrected image based on
+ the original. The function acts as a pass through if the problem is not
+ detected.
Parameters
----------
- parameter : type
- Parameter description.
+ transformed_lut_image : str or unicode
+ The path to an image generated by cltrender
+ corrected_lut_image : str or unicode
+ The path to an 'corrected' image to be generated
+ lut_resolution : int
+ The resolution of the 3D LUT that should be contained in
+ transformed_lut_image
Returns
-------
- type
- Return value description.
+ str or unicode
+ The path to the corrected image, or the original, if no correction was
+ needed.
"""
transformed = oiio.ImageInput.open(transformed_lut_image)
aces_ctl_directory=None,
format='spi3d'):
"""
- Object description.
+ Creates a 3D LUT from the specified CTL files by creating a 3D LUT image,
+ applying the CTL files and then extracting and writing a LUT based on the
+ resulting image
Parameters
----------
- parameter : type
- Parameter description.
+ lut_path : str or unicode
+ The path to write the 1D LUT
+ ctl_paths : array of str or unicode
+ The CTL files to apply
+ lut_resolution : int, optional
+ The resolution of the 1D LUT to generate
+ identity_lut_bit_depth : string, optional
+ The bit depth to use for the intermediate 1D LUT image
+ input_scale : float, optional
+ The argument to the ctlrender -input_scale parameter
+ For images with integer bit depths, this divides image code values
+ before they are sent to the ctl commands
+ For images with float or half bit depths, this multiplies image code
+ values before they are sent to the ctl commands
+ output_scale : float, optional
+ The argument to the ctlrender -output_scale parameter
+ For images with integer bit depths, this multiplies image code values
+ before they are written to a file.
+ For images with float or half bit depths, this divides image code values
+ before they are sent to the ctl commands
+ global_params : dict of key, value pairs, optional
+ The set of parameter names and values to pass to the ctlrender
+ -global_param1 parameter
+ cleanup : bool, optional
+ Whether or not to clean up the intermediate images
+ aces_ctl_directory : str or unicode, optional
+ The path to the aces 'transforms/ctl/utilities'
+ format : str or unicode, optional
+ The format to use when writing the LUT
Returns
-------
- type
- Return value description.
+ None
"""
if global_params is None:
def main():
"""
- Object description.
+ A simple main that allows the user to exercise the various functions
+ defined in this file
Parameters
----------
- parameter : type
- Parameter description.
+ None
Returns
-------
- type
- Return value description.
+ None
"""
import optparse