import numpy as np


def blackwhite(clip, RGB=None, preserve_luminosity=True):
    """Desaturates the picture, makes it black and white.
    Parameter RGB allows to set weights for the different color
    channels.
    If RBG is 'CRT_phosphor' a special set of values is used.
    preserve_luminosity maintains the sum of RGB to 1."""
    if RGB is None:
        RGB = [1, 1, 1]

    if RGB == "CRT_phosphor":
        RGB = [0.2125, 0.7154, 0.0721]

    R, G, B = 1.0 * np.array(RGB) / (sum(RGB) if preserve_luminosity else 1)

    def fl(im):
        im = R * im[:, :, 0] + G * im[:, :, 1] + B * im[:, :, 2]
        return np.dstack(3 * [im]).astype("uint8")

    return clip.fl_image(fl)
