Rich black recipe generator
Get a press-safe rich black build in one step: the standard profile on coated sheetfed gives C60 M40 Y40 K100, 240 % total ink with 80 points to spare under the 320 % limit. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Profile
- Standard
- Press
- Sheetfed coated
- Cyan
- 60
- Magenta
- 40
- Yellow
- 40
- Black
- 100
Solid pure black (0,0,0,100) often prints dull or mottled on offset and digital presses because a single K plate cannot lay enough ink density for deep solids. Prepress teams therefore build rich black: full or near-full key with controlled cyan, magenta, and yellow underneath so the solid looks denser and more neutral. The wrong undercolor recipe, however, blows past the press total area coverage limit and causes set-off, drying problems, or greyed shadows. This rich black recipe generator accepts a named undercolor profile or custom C/M/Y, a target press family, optional black percent and TAC override, and returns a validated CMYK recipe with total ink, headroom, and whether undercolors were scaled to fit.
What rich black is and which undercolor profile to pick
Rich black means building a solid black by stacking process undercolors under a strong black channel instead of relying on K alone. Skeleton black is pure K with zero cyan, magenta, and yellow; it is safe for fine type and thin rules but looks flat in large solids. Standard rich black commonly uses about sixty cyan with forty magenta and forty yellow under full K, a cool bias that deepens shadows on coated sheetfed stock.
Cool rich black keeps only cyan under K so blues and neutrals stay cooler; warm rich black uses magenta and yellow without cyan for brownish or photographic skin-friendly shadows. Neutral rich black sits between those extremes with slightly less cyan than the standard recipe. Registration black pushes every channel to one hundred percent and is reserved for registration marks and special devices—not for full-page solids—because total ink can reach four hundred percent.
Custom mode lets you enter your house undercolor percentages when your printer already published a preferred build.
What you can do with it
Brand design systems
Publish one validated rich-black CMYK build per press class so every designer and template uses the same solid black.
Print estimating and preflight
Check total ink against sheetfed, web, newsprint, digital, or flexo TAC before committing plates or digital impressions.
Multi-printer handoff
Regenerate house rich black for each vendor TAC limit or custom undercolors without rewriting swatches by hand.
FAQ
What is a rich black recipe?
A CMYK solid that combines full or high black (K) with controlled cyan, magenta, and yellow undercolors so large black areas print denser than skeleton K alone.
Which profile should I use for coated sheetfed?
Switch to cool or warm if your printer prefers a cooler or warmer solid.
Why does pure black look dull in large solids?
A single black plate cannot lay down enough ink for a deep solid, so big areas print flat or mottled. Adding controlled cyan, magenta and yellow underneath makes the solid denser and more neutral.
What is total ink coverage and why does it matter?
It is the sum of the four ink percentages at one spot on the sheet. Going past the press limit causes set-off, drying problems or greyed shadows, so each recipe is checked against that limit.
What happens if my rich black goes over the ink limit?
By default, the cyan, magenta and yellow underneath are reduced in proportion while black stays fixed, until the total fits. You can also choose to have an over-limit recipe refused instead.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/color/black-generation \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"profile":"standard","press":"sheetfed_coated"}'const res = await fetch("https://api.kit.forhosting.com/color/black-generation", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"profile": "standard",
"press": "sheetfed_coated"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/black-generation",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"profile": "standard",
"press": "sheetfed_coated"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/black-generation", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"profile":"standard","press":"sheetfed_coated"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"profile":"standard","press":"sheetfed_coated"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/black-generation", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"profile": "standard",
"press": "sheetfed_coated"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.black_generation",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The same pure module powers the free browser tool and the API path, so design systems, print estimators, and automation scripts always agree on the numbers.
What rich black is and which undercolor profile to pick
This endpoint encodes those named profiles as fixed tables so every call is deterministic: the same profile and press always return the same recipe before any TAC scaling step.
Press TAC limits, scaling, and the response contract
Total area coverage, or TAC, is the sum of cyan, magenta, yellow, and black percentages at a single location on the sheet. Sheetfed coated work often tolerates about three hundred twenty percent; uncoated sheetfed and web offset commonly sit near two hundred eighty; newsprint is tighter around two hundred forty; digital and flexo sit in the two hundred sixty to three hundred range depending on device. When you select a press, this tool applies that default TAC limit unless you pass an explicit tac_limit override from your house standard. If the raw profile sum exceeds the limit and scale_to_tac is true (the default), cyan, magenta, and yellow are scaled by the same factor so undercolors fit the remaining room under fixed K, with deterministic one-decimal rounding and a small shave of the largest channel if rounding would still overflow. If scale_to_tac is false, the task fails with invalid_input instead of inventing a legal recipe. Success returns profile, press, cyan, magenta, yellow, black, total_ink, tac_limit, headroom, undercolor_sum, scaled, a human recipe string such as C60 M40 Y40 K100, a short formula, and valid true. Missing required fields, out-of-range percents, black alone above TAC, and custom profiles without all three undercolors fail with invalid_input and are not billed.
Where a rich black recipe API earns its keep
Brand design systems need a single source of truth for the corporate rich black so marketing PDFs, packaging, and display ads do not each invent a different CMYK solid. Print estimators and MIS tools can call the same contract when quoting sheetfed versus newsprint jobs and show total ink headroom before the plate is made. Agencies that hand off files to multiple printers can switch the press enum or tac_limit per vendor without rewriting undercolor tables in InDesign styles by hand. Educational sites that rank for rich black recipe generator benefit from a free in-browser calculator that matches the paid API byte for byte on pure arithmetic.
Technical questions
What happens if the recipe exceeds TAC?
With scale_to_tac true (default), C/M/Y are scaled under fixed K to fit the limit and scaled is true. With scale_to_tac false, the task fails with invalid_input.
Can I enter custom undercolors?
Yes. Set profile to custom and provide cyan, magenta, and yellow between 0 and 100. black_k defaults to 100; optional tac_limit overrides the press default.
What does the rich black recipe generator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.