From Print to Screen
How Sanzo Wada's printed swatches became hex values, and how far to trust them
Between 1933 and 1934 Sanzo Wada published six small volumes of color studies in Japan, documenting more than a thousand combinations. The book most people know today, A Dictionary of Color Combinations from the Kyoto publisher Seigensha, is a selection of 348 of them built from 159 colors. You can hold a copy, look at a swatch of Peacock Blue next to Burnt Sienna, and see what Wada meant.
A screen cannot show you that swatch. It can only show you a number someone chose to stand for it. This piece follows how those numbers were made, what was lost on the way, and how to use them with the right amount of trust.
What the book actually gives you
The Seigensha edition does not print hex codes. Next to each color it prints a name and four ink percentages: cyan, magenta, yellow and black, the CMYK of offset printing. Burnt Sienna, for example, is listed as C22 M76 Y100 K15.
That is a recipe for a printing press, not a description of a color. Four percentages say how much of each ink to lay down, but the result depends on the inks, the paper and the press. In color-management terms, CMYK is device dependent.
There is also a gap in the record that is worth stating plainly. I could not find a source explaining who assigned the CMYK values to Wada's colors, or how the original 1930s volumes were printed. The values come from the modern edition; whether they were measured from original plates, matched by eye, or set by the reprint's prepress team is not documented anywhere I could check.
From the book to a JSON file
The color data on espectro.dev comes from an open dataset by Matt DesLauriers, published on GitHub under the MIT license. His README credits the original transcription to Dain M. Blodorn Kim, who built an earlier interactive web version of the book. DesLauriers forked that data, fixed some incorrect entries, and redid the conversion to screen colors, because, in his words, some of the original conversions "looked very different" from the physical book.
The fork's method is short and documented. Each CMYK value from the book was converted with two ICC profiles:
- CMYK source: U.S. Web Coated (SWOP) v2
- RGB destination: sRGB IEC61966-2.1
- Rendering intent: relative colorimetric, with black point compensation
The conversion script uses Little CMS, a standard open-source color engine. It produces three fields for every color: an rgb triple, a hex string made from it, and a lab value in CIELAB with a D50 white point, computed straight from the CMYK through the same press profile. The README adds an honest caveat: there may still be differences from the printed swatches, "as the conversion is not exact."
The espectro.dev dataset is the same data. Every name, CMYK value and hex code matches the upstream file.
Why a formula is not enough
There is a simple CMYK-to-RGB formula that circulates widely: red equals 255 × (1 − C) × (1 − K), and likewise for green and blue. It treats inks as perfect filters on perfect white paper, which they are not. As the CMYK entry on Wikipedia puts it, there is "no universal formula" for converting between the two; accurate conversion goes through profiles that describe real devices.
The difference is not subtle. Here are five of Wada's colors, with the naive formula next to the profile-based hex in the dataset:
| Color | CMYK in the book | Naive formula | Dataset hex (SWOP → sRGB) |
|---|---|---|---|
| Blue Violet | 72 / 80 / 0 / 0 | #4733ff | #6450a1 |
| Sea Green | 80 / 0 / 51 / 0 | #33ff7d | #00b49b |
| Burnt Sienna | 22 / 76 / 100 / 15 | #a93400 | #ae5224 |
| Hermosa Pink | 0 / 30 / 6 / 0 | #ffb2f0 | #f9c1ce |
| Black | 20 / 10 / 15 / 100 | #000000 | #111314 |
The naive column is what you get when you pretend ink is light. Blue Violet becomes an electric screen blue no press could print. Sea Green turns neon. Hermosa Pink drifts toward lilac. Black, which in the book carries extra cyan, magenta and yellow under full black ink, collapses to pure #000000, while the profile gives a very dark, slightly cool gray, closer to what a dense printed black looks like.
The profile column is not the book either. It is a model of what those inks would look like on a typical American web-offset press on coated paper, translated into the standard screen color space.
The profile is a stand-in
That choice of profile is the largest assumption in the whole chain. SWOP, short for Specifications for Web Offset Publications, is a North American print standard. Japan has its own reference conditions, such as Japan Color 2001 Coated, and a book printed in Kyoto would more plausibly have been proofed to something like that. I could not confirm which conditions Seigensha's printer used, so this is a reasonable doubt rather than a finding.
The practical meaning: if you reran the same CMYK values through a different press profile, you would get a slightly different set of hex codes, and neither set would be "the" answer. DesLauriers' repository includes the script and invites exactly that, for anyone who wants to try other profiles.
The rendering intent matters too. The ICC describes the colorimetric intents as preserving in-gamut colors accurately at the expense of out-of-gamut ones, and "relative" means relative to the media white. In plain terms, the white of the paper becomes the white of the screen. That is why White, CMYK 0 / 0 / 0 / 0, is #ffffff in the data. In the book it is simply the paper, which is never as bright as a backlit pixel.
Colors a screen cannot show
Print and screen do not cover the same range of colors. Inks absorb light and screens emit it, and each has colors the other cannot reach. Strong printed cyans and greens are a classic case where press gamuts poke outside sRGB.
Using the Lab values in the dataset, I checked which of the 159 colors fall outside sRGB. By my own rough calculation, about a dozen do: mostly the cyan and teal greens, including Sea Green, Peacock Blue, Benzol Green and Blue, plus the strongest yellows such as Yellow. For these, the hex code is the nearest sRGB color the conversion could reach, not a faithful match. Treat it as a slightly duller version of what the profile predicts.
Why the same hex looks different everywhere
Even a correct hex value is only half of the story. In CSS, a hex color is defined as an sRGB color, but screens vary in how faithfully they reproduce sRGB, how bright they are set, and how warm or cool their white is. Many newer displays cover a wider gamut, such as Display P3, and color-managed browsers map sRGB into it.
Paper adds its own variables. A swatch looks different under daylight, warm indoor bulbs and an office ceiling light, and an aged or off-white page shifts everything printed on it. Wada chose his combinations by eye on paper. The pairings are the durable part; any single number is one reading of them.
What CIELAB is for
The lab field in each color is the most useful number in the dataset, and the least used. CIELAB, defined by the International Commission on Illumination in 1976, describes color in three axes:
- L* is lightness, from 0 (black) to 100 (white)
- a* runs from green (negative) to red (positive)
- b* runs from blue (negative) to yellow (positive)
Unlike RGB, it is device independent, and it was designed so that equal steps look roughly like equal differences. That design is imperfect, and it is known to be weakest in the blues, but it is still the standard way to compare colors by how they look rather than by how they are stored.
Two details matter for Wada's data. First, these Lab values use a D50 white point, the printing-industry convention, while many other tools default to D65, so compare like with like. Second, they describe the modeled print, not a measurement of a physical book.
Combination 131 shows why Lab is worth reading. It pairs Raw Sienna, English Red and Peacock Blue. Their L* values are 55.06, 57.22 and 52.79. On a swatch page they look strongly contrasting, orange against teal, but the contrast is almost entirely in hue. Their lightness is nearly identical.
Judging and using the values
A few habits make these numbers more reliable in practice.
Check contrast before setting text. The WCAG guidelines ask for a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text, computed from the relative luminance of the sRGB values. Wada's combinations were not built for legibility. In combination 131, every pair scores between about 1.03 and 1.07, so none of the three works as text on the others. Peacock Blue on White reaches about 3.7:1, fine for a large heading but short of the body-text minimum. Use a combination's colors for fields, borders and illustration, and pair text with whichever color gives enough contrast, or with a near black such as Black.
Read L* to predict harmony and contrast. Colors with close L* values will feel even and quiet, and will vanish into each other in grayscale. Colors far apart in L* will hold up when printed in one color or viewed by someone with a color vision deficiency.
For print, start from the CMYK, then proof. If you are printing Wada's colors, the CMYK numbers from the book are closer to the source than any hex code, but they still assume a particular press. Send them to your printer with a physical proof request, and if you can, compare the proof with the book under daylight.
For screens, treat the hex as a well-made default. The dataset values are a careful, documented conversion. For the out-of-gamut teals and yellows, you can also use the Lab value directly with CSS lab(), which is defined with a D50 white point and matches the dataset's convention. On a wide-gamut display, the browser may then show some of the saturation that sRGB clipped away. That color is still a model of the print, not the print.
Sources
- Matt DesLauriers, dictionary-of-colour-combinations (MIT). README and
src/augment_sanzo.pydescribe the SWOP-to-sRGB conversion with Little CMS. - Dain M. Blodorn Kim, sanzo-wada, the original transcription and interactive version.
- Wikipedia, "Sanzo Wada", for the 1933–34 volumes and the Seigensha selection of 348 combinations.
- Wikipedia, "CMYK color model" and "Specifications for Web Offset Publications".
- ICC registry entry for Japan Color 2001 Coated, and the ICC specification ICC.1:2022 on rendering intents.
- Wikipedia, "CIELAB color space".
- W3C, CSS Color Module Level 4, on hex colors as sRGB and the D50
lab()function. - W3C, Understanding Success Criterion 1.4.3: Contrast (Minimum).
- Contrast ratios, the naive conversions and the gamut check in this article were calculated from the espectro.dev color data. Related reading: Sanzo Wada's Colors in Your Code, Who Was Sanzo Wada and the editions of the Dictionary.