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
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
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
596
597
598
599
600
601
602
603
604
605
606
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
608
609
610
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
612
613
614
615
616
617
618
619
620
621
622
@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
265
266
267
268
269
270
271
272
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"