Skip to content

Color Space

renderkit.processing.color_space.ColorSpaceConverter

Color space converter using Strategy pattern.

Source code in src/renderkit/processing/color_space.py
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
class ColorSpaceConverter:
    """Color space converter using Strategy pattern."""

    _strategies: dict[ColorSpacePreset, type[ColorSpaceStrategy]] = {
        ColorSpacePreset.LINEAR_TO_SRGB: LinearToSRGBStrategy,
        ColorSpacePreset.LINEAR_TO_REC709: LinearToRec709Strategy,
        ColorSpacePreset.SRGB_TO_LINEAR: SRGBToLinearStrategy,
        ColorSpacePreset.NO_CONVERSION: NoConversionStrategy,
        ColorSpacePreset.OCIO_CONVERSION: OCIOColorSpaceStrategy,
    }

    def __init__(self, preset: ColorSpacePreset = ColorSpacePreset.LINEAR_TO_SRGB):
        """Initialize color space converter.

        Args:
            preset: Color space conversion preset
        """
        strategy_class = self._strategies.get(preset)
        if strategy_class is None:
            raise ColorSpaceError(f"Unknown color space preset: {preset}")

        self._strategy = strategy_class()

    def convert_buf(self, buf: Any, input_space: Optional[str] = None):
        """Convert an OIIO ImageBuf without round-tripping through NumPy."""
        return self._strategy.convert_buf(buf, input_space=input_space)

    @classmethod
    def register_strategy(
        cls, preset: ColorSpacePreset, strategy_class: type[ColorSpaceStrategy]
    ) -> None:
        """Register a custom color space conversion strategy.

        Args:
            preset: Color space preset enum
            strategy_class: Strategy class to register
        """
        cls._strategies[preset] = strategy_class

__init__(preset=ColorSpacePreset.LINEAR_TO_SRGB)

Initialize color space converter.

Parameters:

Name Type Description Default
preset ColorSpacePreset

Color space conversion preset

LINEAR_TO_SRGB
Source code in src/renderkit/processing/color_space.py
620
621
622
623
624
625
626
627
628
629
630
def __init__(self, preset: ColorSpacePreset = ColorSpacePreset.LINEAR_TO_SRGB):
    """Initialize color space converter.

    Args:
        preset: Color space conversion preset
    """
    strategy_class = self._strategies.get(preset)
    if strategy_class is None:
        raise ColorSpaceError(f"Unknown color space preset: {preset}")

    self._strategy = strategy_class()

convert_buf(buf, input_space=None)

Convert an OIIO ImageBuf without round-tripping through NumPy.

Source code in src/renderkit/processing/color_space.py
632
633
634
def convert_buf(self, buf: Any, input_space: Optional[str] = None):
    """Convert an OIIO ImageBuf without round-tripping through NumPy."""
    return self._strategy.convert_buf(buf, input_space=input_space)

register_strategy(preset, strategy_class) classmethod

Register a custom color space conversion strategy.

Parameters:

Name Type Description Default
preset ColorSpacePreset

Color space preset enum

required
strategy_class type[ColorSpaceStrategy]

Strategy class to register

required
Source code in src/renderkit/processing/color_space.py
636
637
638
639
640
641
642
643
644
645
646
@classmethod
def register_strategy(
    cls, preset: ColorSpacePreset, strategy_class: type[ColorSpaceStrategy]
) -> None:
    """Register a custom color space conversion strategy.

    Args:
        preset: Color space preset enum
        strategy_class: Strategy class to register
    """
    cls._strategies[preset] = strategy_class

renderkit.processing.color_space.ColorSpacePreset

Bases: Enum

Color space conversion presets.

Source code in src/renderkit/processing/color_space.py
307
308
309
310
311
312
313
314
class ColorSpacePreset(Enum):
    """Color space conversion presets."""

    LINEAR_TO_SRGB = "linear_to_srgb"
    LINEAR_TO_REC709 = "linear_to_rec709"
    SRGB_TO_LINEAR = "srgb_to_linear"
    NO_CONVERSION = "no_conversion"
    OCIO_CONVERSION = "ocio_conversion"