Convert oklch() values to RGB channels. The reverse OKLab pipeline is exact; what needs care is gamut — plenty of valid OKLCH coordinates cannot exist in sRGB, and this converter tells you when that happens and what the nearest displayable version is.
Settings
Generated locally in your browser — your settings and results never leave this page.
What browsers do, exposed
Every oklch() declaration a browser meets runs through exactly this conversion before pixels light up. Running it yourself answers two questions the stylesheet cannot: what channels does this produce (for canvas, emails, older targets), and does it fit sRGB at all — the question that decides whether users on standard displays see your color or a browser’s silent approximation of it.
Worked example: oklch(0.72 0.11 145)
A soft UI green:
rectangular: a = 0.11·cos145° ≈ −0.090, b = 0.11·sin145° ≈ 0.063 inverse matrices, cube, linear→sRGB oklch(0.72 0.11 145) ≈ rgb(101, 191, 124) = #65bf7c
Same L and C at hue 264° instead: oklch(0.72 0.11 264) still fits — but push C to 0.19 and hue 264° overflows while 145° holds. When a “uniform” palette looks uneven, this per-hue ceiling is almost always the story, and the warning here is the diagnosis.
Practical destinations for the RGB output
Canvas and WebGL (which speak channels), email HTML (hex-only territory), design tools without OKLCH fields yet, and fallback lines in CSS. Alpha carries through untouched — oklch(… / 60%) exits as rgba()/8-digit hex.
Trust, but verify
The implementation’s round-trips are asserted against the OKLab reference matrices in CI. For your own spot checks: any oklch with C=0 must exit as a pure gray (equal channels) — a two-second audit that catches most broken converters.
Reference values, computed live
Worked values beat abstractions. Seven familiar colors written as oklch() and the exact channel triplets this converter returns for them:
| Color | OKLCH | RGB |
|---|---|---|
| orchid | oklch(0.702 0.181 328.7) | rgb(218, 112, 214) |
| tomato | oklch(0.696 0.196 32.3) | rgb(255, 99, 71) |
| mediumseagreen | oklch(0.684 0.144 155) | rgb(60, 179, 113) |
| mediumpurple | oklch(0.627 0.158 296.7) | rgb(147, 112, 219) |
| goldenrod | oklch(0.752 0.147 84) | rgb(218, 165, 32) |
| crimson | oklch(0.571 0.222 20.1) | rgb(220, 20, 60) |
| olivedrab | oklch(0.599 0.137 126.3) | rgb(107, 142, 35) |
The useful exercise is reading right to left: pick a row, cover the OKLCH column, and ask what L, C and H you would guess — then check. A few rounds of that game and oklch() literals in stylesheets stop needing this converter for comprehension, only for precision.
How to use the OKLCH to RGB Converter
- Enter the oklch() color.
- The result updates live as you type – no convert button needed.
- Check the gamut note before shipping vivid values.
- Copy the value with the copy button, or switch the output format dropdown for other export shapes.
Frequently asked questions
How is OKLCH turned back into RGB?
Rectangularize to OKLab, apply the inverse LMS matrices with a cube, matrix into linear sRGB and gamma-encode. Simple math – the substance is in gamut honesty, which this tool reports instead of hiding.
What happens when an OKLCH color does not fit sRGB?
You get the nearest displayable version plus an explicit warning – not a silent clip. If precision matters, the Color Gamut Mapper shows exactly how much chroma had to go (holding L and H fixed, binary-searching C, the CSS method).
Why do equal-chroma OKLCH palettes clip at some hues?
sRGB's gamut is lopsided in OKLCH: yellows carry far more chroma than blues at the same lightness. A C that fits at hue 100° may exceed the gamut at 264°. The OKLCH Palette Generator manages this per-hue and tells you when it intervened.
Which browsers support oklch() natively?
All current engines – Chrome/Edge 111+, Safari 15.4+, Firefox 113+. For older matrices of browsers, ship the converted rgb()/hex from this tool as the fallback line before the oklch() declaration.
What is oklch(1 0 0) and oklch(0 0 0)?
White and black respectively: at the lightness extremes chroma must be 0 and the hue angle stops meaning anything. Any hue number in those positions renders identically – oklch(1 0 0) and oklch(1 0 200) are both pure white.
Can I use this for animating colors?
It is the right space for it: interpolating in OKLCH keeps perceived lightness steady through the transition, where RGB interpolation dips through mud. CSS transitions can now interpolate in oklch directly via color-interpolation hints.
Does the converter accept alpha?
Yes – oklch(0.63 0.15 250 / 60%) parses with its slash-alpha and carries the 60% opacity through to the rgba() and 8-digit hex outputs unchanged. Alpha never participates in the color-space math; it rides alongside.