Match a brand colour

Every pixel is remapped locally — this page has no server to send to.

Type the brand value, sample what should carry it, and read the colour the picture actually got. The match is on, so the selection is solved as close to the typed value as sRGB allows.

Open an image, then pick the colour you want changed.

Open a picture with the target field ready: type the brand hex, then sample the area that should carry it.

Drop an image here, or browse for one

JPG, PNG, WebP and GIF decode in every browser; BMP, TIFF and ICO open where yours knows them, and a TIFF usually only does in Safari. HEIC pulls a codec the first time one arrives.

Nothing to hand?

Sampled
#be241f → #00999d
Coverage
20.9% of the frame
One frame, one selection, and the number that decides it. The paint rotates onto a teal hue at the lightness it already had, so every highlight and shadow in it survives. The brick, the tarmac and the jacket are outside the selection and are the pixels they arrived as. Every figure here is computed by the same function the tool runs on a photograph.

The receipt is the product

Every recolour here prints what was asked, what was delivered and the distance between them. On this door that receipt is the point of the page: a brand colour is a number, and whether the picture now carries that number is a fact to check rather than a feeling.

The target field accepts hex, rgb() and oklch() values; paste a list and the first becomes the target while the rest are offered as colour variants. Save the colours you reuse as brand colours, name them, and keep the list as a text file.

What cannot be matched

  1. A target lighter or more saturated than the selection can carry at its own lightness, unless the match is allowed to move lightness.
  2. A colour outside sRGB: it is brought in along constant hue, and the share brought in is printed.
  3. A printed reference: screens and paper do not share a gamut, and no conversion here pretends otherwise.

Questions people bring to this page

What does “match as closely as sRGB allows” change?
Hue shift normally borrows only the target's hue and keeps the picture's own lightness and saturation. With the match on, the selection's lightness is moved onto the target's and its chroma scaled onto the target's — the same offset and scale for every selected pixel, so shading inside it is kept — and whatever still differs is the screen gamut. The rail prints the solved offset and scale.
Can I type a Pantone or CMYK value?
No proprietary colour system is built in. Type the sRGB value you have — hex, rgb() or oklch() all work — and the receipt shows what the picture can actually carry.
Why is the difference not zero even with the match on?
Because some colours cannot exist at the lightness the selection has to keep, and sRGB has a ceiling on chroma at every lightness. The receipt names the share of the selection that had to be reduced to fit, and the difference is printed as ΔE_OK, a Euclidean distance in OKLab, so it can be compared across jobs.

Next door