@_builtin_image_filter
    def __call__(self, frame, **kwargs):
        channel = kwargs.get('channel', lib.DefaultChannels)
        # This is incredibly stupid, but yes, ColorizeImage only accepts a
        # string for the opacity.
        opacity = str(self._amount % 100.).encode('ascii') + b"%"

        color = ffi.new("PixelPacket *")
        self._color._populate_pixel(color)

        with magick_try() as exc:
            # TODO what if this raises but doesn't return NULL
            # TODO in general i need to figure out when i use gc and do it
            # consistently
            return lib.ColorizeImage(frame._frame, opacity, color[0], exc.ptr)


# ------------------------------------------------------------------------------
# DWIM filter compiler: tries C, falls back to Python if it doesn't compile.
dataset/ETHPy150Open eevee/sanpera/sanpera/filters.py/Colorize.__call__/operator `*` -> `%`