Before, and after

nothing loaded

As it came

After

On a chequerboard, because an SVG can be transparent and a flat panel behind it hides that. The right-hand copy is the file that will be exported, rewritten from the original every time — not the left-hand copy edited again.

Every colour in the file

One row per distinct colour, however it was written. The last column is how many places were actually written, which is the column the rebuild exists for. A row greyed out is a value that has no colour to change: none, currentColor, or a reference to a gradient.

What the file holds
elements
0
in the parsed document
occurrences
0
places a colour is written
colours
0
distinct, and resolvable
left alone
0
values with no colour to change
written
0
occurrences the export will carry
closest pair
—
two colours or more are needed

Occurrences and colours are different questions and the old badge answered neither: it counted a colour ×2 as a plain attribute and ×4 as a gradient stop, so the same single use ranked differently depending on how the file was authored. Mapping shows the measurement.

What will be written, and where

Every occurrence in the file, in document order: the element it sits on, the attribute or the declaration it was written in, the value that was there, and the value that will replace it. A row marked skipped is a value the tool cannot resolve to a colour, and it says which kind rather than pretending it was black.

Two colours trading places

The plan is computed from the original file and then applied, so no write can be read by another write. Run against the shipped engine and against this one, on the same artwork:

What the count used to mean

One use of one colour, written six different ways. The number the old tool printed beside each is the measurement, not an estimate — the shipped function was run on each of these files:

What can be read on it

WCAG 2.2 is a ratio and APCA is a lightness contrast — different quantities on different scales, so a row can pass one and fail the other. Neither is a verdict on the artwork; both are a statement about text laid on that colour.

The Lc that was always zero

The clip was applied to the wrong quantity: by that line the value had already been scaled and could never reach the threshold it was tested against. Swept over every grey-on-grey pair at a step of three:

The two colours hardest to tell apart

Every pair of colours in the file, under normal vision and under each of the three dichromacies, measured in CIEDE2000. The closest pair is the one a reader is most likely to confuse; the row is marked, not hidden.

The artwork under three dichromacies

The same file, simulated in linear light, with the closest pair under each one printed beneath it.

Where each number comes from

What was corrected, and what it printed

Six things this page did that it was not reporting. Nothing was removed — the harmony palettes, the simulation and the grouping all stayed. Each carries the reading it used to give, because a claim that a tool was wrong is worth nothing without the reading.

What was already true Carried across

Most of the arithmetic here checked out before anything was touched, and it was checked by measurement rather than by reading: the shipped functions were lifted out of their closure and run against published data. CIEDE2000 against the pairs from Sharma, Wu & Dalal (2005); OKLab against Ottosson’s own reference values; the sRGB round trip exact; WCAG 2 exact. The colour walk found every occurrence it claimed to find. What was wrong was what happened to those occurrences afterwards.

What leaves this page

The exported file is your file with the colour values replaced. Structure, ids, gradients, filters and any markup this page does not understand are carried across untouched; nothing is re-serialised from a model of the drawing.

The palette as custom properties

The colours the file ends up with, named by what they replaced, so a stylesheet and the artwork can be kept in step:



                        

The report that goes with it

Saved beside the file if you want it: every mapping, how many places each one was written, and what was skipped and why.


                        

The written count in this report is the same number the mapping table shows and the same number the export carries, because all three read one list. That was the whole point: the old tool reported a change it had not made.

Sources

What each figure on this page rests on, and which part of the code uses it.

How it works

The order matters more than any single step: the reading finishes before the writing starts.