What it takes to deliver it

A second conversion is not a repeat

A colour converted to a device and back is described as lossy where the device cannot hold it and exact where it can, which suggests that a colour surviving one round trip survives any number. One of the four intents is idempotent to the floating-point floor. The other two are not — a perceptual conversion moves a ramp 3.70 colour differences on its first pass and another 2.73 on its second, and after three passes it is still moving by 2.42.

Assumes An intent is not a function of the colour, No mapping preserves everything and The budget adds two units.

A file rarely passes through one conversion. It is authored in one space, edited in another, soft-proofed to a third, delivered to a fourth, and archived in a fifth, and at each step somebody’s software applies an intent to whatever arrived. The mental model that makes this tolerable is that a conversion settles: what the destination can hold survives, what it cannot is moved once, and a colour that made it through is a colour that will keep making it through.

Out to the device and back, once and again. Each intent applied 3 times in succession to the same ramp. The upper bar is what the first pass moves and the lower is what the second moves. relative-colorimetric is idempotent — the second pass moves nothing, to the floating-point floor — and the other two are not: perceptual moves another 2.73 and saturation moves another 3.09. A file converted twice is not a file converted once.
Fig. 1 Each intent applied three times in succession to the same ramp. The upper bar is what the first pass moves and the lower is what the second moves, and only one of them is nothing.

The claim

Only one of the three intents tested settles after a single conversion, and the two that do not are still moving after three.

  • A relative-colorimetric conversion is idempotent: it moves the ramp 1.13 colour differences on the first pass and 0.0 on the second, exactly.
  • A perceptual conversion moves 3.70 on the first pass and 2.73 on the second, and 2.42 on the third.
  • A saturation conversion moves 6.51 then 3.09, and is nearly settled by the third at 0.27.
  • So a file converted twice is not a file converted once, and nothing about a converted file says how many times it has been through.

Why one of them settles

Idempotence is a property with a reason, and the reason says which operations have it.

A relative-colorimetric mapping is defined by a condition on its output: if the colour is inside the destination, leave it; if not, move it to the nearest point on the boundary at the same lightness and hue. Its output is always inside the destination, so applying it again takes the first branch, which is the identity.

That is idempotence by construction rather than by arithmetic, and it holds to the floating-point floor — not to a tolerance, and not approximately. The measurement finds exactly 0.0 on every colour of the ramp, which is what a construction gives and a fit does not.

The same colour, delivered from two documents. A ramp of chroma, mapped into a press's gamut under the relative-colorimetric intent from two source solids: the whole of sRGB, and the same solid with its chroma limited, which is what a document containing only muted colours amounts to. Under a colorimetric intent the two answers are identical to the floating-point floor. Under the perceptual one they are 0.00 apart at the mean and 0.00 at the worst, on colours the destination could hold either way.
Fig. 2 The same intent’s other exactness, from the previous rung: it delivers the same colour identically from two source solids. The two properties have one cause — it reads the colour and the destination and nothing else.

Why the others do not

The two document-dependent intents fail idempotence for the reason the previous rung measured, and the failure is a consequence rather than a separate defect.

A perceptual mapping compresses the source solid into the destination. Applied a second time, its source solid is the first conversion’s output, which is a solid the size of the destination — so it compresses a solid that is already the right size, and compresses it again.

The second pass has nothing to do and does it anyway. Its lightness rescaling maps the destination’s own range into the destination’s range, which is nearly the identity; its chroma compression takes a colour already inside and squeezes it further — moving colours that needed no help is what the intent is for — because the ratio it uses is now the destination’s maximum over the destination’s maximum and its held region is unchanged. The result is a further inward movement of 2.73 units.

The saturation intent fails the same way with a different profile. It reads chroma as a fraction of the source’s maximum, and on the second pass the source’s maximum is the destination’s, so the fraction is preserved and the colour barely moves — 3.09 on the second pass and 0.27 by the third, which is close to settled.

Out to the device and back, once and again. Each intent applied 5 times in succession to the same ramp. The upper bar is what the first pass moves and the lower is what the second moves. relative-colorimetric is idempotent — the second pass moves nothing, to the floating-point floor — and the other two are not: perceptual moves another 2.73 and saturation moves another 3.09. A file converted twice is not a file converted once.
Fig. 3 The same three intents over five passes rather than three. The colorimetric intent’s second bar is zero at every count, and the other two shrink without reaching it.

The rate, over five passes

Three passes says the operation does not settle; five says how it approaches whatever it is approaching, and the two intents behave differently.

The perceptual intent moves 3.70, 2.73 and then 1.89 by the fifth pass — a slow decay with no sign of reaching zero within the range measured. Its fixed point, if it has one, is the neutral axis, and the approach to it is geometric with a ratio near three quarters per pass.

The saturation intent moves 6.51, 3.09 and then 0.26 — a fast decay to a genuine fixed point. Every colour ends at its own fraction of the destination’s maximum, which is where the first pass was already trying to put it, and the residual after the second pass is the difference between the source’s maximum and the destination’s having been resolved.

So the two failures of idempotence are different failures. One is a slow drift with no obvious limit; the other is an overshoot that corrects itself in two passes. A workflow with two conversions is much worse off under the first and nearly unharmed under the second, which is the opposite of what their first-pass sizes suggest.

That reversal is the useful part. The intent that moves most on one pass is the safer one to apply twice, and nothing in either intent’s description would have said so.

What idempotence is worth as a property

The colorimetric intent’s exactness is worth a paragraph on its own, because it is a rare kind of guarantee in this collection.

Most of what this round has measured is a number: how far apart, how much larger, what fraction. Idempotence is not a number — it is a statement that a composition equals a single application, exactly, for every input, and it either holds or it does not.

A property like that is worth more than a small number, because it composes. A workflow that uses only the colorimetric intent can be reasoned about: any number of conversions into the same destination is one conversion, and a chain’s total is a chain’s first step. A workflow that uses a perceptual intent anywhere has to be traced.

This collection has now collected four such exact statements in one round: a monotone curve commutes with a clamp, a constant interpolates to itself, a clip below the ceiling is the identity, and a colorimetric mapping is idempotent. All four are about operations doing nothing, and all four are the reason the neighbouring measurements can be attributed.

What drifts, and where to

Watching a colour rather than a ramp says what the drift is towards.

Under the perceptual intent every pass pulls chroma inward — the compression is monotone and never pushes a colour outward, so successive conversions walk a colour down the chroma axis at a decreasing rate. After enough passes the ramp collapses towards the neutral axis, which is the intent’s own mechanism applied to itself.

A picture converted repeatedly under a perceptual intent gets progressively duller, and the effect is not a rounding — it is distinguishable colours being destroyed a second time: it is 2.73 colour differences on the second pass, which is above most delivery tolerances on its own.

Under the saturation intent the drift is towards the destination’s boundary rather than away from it, because that intent’s job is to put chroma at the maximum. Its second pass moves 3.09 and its third 0.27, so it converges to a fixed point — every colour sitting at its own fraction of the destination’s maximum, which is where the first pass was trying to put it.

Four stages, two rules for adding them, and what the chain does. The four stages between a colour and a reader, each measured in the same unit over the same twelve colours, with the two combination rules and the chain's own end-to-end error beside them. The sum over-predicts by a factor of 2.18. The quadrature is within 24 per cent here, and changing the rendering intent moves it by a quarter — so it is a coincidence at these settings rather than a rule.
Fig. 4 The four stages of a single chain under a perceptual intent, from the first rung of this ladder. The mapping stage there is the first pass; a second workflow adds most of it again.

The fixed points, named

An operation that is not idempotent still has fixed points — colours it leaves alone — and knowing where they are says which parts of a picture drift and which do not.

Under the perceptual intent the fixed points are the colours inside the held region. The compression leaves the inner seventy per cent of the destination’s chroma untouched, so a muted colour is a fixed point from the first pass onwards and never moves again. Everything outside that region moves on every pass.

So a picture converted repeatedly does not fade uniformly. Its muted areas are stable and its saturated areas walk inward, which means the relations the intent exists to preserve are exactly what successive passes destroy. The second conversion undoes the first one’s purpose, which is a sharper statement than saying it adds error.

Under the saturation intent the fixed points are everywhere after two passes, because the intent’s output already satisfies its own condition once the source and destination maxima agree. Its non-idempotence is a one-pass transient rather than a drift.

And under the colorimetric intent every colour is a fixed point from the first pass, which is what idempotence means and is the whole of its guarantee.

Naming the fixed points is the useful form because it tells a reader what to look at. A file that has been through several perceptual conversions shows it in its saturated regions and nowhere else, and comparing a saturated patch against a muted one in the same file is a test anybody can run without the original.

What this does to a workflow

Three consequences, and the third is the one worth acting on.

A round trip is not a check. Converting out and back and comparing against the original is the standard way of asking whether a conversion is lossless, and it measures the composition of two mappings rather than the first one. Under a colorimetric intent the answer is meaningful; under the other two it is not the question anybody meant.

A chain of workflows accumulates. Every stage that applies a perceptual intent adds most of a first pass’s worth of movement, and the total after four or five stages is well beyond any tolerance a specification would name.

And nothing in a file records the count. A converted file carries a profile that says what space it is in; it does not say how it got there or how many mappings it has been through. Two files in the same space, one converted once and one four times, are indistinguishable and are different colours.

The budget's three numbers, and the units they are in. The published three-stage budget's own figures, with each one's unit named, beside the same stage re-measured in a single unit over the same colours. Two of the three are colour differences between stimuli and the third is a distance between appearances, and the budget adds them. The fourth row is a stage the budget has no entry for: the colours the separation cannot reach even after the mapping has moved them, which comes to 1.45.
Fig. 5 The delivery budget’s stages. A repeat conversion is not a stage in it, and its contribution is larger than three of the four rows that are there.

The one intent to convert with

The practical rule follows and it is narrower than the usual advice.

The usual advice is to convert as few times as possible, which is right and is not always available: a workflow with a proof stage and a delivery stage has two conversions whether anybody likes it or not.

The available rule is to convert perceptually once and colorimetrically thereafter. The first conversion is the one that has to solve the hard problem — a wide source into a narrow destination, with distinctions to preserve — and every later one is between spaces of similar size where a colorimetric intent is exact and idempotent — which the delivery budget’s own stages assume without saying so.

That is what a well-set-up workflow does, and it is done for a different reason: perceptual rendering is used at the point where the gamut shrinks because that is where relations need preserving. The idempotence argument gives the same advice from a direction that also covers the case where nobody was thinking about relations.

Across the blend, and where it is worst. The same pair — a sky against foliage — blended at every fraction from a twentieth to nineteen twentieths, with the difference between the stored-value blend and the light's own. It peaks at 63 per cent rather than at the halfway point, at 18.1 colour differences, because the encoding's curvature is not symmetric about the middle of the range.
Fig. 6 A blend’s own error across its range, from two rungs back. A workflow that converts twice usually resizes twice as well, and the two accumulations are independent.

Putting this rung beside the blend one gives the shape of a real workflow’s total. A file that is converted, resized, converted again and resized again has accumulated four movements, two of them from operations nobody files under colour, and none of them recorded anywhere. The chain’s error is not the sum of its stages and it is not the sum of the stages anybody counted either.

What a file would need to carry

The field this rung asks for is smaller than the previous ones and it is a count.

How many mappings this file has been through, and under which intents. Three or four values, appended once per conversion, which is what a processing history is and which some formats already have a place for.

The reason it is not there is instructive. A colour profile describes a state — what space this data is in — and a conversion count describes a history, and formats that carry state are not usually asked to carry history. The two questions a workflow needs answered are what space is this in and how did it get here, and every colour-managed format answers the first.

A state is enough when every operation is idempotent and is not enough otherwise, which is a general fact about formats rather than about colour. The colorimetric intent’s idempotence is precisely what makes a state sufficient for the files that used it.

That is a satisfying place for this ladder to end. The one operation with an exact property is the one that makes the existing format adequate, and the operations without it are the ones that would need the format to change.

What was computed, and how

The ramp is fourteen colours at lightness 55 and hue 30, from neutral to the source gamut’s boundary, mapped into this collection’s four-colour press gamut and then re-mapped into the same gamut two or four more times.

Each pass uses the same intent and the same destination, and the source solid is the standard sRGB one on the first pass only — after that the input is whatever the previous pass produced, which is the honest model of a file passing through successive workflows. Modelling a second workflow that re-declared the original source would be modelling a workflow nobody has.

The same blend, taken on the stored values and on the light. Six pairs blended at 50 per cent, once by averaging the values as they are stored and once by averaging the light they stand for. Every resize, every antialiased edge and every transparency composite in an ordinary pipeline does the first. The two land 15.8 colour differences apart at the mean and 19.3 on a red against a green, and the stored-value blend is the darker on all six, by up to 23 units of lightness.
Fig. 7 The blends from two rungs back. Every conversion in a chain is accompanied by resizes and composites, and those accumulate too — in a different direction and by a larger amount.

The colorimetric result is the control and it is exact rather than small: 0.0 on the second pass, on every colour, which establishes that the machinery is measuring the intent’s own behaviour and not an accumulation of numerical error.

The distances are ΔE₀₀ between successive outputs, which is the right unit for how much did this pass move it and is not the right unit for how far is it now from the original — that quantity is the sum of the passes only if they all point the same way, which is not something to assume.

Where the model stops

One destination and one hue. A conversion between two spaces of similar size behaves differently from one into a much smaller space, and the perceptual intent’s second pass would move less.

The perceptual and saturation implementations are this collection’s own. The ICC specification does not prescribe either algorithm, so the exact drift rates belong to these implementations; the idempotence result for the colorimetric intent is structural and belongs to the definition.

And no real workflow converts into the same space twice. The interesting case is a chain of different destinations, where each pass has a genuinely different job and the accumulation is not a repeat — that measurement needs several device models and is not in this round.

The generalisation

The habit is about assuming an operation settles.

An operation described as cleaning up, normalising, fitting into, or correcting invites the assumption that a second application is a no-op, because the thing it was fixing has been fixed. That is true when the operation is defined by a condition on its output and false when it is defined by a relation between its input and its output.

The move is to apply it twice and subtract. It costs one extra call and it distinguishes the two kinds immediately.

The failure mode is a slow drift with no single step large enough to notice. A colour that moves two and a half units per conversion and passes through four workflows has moved ten, and no stage of that chain did anything a reviewer would have questioned.

Who found it, and when

That perceptual rendering is not idempotent is understood by colour engineers and is one of the reasons the advice to minimise conversions exists. It is not usually stated as idempotence and its rate is not usually quoted — in the way a dot gain is a feature rather than a defect until somebody measures it.

The colorimetric intent’s exact idempotence is immediate from its definition and is worth stating because the exactness is what makes the comparison a measurement rather than an impression.

Where the ladder goes next

Four rungs have followed a colour through the chain that delivers it and found the same shape at every stage: an operation whose behaviour depends on something the chain does not record — an arrangement, a variable, a solid, a count. What the round has not reached is the reader, who is the last stage of every chain and the only one with no profile at all.

What this makes readable

Essays that name this one as a prerequisite.

Named alongside this one

Essays reaching for the same objects. Nobody chose these; they are what the index of named objects makes visible.

What links here

Every essay whose body links to this one.

The objects this essay names

Each one links to every other essay that touches it.

ChromaColour managementConvergenceFixed pointGamut mappingThe ICC profileIdempotenceReproducibilitySpecificationWorkflow