acid16.py | ||
LiberationMono-Regular.ttf | ||
README.md |
acid16
It makes color schemes. Pass a background color, an accent color, and optionally a foreground text color, and out comes a color scheme.
Color arguments are in the form of "hue,chroma,luminance" for background and "hue,chroma" for the other two. All values must be numbers between 0.0 and 1.0 (you're welcome to try other values, just don't be shocked if it breaks). Also, keep in mind luminance in HCL is relative luminance, or the color's brightness as perceived by the human eye. It also uses linear color ramping instead of the usual gamma-encoded sRGB, so something like "0.0,0.0,0.25" won't get you the 25% gray you're used to.
The script will do its best to make sure everything is readable. With Base16, for instance, it tries to keep a contrast ratio of 7:1 between the foreground and background colors, while trying to stay above 3:1 for foreground and highlight, the last 8 colors (the "hues") and highlight, and the "dark" foreground and background. Usually it does a good job. But with the way it handles contrast, things get unreadable with some values (see "On luminance options").
Example
./acid16.py 0.6,0.25,0.005 0.6,0.5 0.0,0.0
This creates a color scheme with:
- A dark bluish background (hue 0.6, chroma 0.25, luminance 0.005)
- An accent color with that same hue but more saturation (hue 0.6, chroma 0.5)
- Some shade of gray for the foreground color (hue 0.0, chroma 0.0). In this case it'll be a light gray since the background is dark.
Prerequisites
- Python 3
- Pillow
- ImageMagick (for previews)
Options
Obligatory "options are subject to change" courtesy warning
-m mode
: Which generator to use. Current generators:base16
(default): Base16xresources
: Xresources terminal colors
-n name
,-a author
: Set the scheme and author name.-e
: Equiluminant mode; uses the same luminance for the hues. This keeps their brightness uniform but can make them harder to tell apart.-b amount
: Make the hue colors blend with the background's hue. 0.0 means no blending, 1.0 makes them the same exact color. If you'd like to have them be the same hue but with different brightnesses, use a value like 0.999.-p
: Generate a preview image demonstrating color contrast and the palette itself.- Base16 options:
-l
: Don't darken the last color (brown).
Notes
On luminance options
The only good ranges for background luminance at the moment are 0.00 to 0.10 and 0.31 to 1.00. It's at these ranges that the script can maintain its contrast levels; anything between 0.11 to 0.30, and the foreground color will start losing contrast with the background. In addition, the contrast with the hues break down the closer you get to 0.30.
tl;dr: Don't set the background luminance between (0.10, 0.30] unless you like eyesores.