The Colorful Dodecagon: yet another color scheme.
After searching for a while for a terminal color scheme with certain properties, I gave up and made my own. Here are the coveted goals:
While this sounds pretty easy, it’s made more difficult by the fact that the RGB color space maps very poorly to what our eyes actually see. For instance, pure green on black is too bright, while pure blue on black is too dark.
The LAB color space largely solves this problem by being designed around perceived color: distances in LAB space approximate perceived color distance. It measured colors by a lightness axis (L) ranging from 0% (black) to 100% (white), a red-green axis (A) ranging from 128 (red) to -128 (green), and a blue-yellow axis (B) ranging from 128 (blue) to -128 (yellow). Interestingly, not all LAB colors can be converted to RGB; monitors that just display three colors can’t represent every color we can see.
The Colorful Dodecagon has 12 bright colors equally spaced in LAB space. They have a brightness of 74%, which maximizes how saturated the colors can be and still fit in RGB space. Its white has a brightness of 90%, and its black has a brightness of 10%. In the terminal, I use every other color from the Dodecagon, making all of the colors equidistant from white and from their neighbors (at a distance of 40 in LAB space).
The main color contenders for color schemes I found on the internet were Solarized and Base16. Solarized has an absurdly low contrast of like 40%: its zoomed-in screenshot looks pretty, but when you actually start coding in it it’s hard to read. Base16 is much better. My only complaints are that blue and teal are hard to distinguish (only 16 distance away in LAB space), and that the red is garish (it has a LAB brightness of ~40%, while the other colors have a brightness around ~70%).
COLOR_NAME L A B HEX TERMINAL black 10 0 0 #1b1b1b black white 90 0 0 #e2e2e2 white pink 74 40 0 #fa99b7 red 74 35 20 #fc9c93 red orange 74 20 35 #eba676 yellow 74 0 40 #cdb36b yellow pear 74 -20 35 #a7be74 green 74 -35 20 #7ac68f green teal 74 -40 0 #48c9b4 cyan 74 -35 -20 #01c8d9 cyan blue 74 -20 -35 #3ac3f5 indigo 74 0 -40 #80b9fe blue lavender 74 20 -35 #b9acf6 magenta 74 35 -20 #e49fdb magenta
If we allow colors to be brighter in exchange for some of the colors not being representable, and thus getting rounded, we get this next circle. Note that “pink” is a bit off, and “red” is quite off:
COLOR_NAME L A B HEX TERMINAL black 10 0 0 #1b1b1b black white 90 0 0 #e2e2e2 white pink 78 40 0 #ffa4c2 red 78 35 20 #ffa79e! red orange 78 20 35 #f8b281 yellow 78 0 40 #dabf76 yellow pear 78 -20 35 #b3ca7f green 78 -35 20 #86d19a green teal 78 -40 0 #56d5c0 cyan 78 -35 -20 #29d4e5 cyan blue 78 -20 -35 #4bceff indigo 78 0 -40 #80b9fe blue lavender 78 20 -35 #c5b7ff magenta 78 35 -20 #f0aae7 magenta
For an extremely in-depth overview of color, check out handprint.com.