Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


So you want to convert and calculate colors in JavaScript? You've come to the right place.

Click here for the live demo here.

##How to use

In the browser:

<script src="http//"></script>

In Node.js:

var Color = require('colorjs-lib');

Note: npm is coming soon.


Simple create methods


Advanced create methods


Under advanced methods, there are also options to create colors from HEX, RGB, RGBA, CMYK, HSV, HSL, and RYB, using an Object or Array values. There is also a random color generator.

Color.fromCMYK({c: 0, m: 1, y: 1, k: 0});
Color.fromCMYK([0, 1, 1, 0]);

Color.fromHSV({h: 0, s: 1, v: 1})
Color.fromHSL({h: 0, s: 1, l: 0.5});


##Getters and Setters

Once you have created a color, you can convert it to any format you would like, as such:

var color = Color("#ff0000");

color.HEX(); //"ff0000"
color.CSS(); //"#ff0000"
color.RGB(); //{r: 255, g: 0, b: 0}
color.HSV(); //{h: 0, s: 1, v: 1}
color.HSL(); //{h: 0, s: 1, l: 0.5}
color.CMYK(); //{c: 0, m: 1, y: 1, k: 0}
color.RYB(); //{r: 255, y: 0, b: 0}

color.toString(); //"#ff0000"

The same functions can be used to set the color of an existing Color object by passing the appropriate value.

var color = Color("ff0000");
color.CMYK(); //{c: 0, m: 1, y: 1, k: 0}

color.CMYK({c: 1, m: 1, y: 0, k: 0});
color.HEX(); //0000ff

##Color scheme calculator

You can use this library to calculate color various named color harmonies.

//HUE +/- 30 degrees
color.analog(); //[original, plus, minus]

//HUE +/- 120 degrees
color.triad(); //[original, plus, minus]

//HUE +/- 150 degrees
color.split(); //[original, plus, minus]

//HUE + 180 degrees
color.complement(); //[original, complement]

Note: These values are mathematical suggestions, and may need to be adjusted slightly to make a more pleasant color combination or remain in the same color gamut.

The tetratic/quadratic color scheme is a special case, in that it takes an offset parameter in degrees. This offset it used to calculate the color scheme rectangle. The default is 40 degrees, which was a subjective choice.

var offset = 30;
color.quadrat(offset); //[original, color1, color2, color3]

Calculate any generic (unnamed) three color scheme using the hue shifter function:

//HUE +/- degrees
color.hueShift(degrees); //[original, plus, minus]

More generic hue shifter, which returns only one value:

//HUE + degrees
color.hueShiftSingle(degrees); //newColor

Hue shifts based on how many colors you need, which will calculate colors at equal invervals:

var count = 5;
color.contrasts(count); //[original, color1, color2, color3, color4];

Note: This name will likely change, as it is not very intuitive.

Note: This function obviously has a limit of usefulness, as too many colors will result colors being too close to one another. This is a mathematical limitation, and there isn't much I can do about it. If you need more colors, try calculating this from two (or seven) colors from a different color gamut to get more contrasting colors.

Monochromatic calculations, based on the number of colors you need:

var count = 3;
color.monochrome(count); //[color1, color2, color3]

Calculate only lighter or darker monochrome colors:

color.monochromeLight(count); //[original, lighter1, lighter2]
color.monochromeDark(count); //[original, dark1, dark2]

Note: The monochrome functions does not return pure black or white. Add those on your own if you need to. Also, monochrome does not necessarily return the original color, but rather colors of the same hue.

Mix in another color:

var red = Color('ff0000');
var cyan = Color('00ffff');

var purple = red.minin(cyan);
purple.CSS(); // return #aa55aa

You can also use the mix method on the Color object to mix any two colors together:

var red = Color('ff0000'),
    cyan = Color('00ffff');

var purple = Color.mix(red, cyan);

Mixing colors this way will adjust the new color for lightness, so that it matches the original colors used for the mixture. You can skip the adjustment like this:

var red = Color('ff0000'),
    cyan = Color('00ffff');

var purple = Color.mix(red, cyan); // #aa55aa
var darkerPurple = Color.mix({
    color1: red,
    color2: cyan,
    match: false
}); // #804080

Mixing also supports ratios:

var red = Color('ff0000'),
    cyan = Color('00ffff');

var someSortOfPink = Color.mix({
    color1: red,
    color2: cyan,
    ratio: .7
}); // #d22d5c

All ratios are first color to second color. You may need to disable matching here, especially if trying to mix with white or black.


All colors are stored as RGBA values. Some rounding needs to occur for this, especially for HSL and HSV values. This will result in colors being ever so slightly different. If this is unacceptable, please look elsewhere.


Special thanks to my art school girlfriend, who answered all of my incessant questions about color theory. If you would like to read up on it as well, try this article: Color Theory, The Color Wheel And Color Schemes.

Also, thanks to the guys at EasyRGB for their helpful color math and formulas.


This project is licensed under the MIT X11 License. Please use, adapt, and modify this project to your heart's content. Link back to this page wherever you can.



πŸ“ core library for ColoJS







No releases published


No packages published