PeyloW of T.O.Y.S. presents, for the "Falcon GEM palette photo" competition
at Sommarhack 2026:


                            P A U L   A P P L E


On March 31, Apple turned 50. The finale of the celebration was Sir Paul
McCartney himself, playing under a glowing rainbow arch in Apple Park - the
old Apple logo reborn in light, with a Beatle beneath it. This is that
moment, squeezed through the eye of a needle and out the other side as 256
colours of Atari Falcon.

The big screen carries Paul's face in close-up while the rainbow burns
across the stage below. Getting those colours to survive the trip to the
Falcon's GEM palette - without the whole thing collapsing into grey mush -
is the whole game here.


--- The technical bit ---------------------------------------------------

falcpal.py remaps the source photo to the exact 256-colour Atari Falcon
palette in falcpal.gif, at 640x480, with Floyd-Steinberg dithering.

The source is a Display P3 / PQ (HDR) photo. Its embedded ICC profile is
applied to sRGB before quantising, so the tones land right - deep darks,
bright highlights - instead of the washed-out look you get from reading
the PQ values as plain sRGB. Saturation is then pushed along a quadratic
Bezier curve over luminance, so the rainbow pops while the darks stay neutral.

Command used for this image:

    ./falcpal.py paulapple.png paulapple.gif --b0 1.0 --b1 2.2 --mid 1.6

    --b0    saturation boost at 0% luminosity   (default 1.0)
    --b1    saturation boost at 100% luminosity (default 2.0)
    --mid   Bezier control point between b0/b1   (default 1.5)

    1.0 = no change; >1.0 = more saturated. b0=1.0 leaves the darks alone;
    --mid above the b0->b1 line bends the boost in earlier, below delays it
    to the highlights. --palette picks the palette to match (default
    falcpal.gif).

Run  ./falcpal.py --selftest  to verify the boost curve.
Requires Python 3, Pillow, NumPy.
