ΔEITP (BT.2124) calculator
Compare two sRGB hex colors with the ΔEITP metric from BT.2124: their distance in ICtCp space, multiplied by 720, which is 0 when they are identical, as with #000000 against #000000. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Hex1
- #000000
- Hex2
- #000000
- Decimal places
- 6
- Delta e itp
- 0
Approximate ΔEITP (BT.2124-style) between two sRGB hex colors. Search intent: delta E ITP. No network calls or random seeds are required. Failed jobs are not billed.
What ΔEITP tells you about two colors
ΔEITP is a color-difference number described in the ITU recommendation BT.2124. Instead of comparing red, green and blue values directly, it places both colors in the ICtCp space, where I stands for intensity and Ct and Cp for the two color axes, and measures how far apart they sit. A result of 0 means the two colors are the same; the larger the number, the more they differ. This calculator accepts two sRGB colors written as hex codes, so you can paste values straight from a style sheet, a brand guide or a color picker.
How the number is worked out, and what to watch for
The tool converts each hex color into ICtCp-like values, takes the difference in I, Ct and Cp, squares each difference, adds them, takes the square root and multiplies by 720. You choose how many decimals to keep, and rounding is applied only once, to the full result. Use it to compare a printed sample against its target, two versions of a brand color or the shades in a palette. Keep in mind that this is an approximation in the BT.2124 style, not a certified measurement, and that its scale is not the same as other ΔE formulas, so do not mix their numbers in one tolerance.
When to use it
Use when search intent matches. Approximate ΔEITP (BT.2124-style) between two sRGB hex colors. English-only delivery; Nitro hydrates other locales.
No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required.
Failed jobs are not billed.
What you can do with it
Teaching
Pinned goldens.
FAQ
What is ΔEITP?
It is a color-difference measure described in the BT.2124 recommendation. It places both colors in ICtCp space and works out the distance between them multiplied by 720; two identical colors give 0.
How is the ΔEITP difference calculated?
Each hex color is converted to ICtCp-like values. The differences in I, Ct and Cp are squared and added, the square root is taken, and the result is multiplied by 720.
Is the result the official BT.2124 value?
Not exactly: it is an approximation in the BT.2124 style, calculated in a space close to ICtCp. It is meant for comparing colors against each other on a consistent scale, not as a certified instrument reading.
Can I choose how many decimals are shown?
Yes. Enter the number of decimals you need, for example 6, and the result is rounded once, with halves rounded up, starting from the unrounded value.
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/delta-e-itp \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"hex1":"#ff0000","hex2":"#00ff00"}'const res = await fetch("https://api.kit.forhosting.com/color/delta-e-itp", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"hex1": "#ff0000",
"hex2": "#00ff00"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/delta-e-itp",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"hex1": "#ff0000",
"hex2": "#00ff00"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/delta-e-itp", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"hex1":"#ff0000","hex2":"#00ff00"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"hex1":"#ff0000","hex2":"#00ff00"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/delta-e-itp", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"hex1": "#ff0000",
"hex2": "#00ff00"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.delta_e_itp",
"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 calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested.
How it works
Approximate ΔEITP (BT.2124-style) between two sRGB hex colors. 720 √(ΔI²+ΔCt²+ΔCp²) in ICtCp-like space. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input.
Inputs, limits and rounding
Optional decimals use half-up once. Optional output fields are omitted, never null. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. Provide required JSON fields with DOM-safe names. Invalid types raise invalid_input. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested.
When to use it
The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested.
Integration use cases
Quick check
Free widget.
Automation
API same JSON.
Technical questions
Free?
Yes tier A.
Network?
No.
Bad input?
invalid_input.
API?
Yes.
Locales?
EN-only; Nitro hydrates.