CMYK Print Color Picker
Convert between screen RGB and print CMYK in both directions, with a total ink coverage warning for values that will not print cleanly.
This is the standard naive RGB↔CMYK conversion — the same one design apps use before a color profile is applied. Real press output depends on the printer's ICC profile, paper and inks, so treat these values as a starting point and proof on the actual stock.
A bug this page had, and the one line that fixed it
The textbook conversion computes the black channel first and divides the rest by what is left:
k = 1 - max(r,g,b)/255, then c = (1 - r/255 - k) / (1 - k).
For pure black, max is 0, so k is 1, and the second line divides by
zero. JavaScript returns NaN rather than throwing, so nothing crashed — the readout
simply showed CNaN MNaN YNaN K100 for the one colour a print tool is most likely
to be asked about:
| Colour | Before | Now |
|---|---|---|
| rgb(0, 0, 0) | CNaN MNaN YNaN K100 | C0 M0 Y0 K100 |
| rgb(1, 1, 1) | C0 M0 Y0 K100 | C0 M0 Y0 K100 |
| rgb(0, 0, 1) | C100 M100 Y0 K100 | C100 M100 Y0 K100 |
| rgb(255, 255, 255) | C0 M0 Y0 K0 | C0 M0 Y0 K0 |
The fix is the whole of the special case: if k is 1 the colour is black, and
black prints as C0 M0 Y0 K100 — no ink of any other kind. The general formula cannot
produce that, because it asks what fraction of the remaining brightness each channel
absorbs, and when there is no remaining brightness the question has no answer.
Worth noting where it hid. Every colour near black was already fine —
rgb(1,1,1) gives C0 M0 Y0 K100 correctly, because k is then
0.996 and the division is merely close to the edge rather than on it. Exactly one colour out
of 16,777,216 failed, which is the kind of case a sweep across sample values misses and an
exhaustive check does not.
And the round trip is lossy, which is not a bug
Even fixed, this conversion does not come home. The CMYK values are whole percentages — which is what a print shop expects — and a percentage is a coarser grid than 8-bit RGB. Checking every colour rather than a sample:
| Count | |
|---|---|
| colours in the space | 16,777,216 |
| returning to exactly the same RGB | 2,139,467 (12.75%) |
| worst single-channel error | 2 out of 255 |
About one colour in eight survives exactly. The other seven land a step or two away — the worst case anywhere in the space is rgb(0, 64, 65) coming back as rgb(0, 62, 64), which is invisible on screen and irrelevant on paper. Rounding to whole percentages is the point rather than an accident, so this is a loss worth accepting.
The corners of the space — black, white and the three primaries — all round-trip exactly, so the loss lives in the middle where the percentage grid is coarsest relative to the values. That is also the check that separates "lossy by design" from "wrong".
The larger caveat is that all of this arithmetic is a naive conversion, and every conversion of this kind is. Real CMYK depends on the ink, the paper and the press: the same four numbers give different colours on newsprint and on gloss, which is exactly what a colour profile exists to describe. So the honest reading of any CMYK number here is "a sensible starting point to hand to a printer", not "the colour you will get" — and bright screen colours in particular have no CMYK equivalent at all, though the formula will happily return numbers for them.
How to use
- Enter a colour as RGB, hex or CMYK.
- Read the converted values.
- Check the total ink coverage figure.
- Treat any conversion as approximate without a printer profile.
Frequently asked questions
Why does CMYK never match my screen?
Because they work in opposite directions. A screen emits light and adds colours together, so more of everything is brighter; ink absorbs light and subtracts, so more of everything is darker. The range of colours ink can reproduce is smaller, and vivid screen colours simply have no printable equivalent.
What is total ink coverage?
The sum of all four channel percentages. Most commercial presses limit it to around 300 per cent, and newsprint considerably less. Exceeding it means the paper cannot absorb the ink, causing smearing, set-off onto the next sheet and extended drying times.
Why is there a black channel at all?
Because mixing cyan, magenta and yellow to make black produces a muddy dark brown, uses three times the ink, and registers poorly — any tiny misalignment between plates shows as colour fringing on text. A dedicated black plate is cleaner, cheaper and sharper.
How should I set black text for print?
As pure black on the black channel only, with the other three at zero. Rich black, which adds the other inks, is for large solid areas where flat black looks washed out — using it for small text guarantees registration fringing.
Is a generic conversion good enough?
For a rough preview, yes. For anything going to press, no. Accurate conversion needs an ICC profile for the specific press, ink and paper, since the same CMYK values print differently on coated and uncoated stock. A printer will supply the profile they want you to use.
What about spot colours?
They are premixed inks rather than combinations of the four process colours, used where an exact colour matters — a brand mark, for instance — or where a colour is outside the printable range, such as a metallic or a fluorescent. They cost extra per colour and cannot be simulated accurately on screen.
🔒 This tool runs entirely in your browser. Nothing you enter is uploaded, logged, or stored.