CMYK Proof
Screen design tools speak sRGB hex. Presses speak CMYK ink under a specific ICC profile. Saturated screen colors (neon reds, electric blues, vivid greens) silently desaturate at print time, and a naive hex-to-CMYK formula conversion tells you nothing about it. This skill closes the gap: every color is proofed through a real press profile before it touches the canvas, so what the client approves on screen is what the press can actually make.
Requirements
- ImageMagick 7 (
magick on PATH).
- A press ICC profile. Free and redistributable: PSOcoated_v3 or ISOcoated_v2 from eci.org (European standard). GRACoL2013_CRPC6 ships with Adobe apps (US standard, common digital-press target). Ask the print vendor which profile they proof against; when in doubt, coated defaults above are right for most commercial work.
- The script auto-detects installed profiles, or takes
--profile <path> / the CMYK_PROFILE env var.
Quick start
# brand hex -> press recipe + the hex to actually use on canvas
node scripts/cmyk_proof.mjs hex '#FF003D' '#2F6F95'
# #FF003D -> C0 M96.2 Y74 K0 -> canvas #E72038 (out of gamut, drift 32)
# #2F6F95 -> C79.2 M38.5 Y13.5 K19.1 -> canvas #2E6F95 (safe, drift 1)
# recipe (percent) -> canvas hex, for colors born in ink
node scripts/cmyk_proof.mjs cmyk '0,96,74,0'
# tints of a recipe, without minting new colors
node scripts/cmyk_proof.mjs tint '20,70,0,15' 15 20 40
# soft-proof a whole exported board
node scripts/cmyk_proof.mjs image export.png proof.png
Verdicts: safe (drift ≤ 8/255 per channel), shifts (≤ 24), out of gamut (> 24). Every row also reports TAC (total area coverage, the four ink percentages summed); the script warns above 300%, a common coated-stock limit. Confirm the vendor's actual limit. --json for machine-readable output, --intent and --tac to override defaults.
The born-CMYK workflow
The law: only print-simulated hexes enter the canvas, and production files are rebuilt from recipes, never converted from canvas hexes.
- Every candidate color goes through the script before use. Canvas gets the
canvas hex from the output, not the original.
- Record the recipe with the color wherever the tool allows: token descriptions, style notes, a palette board. Each color is dual-value, recipe for the press, sim hex for the screen. When print files are built (InDesign, Affinity, or direct to the vendor), colors are re-entered from the recorded recipes.
- If a brand color is out of gamut, do not quietly use it. Show the owner the original next to the print simulation, offer in-gamut candidates, and get an explicit pick. If the unprintable original must stay in the file as a reference, keep it raw and visibly labeled not printable, never as a reusable token.
- Tints come from the
tint mode (scaled ink recipes), not from screen opacity. A 20% opacity overlay and a 20% ink tint are different colors.
- Judge candidates in context: proof swatches sitting on the background color they will print over, never isolated on white.
Ink discipline
- Body text and fine rules: single-ink black (
cmyk '0,0,0,100', or a K-only tint for grays). Four-ink builds on small type risk registration fringing and color casts.
- Large dark solids: rich black, e.g.
cmyk '60,40,40,100' (confirm the vendor's preferred build). A hex near-black converted from screen becomes an accidental four-ink build, the TAC warning will usually catch it.
- Grays: K-only tints via
tint '0,0,0,100' <pct>, not CMY mixes.
- Avoid reversing small type out of multi-ink builds for the same registration reason.
Canvas hygiene
- If the tool supports variables or tokens, bind every swatch and fill to them. After copying nodes between files, verify the bindings survived, copies often flatten to raw hex. Re-check by reading values back, not by eye.
- The canvas is the spec, not the print artwork. Exports are for approval and mockups; final artwork is rebuilt in a print-capable tool from the recorded recipes and the geometry spec.
- Before client review of near-final boards, run the full export through
image mode and look at the proof, not the raw export.
Physical geometry
Pixel-native tools also lack print units, bleed, and fold handling. See references/print-geometry.md for the ppi math, bleed/trim/safe setup, and fold-allowance rules.
1---2name: cmyk-proof3description: ICC-accurate CMYK proofing for print work designed in screen-native canvas tools (Paper, Figma, or any hex-only design surface). Converts brand hexes to press recipes plus print-simulated canvas hexes, soft-proofs whole exports, derives ink tints, and flags out-of-gamut colors and total-ink violations via a bundled ImageMagick script. Use when designing anything physically printed (brochures, posters, packaging, stationery) in a tool without CMYK support, or when the user mentions CMYK, print-ready, gamut, ICC, press profiles, or colors that must survive printing.4---56# CMYK Proof78Screen design tools speak sRGB hex. Presses speak CMYK ink under a specific ICC profile. Saturated screen colors (neon reds, electric blues, vivid greens) silently desaturate at print time, and a naive hex-to-CMYK formula conversion tells you nothing about it. This skill closes the gap: every color is proofed through a real press profile before it touches the canvas, so what the client approves on screen is what the press can actually make.910## Requirements1112- ImageMagick 7 (`magick` on PATH).13- A press ICC profile. Free and redistributable: [PSOcoated_v3 or ISOcoated_v2 from eci.org](https://www.eci.org/en/downloads) (European standard). GRACoL2013_CRPC6 ships with Adobe apps (US standard, common digital-press target). Ask the print vendor which profile they proof against; when in doubt, coated defaults above are right for most commercial work.14- The script auto-detects installed profiles, or takes `--profile <path>` / the `CMYK_PROFILE` env var.1516## Quick start1718```bash19# brand hex -> press recipe + the hex to actually use on canvas20node scripts/cmyk_proof.mjs hex '#FF003D' '#2F6F95'21# #FF003D -> C0 M96.2 Y74 K0 -> canvas #E72038 (out of gamut, drift 32)22# #2F6F95 -> C79.2 M38.5 Y13.5 K19.1 -> canvas #2E6F95 (safe, drift 1)2324# recipe (percent) -> canvas hex, for colors born in ink25node scripts/cmyk_proof.mjs cmyk '0,96,74,0'2627# tints of a recipe, without minting new colors28node scripts/cmyk_proof.mjs tint '20,70,0,15' 15 20 402930# soft-proof a whole exported board31node scripts/cmyk_proof.mjs image export.png proof.png32```3334Verdicts: `safe` (drift ≤ 8/255 per channel), `shifts` (≤ 24), `out of gamut` (> 24). Every row also reports TAC (total area coverage, the four ink percentages summed); the script warns above 300%, a common coated-stock limit. Confirm the vendor's actual limit. `--json` for machine-readable output, `--intent` and `--tac` to override defaults.3536## The born-CMYK workflow3738The law: **only print-simulated hexes enter the canvas, and production files are rebuilt from recipes, never converted from canvas hexes.**39401. Every candidate color goes through the script before use. Canvas gets the `canvas` hex from the output, not the original.412. Record the recipe with the color wherever the tool allows: token descriptions, style notes, a palette board. Each color is dual-value, recipe for the press, sim hex for the screen. When print files are built (InDesign, Affinity, or direct to the vendor), colors are re-entered from the recorded recipes.423. If a brand color is out of gamut, do not quietly use it. Show the owner the original next to the print simulation, offer in-gamut candidates, and get an explicit pick. If the unprintable original must stay in the file as a reference, keep it raw and visibly labeled not printable, never as a reusable token.434. Tints come from the `tint` mode (scaled ink recipes), not from screen opacity. A 20% opacity overlay and a 20% ink tint are different colors.445. Judge candidates in context: proof swatches sitting on the background color they will print over, never isolated on white.4546## Ink discipline4748- Body text and fine rules: single-ink black (`cmyk '0,0,0,100'`, or a K-only tint for grays). Four-ink builds on small type risk registration fringing and color casts.49- Large dark solids: rich black, e.g. `cmyk '60,40,40,100'` (confirm the vendor's preferred build). A hex near-black converted from screen becomes an accidental four-ink build, the TAC warning will usually catch it.50- Grays: K-only tints via `tint '0,0,0,100' <pct>`, not CMY mixes.51- Avoid reversing small type out of multi-ink builds for the same registration reason.5253## Canvas hygiene5455- If the tool supports variables or tokens, bind every swatch and fill to them. After copying nodes between files, verify the bindings survived, copies often flatten to raw hex. Re-check by reading values back, not by eye.56- The canvas is the spec, not the print artwork. Exports are for approval and mockups; final artwork is rebuilt in a print-capable tool from the recorded recipes and the geometry spec.57- Before client review of near-final boards, run the full export through `image` mode and look at the proof, not the raw export.5859## Physical geometry6061Pixel-native tools also lack print units, bleed, and fold handling. See [references/print-geometry.md](references/print-geometry.md) for the ppi math, bleed/trim/safe setup, and fold-allowance rules.