ForHosting KIT · Developer Utilities

Color blind safe palette checker

A categorical palette must do more than look attractive under ordinary viewing conditions.

● BetaFree · in your browser
Use it from WebAPIEmailTelegramApp soon

Its colors need to remain separable when a chart, map, dashboard, or interface is viewed by somebody with common red-green color vision deficiencies. This checker simulates full protanopia and deuteranopia, measures every color pair in a perceptual color space, and identifies pairs that fall below your chosen distinguishability threshold. It provides a reproducible early warning for palette design, while leaving final review in the context of labels, shapes, line styles, and actual display sizes to the designer.

Test every relationship in a categorical palette

Categorical color is used to tell independent classes apart: product lines in a chart, routes on a map, statuses in a dashboard, or teams in a planning view. A palette can appear varied to one viewer yet contain two colors that converge for a viewer with red-green color vision deficiency. Paste between two and sixty-four hexadecimal colors into the checker. It normalizes short and long hexadecimal notation, evaluates every unique pair, and returns the original indices so you can find the exact swatches in your source system. The result reports whether the palette passed, how many pairs were examined, and which pairs need attention. It also returns simulated hexadecimal colors for protanopia and deuteranopia, making the numerical result easier to inspect or reproduce in a design review. Treat a flagged pair as a prompt to increase its lightness, saturation, or hue separation, then run the revised palette again. Duplicate colors are naturally flagged because their perceptual distance is zero. Invalid notation, oversized lists, and palettes with fewer than two colors are rejected instead of producing a misleading result.

Understand the simulation and threshold

The calculation first decodes each sRGB color and linearizes its channels, because deficiency matrices should not be applied directly to gamma-encoded display values. It applies established full-severity matrices separately for protanopia and deuteranopia, converts each simulated result to CIE Lab, and measures pair separation with the CIE76 distance formula. A pair is flagged when its distance is strictly below the threshold. The default threshold is twenty, a deliberately practical screening value for categorical palettes rather than a claim that one number captures every human observer or viewing condition. You can lower it for a less conservative technical check or raise it when small marks, thin lines, poor displays, or hurried scanning demand stronger separation. The output keeps results for both simulated conditions separate and also provides a consolidated list, so automated workflows can fail once without losing the diagnostic detail. The original color distance is included for flagged pairs to show whether colors that begin far apart collapse after simulation. Numerical distances are rounded for stable results, but comparisons use the same computed values before presentation concerns affect the report.

Use the result as one layer of accessible design

A passing palette is useful evidence, but it is not a complete accessibility certificate. Color appearance changes with surrounding colors, mark size, anti-aliasing, display calibration, ambient light, and the severity and type of an individual viewer's color vision. More importantly, interfaces should not communicate essential meaning through color alone. Pair this check with direct labels, icons, patterns, shapes, line dashes, or position so that a person can identify categories even when two colors are difficult to name. For charts, test the finished visualization at its expected size rather than approving isolated swatches only. For states such as success and failure, verify text and background contrast separately because categorical distance and WCAG contrast answer different questions. In a design-system workflow, run this capability whenever palette tokens change and store the deterministic JSON result alongside other quality checks. The same ordered input always receives the same calculation: there is no network request, random sampling, model inference, or time-dependent data. The browser implementation and API share the same solver, allowing designers to experiment interactively and engineering teams to enforce the chosen threshold in continuous integration for $0.002 per request.

Review chart series colors

Find line, bar, or area-series colors that may merge under common red-green color vision deficiencies before publishing a dashboard.

Protect design-system tokens

Run a deterministic check when categorical palette tokens change and block revisions that introduce a newly ambiguous pair.

Audit map and status categories

Identify regions, routes, or state colors that need additional hue or lightness separation, labels, patterns, or icons.

Which color formats are accepted?

Use hexadecimal sRGB colors in #RGB or #RRGGBB form. Short notation is expanded and output is normalized to uppercase #RRGGBB.

What does the threshold mean?

It is the minimum CIE76 distance allowed after simulation. A pair below the threshold is flagged; the default is 20.

Does a safe result guarantee accessibility?

No. It is a palette-screening result. Also use redundant cues, test the finished design, and perform the appropriate text or non-text contrast checks.

Which deficiencies are simulated?

The checker simulates full-severity protanopia and deuteranopia separately and reports the failing pairs for each condition.

Why include the original distance?

It helps reveal pairs that look widely separated before simulation but become close under one or both simulated conditions.

What does the API cost?

Each API request costs $0.002. The checker can also run in the browser with the same deterministic solver.

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.

POSThttps://api.kit.forhosting.com/color/color-blind-safe-palette-check

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.

curl -X POST https://api.kit.forhosting.com/color/color-blind-safe-palette-check \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"colors":["#0072B2","#D55E00","#009E73","#CC79A7"]}'
{
  "colors": [
    "#0072B2",
    "#D55E00",
    "#009E73",
    "#CC79A7"
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "color.color_blind_safe_palette_check",
  "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.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →