Generative Color Modulation
Imagine you were painting a picture. Each time you add an object to the canvas — say, a red square — the color will be slightly different. The paint itself may not change, but your pressure on the canvas/amount of paint on the brush probably will, leading to subtle differences across the piece.
When working on a computer, we trade this beautiful organic variance for super-fast rendering. Luckily for us, though, we can simulate it in just a few lines of code. Here’s one way to do it.
First, we should choose a human readable color space (such as HSL) to work in. Then, we can define our colors using JavaScript objects:
const baseColor = {
h: 240,
s: 75,
l: 75,
};
Next, we can create a small function that receives a color object and returns a “modulated” version. Here’s what this function could look like:
function modulateColorHSL(baseColor, hRange = 8, sRange = 8, lRange = 8) {
// pick a random number in a given range
const random = (min, max) => Math.random() * (max - min) + min;
// return a new color object
return {
// add or subtract a random amount to each color property
h: baseColor.h + random(-hRange, hRange),
s: baseColor.s + random(-sRange, sRange),
l: baseColor.l + random(-lRange, lRange),
};
}
Using this function, each time we use a color in a composition, we can change it just a little. Here’s how we might apply it:
const modulatedColor = modulateColorHSL(baseColor, 12, 12, 12);
const modulatedColorString = `hsl(
${modulatedColor.h},
${modulatedColor.s}%,
${modulatedColor.l}%
)`;
Lovely! To wrap things up, here’s a CodePen showing off the effect:
Try toggling the color modulation on/off. The difference is subtle, but the slight variance adds a lot to a piece.