Convert CMYK to RGB
Get the three screen channels for a print color and nothing else: C0 M50 Y100 K0 gives red 255, green 128 and blue 0. A value outside 0 to 100 is refused instead of quietly changed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- C
- 0
- M
- 50
- Y
- 100
- K
- 0
- Resistance (Ω)
- 255
- G
- 128
- B
- 0
Convert cyan, magenta, yellow, and key percentages into the red, green, and blue channel values used by screens and common digital graphics tools. This focused converter accepts four numeric percentages, validates that every value is between zero and one hundred, and returns three rounded integers between zero and two hundred fifty-five. It is useful when a print-oriented colour specification must become a simple digital preview, a CSS input, or an application colour value. The calculation is deterministic, needs no network service, and reports invalid input instead of silently changing an out-of-range percentage.
Enter four percentages with explicit bounds
Provide c, m, y, and k as numbers representing cyan, magenta, yellow, and key black. Every field is required, and each number may range from zero through one hundred, including decimal percentages within that interval. Zero means that the corresponding ink contributes no coverage, while one hundred means full coverage.
The converter deliberately rejects missing fields, text values, non-finite numbers, and percentages below zero or above one hundred. That strict behavior matters in automated workflows because silently clamping a mistyped value can create a plausible-looking colour that conceals bad source data. For example, c set to 120 is an error rather than being treated as 100.
Use the original numeric percentages from a design brief, print specification, or structured export. A value of 25 means twenty-five percent; it should not be entered as 0.25.
Understand the deterministic conversion
The calculation first divides each percentage by one hundred. Red is computed from the unused cyan fraction multiplied by the unused key fraction and then scaled to 255. Green follows the same process with magenta, and blue follows it with yellow.
In compact form, red is 255 times (1 minus c) times (1 minus k), with c and k expressed as fractions; the other channels substitute m or y. Each result is rounded to the nearest whole number because standard RGB channels are normally represented as byte values from zero to 255. With all CMYK values at zero, the result is white: red, green, and blue are each 255.
With key at one hundred, the result is black regardless of the other three percentages because no channel brightness remains.
Use the RGB result in digital workflows
When CSS text is needed, format the returned values as rgb(r, g, b); when hexadecimal notation is needed, convert each channel to a two-digit hexadecimal pair in the calling application. Keeping this capability focused on the three numeric channels makes its output predictable and easy to type in SDKs. Use the browser tool for occasional conversions during a print-to-web handoff or while checking a colour exercise.
Treat the output as a practical digital approximation rather than a proof of colour fidelity. CMYK describes subtractive ink behavior and RGB describes emitted light, so an exact appearance match depends on device profiles and viewing conditions that four percentages alone cannot encode. Validation errors should be fixed at the source and resubmitted rather than caught and replaced with guessed values.
What you can do with it
Print specifications for web previews
Turn a four-channel CMYK brand value into RGB integers for a quick on-screen swatch or review interface.
Design-token import pipelines
Convert validated CMYK fields from structured product or brand data before emitting digital colour tokens.
Colour conversion exercises
Generate deterministic RGB answers for teaching, testing, or checking implementations of the standard arithmetic formula.
FAQ
What input does the converter require?
It requires numeric c, m, y, and k fields, each containing a percentage from 0 to 100 inclusive.
Are decimal percentages accepted?
Yes. Any finite numeric value within the inclusive range is accepted, and the final RGB channels are rounded to integers.
Does this perform colour-managed ICC conversion?
No. It uses a deterministic arithmetic conversion and does not model a particular press, paper, ink set, display, or ICC profile.
What happens if a value is outside 0 to 100?
It is rejected, not clamped. Cyan set to 120 is reported as an error rather than treated as 100, so a typing mistake never turns into a plausible-looking color that hides bad source data.
Should I enter 25 or 0.25 for twenty-five percent?
Enter 25. Type each ink as the percentage you see in the print specification, without a percent sign and without turning it into a fraction; the converter does that step itself.
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/cmyk-to-rgb \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"c":0,"m":50,"y":100,"k":0}'const res = await fetch("https://api.kit.forhosting.com/color/cmyk-to-rgb", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"c": 0,
"m": 50,
"y": 100,
"k": 0
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/cmyk-to-rgb",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"c": 0,
"m": 50,
"y": 100,
"k": 0
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/cmyk-to-rgb", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"c":0,"m":50,"y":100,"k":0}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"c":0,"m":50,"y":100,"k":0}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/cmyk-to-rgb", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"c": 0,
"m": 50,
"y": 100,
"k": 0
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.cmyk_to_rgb",
"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
Browser use is free, while API automation costs $0.002 per item.
Enter four percentages with explicit bounds
Do not add percent signs to the JSON values, and do not convert the percentages into fractions yourself. Once all four values pass validation, the same pure calculation runs in the browser and API without external services or environment-dependent settings.
Use the RGB result in digital workflows
A successful response contains r, g, and b, each as an integer from zero to 255. These compact fields can feed a canvas drawing operation, image-processing parameter, design-token generator, colour swatch component, or another conversion step. Use the API at $0.002 per item when a catalogue import, asset pipeline, or application needs repeatable conversion without maintaining equivalent formulas in several codebases.
Technical questions
What happens when a value is outside 0–100?
The request fails with an invalid_input error. Out-of-range percentages are never silently clamped.
How much does API conversion cost?
Each API item costs $0.002. The in-browser version runs locally and is free to use.