Skip to main content

sRGB vs OKLAB

The difference between muddy and clean color blending.
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  THE MUDDY MIDDLE PROBLEM                                       │
│                                                                 │
│  When blending Blue to Yellow:                                  │
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │  sRGB (Old Way)                                         │    │
│  │                                                         │    │
│  │  ████████▓▓▓▓▓▓▒▒▒▒▒▒░░░░░░▒▒▒▒▒▒▓▓▓▓▓▓████████         │    │
│  │  BLUE    muddy   GRAY    muddy   YELLOW                 │    │
│  │          brown   (dull)  brown                          │    │
│  │                    ^                                    │    │
│  │                    |                                    │    │
│  │              Desaturated!                               │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │  OKLAB (Modern Way)                                     │    │
│  │                                                         │    │
│  │  ████████████████████████████████████████████████       │    │
│  │  BLUE    cyan    VIBRANT   lime   YELLOW                │    │
│  │                  GREEN                                  │    │
│  │                    ^                                    │    │
│  │                    |                                    │    │
│  │               Saturated!                                │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Why This Happens

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  sRGB: DESIGNED FOR SCREENS                                     │
│  ─────────────────────────                                      │
│                                                                 │
│      G (Green)                                                  │
│      ^                                                          │
│      |      +--------+                                          │
│      |     /|       /|                                          │
│      |    / |      / |                                          │
│      |   +--------+  |     The "straight line" in this          │
│      |   |  |     |  |     box passes through the CENTER        │
│      |   |  +-----|--+     where colors are GRAY                │
│      |   | /      | /                                           │
│      |   |/       |/                                            │
│      |   +--------+                                             │
│      +----------------------> R (Red)                           │
│     /                                                           │
│    v B (Blue)                                                   │
│                                                                 │
│  Problem: Straight line in cube = Muddy path                    │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  OKLAB: DESIGNED FOR HUMAN EYES                                 │
│  ──────────────────────────────                                 │
│                                                                 │
│      L (Lightness)                                              │
│      ^                                                          │
│      |      . . .                                               │
│      |   .         .                                            │
│      |  .           .                                           │
│      | .      +      .    The "straight line" in this           │
│      |  .           .     cylinder stays at constant            │
│      |   .         .      distance from center (saturated)      │
│      |      . . .                                               │
│      +----------------------> a (green-red)                     │
│     /                                                           │
│    v b (blue-yellow)                                            │
│                                                                 │
│  Solution: Straight line in cylinder = Clean path               │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Side-by-Side Comparison

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  RED TO BLUE                                                    │
│  ───────────                                                    │
│                                                                 │
│  sRGB Path:                                                     │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ RED ▶ muddy ▶ brown ▶ purple-ish ▶ gray ▶ BLUE            │  │
│  │  ^      ^       ^         ^         ^       ^             │  │
│  │  |      |       |         |         |       |             │  │
│  │ 0%    20%     40%       60%       80%     100%            │  │
│  │                                                           │  │
│  │ The path is UNPREDICTABLE                                 │  │
│  │ Intermediate colors feel "dirty"                          │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
│  OKLAB Path:                                                    │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ RED ▶ pink ▶ magenta ▶ violet ▶ purple ▶ BLUE             │  │
│  │  ^      ^       ^         ^        ^        ^             │  │
│  │  |      |       |         |        |        |             │  │
│  │ 0%    20%     40%       60%      80%      100%            │  │
│  │                                                           │  │
│  │ The path is PREDICTABLE                                   │  │
│  │ Intermediate colors are vibrant                           │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  GREEN TO YELLOW                                                │
│  ───────────────                                                │
│                                                                 │
│  sRGB Path:                                                     │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ GREEN ▶ muddy ▶ olive ▶ brown-ish ▶ YELLOW                │  │
│  │                                                           │  │
│  │ Even nearby colors have uneven transitions                │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
│  OKLAB Path:                                                    │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ GREEN ▶ lime ▶ chartreuse ▶ yellow-green ▶ YELLOW         │  │
│  │                                                           │  │
│  │ Smooth, predictable, visually even steps                  │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

The Color Space Journey

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  LIGHTNESS CHART: BLUE TO YELLOW                                │
│                                                                 │
│  Lightness                                                      │
│      ^                                                          │
│      |                                                          │
│ 1.0  +                                   * Yellow               │
│      |                                 /                        │
│      |               sRGB path      /                           │
│ 0.7  +              ........     *  OKLAB path                  │
│      |           ...    ...   /     (stays saturated)           │
│      |         ..         ../                                   │
│ 0.5  +        *-----------*                                     │
│      |       /   ^          \                                   │
│      |      /    |           \                                  │
│ 0.3  +    /   MUDDY           \                                 │
│      |   /     ZONE            \                                │
│ 0.0  + * Blue                   \                               │
│      +----+----+----+----+----+----+----> Chroma                │
│      0   0.1  0.2  0.3  0.4  0.5                                │
│                                                                 │
│  sRGB: Curves INWARD (loses saturation)                         │
│  OKLAB: Stays at constant saturation                            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

OKLAB vs OKLCH

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  SAME COLOR SPACE, DIFFERENT COORDINATES                        │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  OKLAB (Cartesian)           OKLCH (Polar)                      │
│  ─────────────────           ────────────────                   │
│                                                                 │
│       a+                         0deg (Red)                     │
│       |                              |                          │
│       |    P(a, b)              P    *                          │
│       |   /                   (C,H) /                           │
│       |  /                         / C (radius)                 │
│       | /                         / H (angle)                   │
│  b- --+-- b+            270deg --+-- 90deg                      │
│       |                              |                          │
│       |                         180deg                          │
│       a-                                                        │
│                                                                 │
│  Best for:                   Best for:                          │
│  BLENDING colors             DEFINING colors                    │
│  (straight line)             (hue, saturation, brightness)      │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Key Takeaways

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  QUICK REFERENCE                                                │
│                                                                 │
│  ┌─────────────┬──────────────────┬──────────────────────────┐  │
│  │ Aspect      │ sRGB             │ OKLAB                    │  │
│  ├─────────────┼──────────────────┼──────────────────────────┤  │
│  │ Designed    │ Display hardware │ Human perception         │  │
│  │ for         │                  │                          │  │
│  ├─────────────┼──────────────────┼──────────────────────────┤  │
│  │ Blending    │ Muddy middle     │ Clean transition         │  │
│  │ result      │                  │                          │  │
│  ├─────────────┼──────────────────┼──────────────────────────┤  │
│  │ Predictable │ Low              │ High                     │  │
│  ├─────────────┼──────────────────┼──────────────────────────┤  │
│  │ Use case    │ Legacy           │ Modern color work        │  │
│  └─────────────┴──────────────────┴──────────────────────────┘  │
│                                                                 │
│  THE MONOLEX CHOICE:                                            │
│  ────────────────────                                           │
│                                                                 │
│  Define colors in OKLCH (easy to understand)                    │
│  Blend colors in OKLAB (no muddy middle)                        │
│                                                                 │
│  When colors need to flow from one to another,                  │
│  OKLAB ensures clarity.                                         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘