This web page is part of an investigation into colour names. See the JavaScript code and blog posts for more details.

Web & X11 Colours

First, here are the 140 unique standard colours:

ColourX11 Name(s)Web Name(s)RGBHSLYShade

If we plot these colours in RGB space, we see that their distribution is far from even:

The "Shade" column in the table comes from an old revision of the Wikipedia page. I'm not sure what the origin of this categorisation was, but I think it can be improved upon. Firstly, let's define the "whites" group as all colours with HSL lightness values of 95% and above (13 colours). Secondly, we define "blacks" as any remaining colours with HSL saturation of 15% or below (9 colours). Now let's look at the HSL hue of the remaining 118 colours:

ColourX11 Name(s)Web Name(s)RGBHSLYShadeGroup

In the table above, we've heuristically divided the groups according to HSL hue alone:

Hue RangeGroup
hue < 20°reds
20° ≤ hue < 45°oranges
45° ≤ hue < 75°yellows
75° ≤ hue < 155°greens
155° ≤ hue < 185°aquas
185° ≤ hue < 255°blues
255° ≤ hue < 320°purples
hue ≥ 320°reds

This separates the 140 unique colours into nine groups:

BlacksX11 Name(s)
RedsX11 Name(s)
OrangesX11 Name(s)
YellowsX11 Name(s)
GreensX11 Name(s)
AquasX11 Name(s)
BluesX11 Name(s)
PurplesX11 Name(s)
WhitesX11 Name(s)

Limited RGB Colours


There are 216 (mostly-unnamed) web-safe colours limited to six levels for each RGB channel (0%, 20%, 40%, 60%, 80% and 100%). If we reduce the number of levels to five (0%, 25%, 50%, 75% and 100%), we get 125 distinct colours, approximately the number of unique X11 colours. I've named this colour palette RGB-125:

RGBRGB-125Based OnΔE*1994ΔE*2000
  1. Based on the X11 colour.
  2. Based on the Name that Color (NTC) entry.
  3. Based on the Wikipedia colour.
  4. Named after Majorelle Blue.
  5. A bright, leafy green.
  6. Named after the Sea Green Crayola colour.
  7. Named after Felicia amelloides: the blue daisy.
  8. Named after a hue on the HSL colour wheel.
  9. A green frog.
  10. A green lettuce.
  11. Portuguese for "purple".
  12. Named after Viola sororia: the common blue violet.
  13. A compromise between all the different colours named "brown" in X11, NTC, Wikipedia, etc.
  14. A lemon/lime mix.
  15. Named after a Sanskrit name for meaning purple orchid tree.

If we plot RGB-125 colours in RGB space, we see the regular grid, as expected:

A 125-colour palette fits neatly into 7 bits with room for a 1-bit alpha mask in every byte.


Reducing the number of levels for each RGB channel to four (0%, 33%, 67%, 100%) creates a 64-colour palette. This is identical to the source palette for EGA video systems. Most of these colours were unnamed, so we have to fill in the gaps:

  1. The equivalent EGA palette name.
  2. Found in CGA systems without the tweaked brown circuitry.
  3. The "dark" prefix implies subtracting 33% from each RGB channel value.
  4. The "light" prefix implies adding 33% to each RGB channel value.
  5. The "vivid" prefix implies saturation of non-zero RGB channel values.


Reducing the number of levels for each RGB channel further, to three (0%, 50%, 100%) creates a 27-colour palette. This is a strict subset of RGB-125:


Limited Hue-Based Colours

The use of prefixes such as "light", "dark" and "vivid" in RGB-64 suggests more rigorous naming schemes can be constructed. Indeed, this is the goal of initiatives such as the ISCC-NBS System of Color Designation.


Let's start by segmenting the cylindrical HSL colour space.

lightness < L1return black
lightness > L6return white
lightness < L2prefix = deep
L2lightness < L3prefix = dark
L4 < lightness ≤ L5prefix = light
lightness > L5prefix = pale
saturation < S1return (prefix) grey
saturation < S2prefix = dull
hue < 15°return (prefix) red
15° ≤ hue < 45°return (prefix) orange
45° ≤ hue < 75°return (prefix) yellow
75° ≤ hue < 105°return (prefix) chartreuse
105° ≤ hue < 135°return (prefix) green
135° ≤ hue < 165°return (prefix) spring
165° ≤ hue < 195°return (prefix) cyan
195° ≤ hue < 225°return (prefix) azure
225° ≤ hue < 255°return (prefix) blue
255° ≤ hue < 285°return (prefix) violet
285° ≤ hue < 315°return (prefix) magenta
315° ≤ hue < 345°return (prefix) rose
hue ≥ 345°return (prefix) red

This produces 79 colours segments: six variations for each of the twelve hues, plus seven monochrome. To align the palette as much as possible with RGB-125 whilst keeping the number of RGB points in each category fairly even, we choose:

This, in turn, suggests the following palette:

HueLightness 0%Lightness 12.5%Lightness 25%Lightness 50%Lightness 75%Lightness 87.5%Lightness 100%Saturation 50%

When plotted in RGB space, we see there is a slightly greater concentration towards the black and white corners:


We can also use the HSV colour space instead of HSL. The rules are more complex because of the interactions between the "saturation" and "value" metrics. I've chosen parameters such that each of the 79 segments contains the same number of RGB points. See the code for details.



Whilst performing these experiments, I stumbled across a colour model I hadn't seen before: Alvy Ray Smith's HWB (hue-whiteness-blackness). It's almost isomorphic with HSL but the segmentation rules seem more intuitive, which is probably a good sign. Once you've extracted the hue (e.g. "red" below), all the names are mapped out thus:

Hue PointWhwbBhwb
vivid hue0.0000.000
pale hue0.7500.000
light hue0.5000.000
dark hue0.0000.500
deep hue0.0000.750
dull hue0.3330.333
pale grey0.8330.167
light grey0.6670.333
dark grey0.3330.667
deep grey0.1670.833

Euclidian distances in WB-space are used to determine the closest hue point. This produces a 91-segment palette:


Here's the HWB-91 palette plotted in RGB space:


Although a surprisingly contentious issue, it has been noted that there are approximately eleven basic colour terms in many languages, including English. In typical order of adoption, they are:

  1. white
  2. black
  3. red
  4. green
  5. yellow
  6. blue
  7. brown
  8. purple
  9. pink
  10. orange
  11. grey
HWB-91 is missing "brown", "purple" and "pink" but includes the rather esoteric "chartreuse", "spring", "cyan", "azure", "violet", "magenta" and "rose". For a very basic naming model, we need to reduce the number of terms. We can achieve this by reducing the number of hue names (twelve in HWB-91) to six:

Hue NameRangeArchetype
orange0° — 40°30°
yellow40° — 100°60°
green100° — 180°120°
blue180° — 250°240°
purple250° — 310°300°
red310° — 360°

The hue sectors are no longer equally sized and we introduce the notion of an "archetype" colour. This is a single hue within the named range that best typifies the name. Note that although all hues between 310° and 360° are considered "red", the archetypal "red" is right on the upper limit. The ranges and archetypes were curated from the ISCC-NBS colour list. We now divide our eleven chosen basic colour terms into three groups:

  1. Three achromatics ("black", "grey" and "white")
  2. Six hues ("red", "orange", "yellow", "green", "blue" and "purple")
  3. Two aliases ("brown" and "pink")
For each hue, we divide up the HWB whiteness-blackness plane like this one for "blue":

Note that HWB-51 splits up the whiteness-blackness plane using rules when converting from values to names, unlike HWB-91, which uses centroids. HWB-51 uses archetypes to convert from names back to whiteness-blackness values. There are similar planes for "yellow", "green" and "purple". However, "red" and "orange" are slightly different to account for the aliases ("brown" is generally classified as "dark orange" and "pink" as "light red"). For example, for "orange":

There are four aliased names:

This produces a palette of 51 colours and 55 names:


Here's the HWB-51 palette plotted in RGB space:

It's very sparse in the cyan corner. Perhaps the addition of a "turquoise" hue sector would solve this. Another tweak could be to add "olive" as an alias for "dark yellow".


Another alternative to HSL space is cylindrical CIE L*a*b* or CIE LChab. However, there are problems with the wider gamut of CIE LChab compared to RGB; keeping within the RGB gamut for all CIE LChab hues produces quite muted colours because you have to reduce the chroma. Also, the differences between the RGB/HSL colour wheel and the CIE LChab colour wheel are quite minor when you're looking at small segments.

Centroid-Based Schemes

Some colour-naming schemes are based on centroids. There are three important aspects of any such scheme:


The ISCC-NBS System of Color Designation defines a dictionary of 267 colour names mapped to Munsell blocks. It is often implemented as a centroid-based system. Paul Centore has done significant work on the Munsell system, including mapping ISCC-NBS centroids to sRGB:

CentroidISCC-NBS NameMunsellsRGBHex

Notice that seven centroids are out-of-gamut with respect to sRGB. The distance metric is typically Euclidian in sRGB space.


The Color Naming System (CNS) is the inspiration for HWB-51 and HWB-91. It has a relatively small vocabulary, but can specify over 600 colours. Unfortunately, details about actual implementation are very scarce. I've guessed at a centroid scheme based around the HSL colour space:

According to the original paper, the distance metric was "NBS Color Difference Units" (assumed to be the Judd-Hunter formula), though no significant differences were found when using simpler Euclidean differences in, say, sRGB. For ease of implementation, I've re-used ΔE*2000.

The 627 generated names have a nasty overlap between "orange" and "brown". What colour is "very dark vivid yellowish brown" anyway? The centroids are quite sparse within the "green-blue" sector as there's no "primary" hue between 120 and 240 degrees.


We can compare the various naming schemes with tables listing the scheme, name and corresponding ΔE*2000 values for each web-safe colour:

It's highly subjective, but to my eyes, in this light, with this monitor, HWB-91 is a good candidate for a simple naming scheme with a limited number of terms. HWB-51 is probably a little too sparse.