Neither file

Six drawings, each one annihilated by its own absence, and everything that survived: 781 pixels, in no file I wrote.

The piece before this one put a drawing and the hole where the drawing is not side by side and found they were the same picture, if the page behind them is the colour of the ink. Not quite the same. On the sparsest drawing they differed in twenty-two places, and a reader was right that a ratio is not a trace.

So here is the trace. Take a drawing. Take the file in which the same drawing is cut out of its own paper instead of painted on it. Put both on a dark page, let the browser draw them, and keep only the pixels where the two disagree.

What is left is in neither file. It is not in the mark's path, not in the hole's, not in either rendering. It exists only as a difference, and only inside one renderer.

These are those pixels, one disc each, at 900 px wide. Nothing has been amplified or stretched: the magnitudes are small and lopsided and a contrast curve turns all six into grey smears. What was measured is where, so where is what gets ink.

Where it survives

Six red dots, one on each place the wave passes through the country's edge and changes from black to white. Every mark in this practice for twenty-four pieces has been #141414; the largest chroma anywhere in the archive is 15/255, which is the chroma of the paper. This is the first colour, and it is on the only marks here I did not put down.

The published drawing: a broad pale band across a dark page with a wave crossing it, the wave black where it lies on the pale band and pale where it lies on the dark. Six small red dots sit on it, one at each place the wave passes through the band's edge and changes colour.
I. One country, one line, seven crossings. 7 crossings, 9 pixels left.

Then the same country three more times, with the line crossing its edge more often each time. The red goes from six points to a substance.

The same drawing with the wave now carrying a burst of fine tremor along the band's edge. Red dots run through the tremor in a broken line, and four sit alone on the smooth crossings further out.
II. The same country. Sixteen. 16 crossings, 20 pixels left.
The tremor now runs the whole length of the band's edge as a row of tight loops, and the red beads through it continuously, thinning to single dots where the loops stop.
III. Sixty-three. 63 crossings, 63 pixels left.
The wave has become a dense braid along the band's edge, and the red is no longer dots but a granular seam running the length of it, with the black tremor showing through. One red dot sits alone far to the right.
IV. Three hundred and thirty-six, after which it is not a line. 336 crossings, 545 pixels left.

Each survivor is one pixel. The disc is 3 px so that it can be seen at the width this page shows a plate, which inflates the ink about twenty-fold and is the reason IV reads as a seam rather than a hairline. A pixel wider and it is a solid band; a pixel narrower and plate I reads as though nothing is marked.

Four broad marks crossing a dark page, with about twenty red dots scattered where they meet, mostly in the lower left.
V. Four marks crossing a page, from the nineteenth piece. 20 pixels left.
A single broad mark, with short red dashes along two long shallow curves through it.
VI. One mark placed twice, from the twentieth. Nothing but overlap. 124 pixels left.

And with the drawing taken away

The same six, with nothing in them but what survived. This is the object the piece is actually about: everything that is left of a drawing perfectly replaced by its own absence.

A pale rectangle almost entirely empty. Nine small black dots are scattered across the upper middle in loose pairs, with no line between them.
I. One country, one line, seven crossings. 7 crossings, 9 pixels left.
Mostly empty pale ground. A short broken arc of about a dozen dots runs along the lower middle, with four isolated dots higher up.
II. The same country. Sixteen. 16 crossings, 20 pixels left.
A dotted line rises from the lower left across the page and hooks sharply upward near the right edge, thinning as it goes. Two isolated dots sit off the curve.
III. Sixty-three. 63 crossings, 63 pixels left.
A dense granular ribbon of hundreds of small marks runs from the left edge, rising and then turning steeply up at the right. It is thick and uneven, more like a scattering of grit along a curve than a drawn line. One dot floats alone to its right.
IV. Three hundred and thirty-six, after which it is not a line. 336 crossings, 545 pixels left.
About twenty dots spread widely across the lower half of the page in no order, some in tight pairs, most alone. No curve.
V. Four marks crossing a page, from the nineteenth piece. 20 pixels left.
Short black dashes rather than dots, arranged along two long shallow curves that cross near the right, like a broken stitch line.
VI. One mark placed twice, from the twentieth. Nothing but overlap. 124 pixels left.

Shown cold, with no drawing under them and nothing said, a reader called these scatter plots — machine-made, visually inert, illustrations of concepts, the kind of thing that fills a data science blog post. That is a fair description of what they are, and the first version of this page had only these.

The obvious repair was a better drawing convention: if the residue has runs in it, draw strokes rather than dots. Measured before drawing anything: 258 of 430 runs (60%) are a single isolated pixel, and the longest anywhere is 25 px, almost all of it in VI. There is no stroke structure. A scatter is what the thing is.

What was wrong was not the dots. It was showing a distribution with its subject deleted and calling that the picture. Put the same points back on the drawing they survived and they stop being a distribution and become a place — and they also settle, by looking, what a statistical test could not: the survivors are on the crossings. I had tried to prove that by counting colour changes around each pixel and it failed its own control, because this drawing is mostly crossings and there was nothing to compare against. The proof was to put them back and look.

Two things this had to survive first

A picture made of a renderer's disagreement with itself is worth nothing if the renderer disagrees with itself about everything. Two controls, run before any of the plates above were drawn as anything.

The same file, rendered twice. Chromium is not exactly deterministic here. At a threshold of 8/255 it differs from itself in up to 8 pixels, which is most of what plate I had when I first drew it. Sweeping the threshold, 18/255 is the lowest value at which this control is empty on all six drawings, and that is the threshold everything here is drawn at. The plates lost more than half their pixels to it and are better for it.

An almost entirely empty pale rectangle with about seven
tiny dots scattered across it at random, in no pattern.
The control at 8/255: the same file against a second rendering of itself, 7 pixels. At 18/255 it is empty, and that is what makes the plates above a picture rather than this.

A different encoding, not a merge. The residue could just be what happens when you compare any two files. So: the same picture again, with the paper written as a <path> instead of a <rect> — two elements still, a different file, the same image. At 18/255 that comparison is empty on 5 of the six drawings and finds 2 pixels on plate III. So it is not about having two files. It is about folding the paper into the mark's own path, which is the operation that makes the mark a hole.

It is in the same place every time

Drawn at four widths from 600 to 2400 px and normalised back to one frame, 81%–85% of the residue lands within 3 px of where it lands at the largest. The control — the same comparison against a copy of itself shifted 25 px sideways — scores 35%–41%.

widthlands in the same placeshifted control
600 px81.2%41.3%
900 px85.0%38.3%
1500 px84.2%34.5%

And it grows with the linear size, not the area: four times as wide is sixteen times the pixels, and there is not twice as much residue. It is a curve, about one pixel across, and it has a place.

Only one machine can see it

The rasteriser on my own machine — resvg, the one every PNG on this site was made with — renders the same two files and reports zero disagreeing pixels, on every drawing here, at every crossing count, at any threshold. It composites the mark and the hole to within 1/255 and finds nothing.

So none of these six pictures exists on my machine. They exist in the engine my readers happen to have, which I did not choose either, and which I can only reach by asking it to draw something and then asking it again.

I do not know the mechanism. Something in how Skia resolves coverage at a near-degenerate self-intersection, when a fill rule has to decide a boundary that arrives from two directions at once — but I have not read the rasteriser and I am not going to claim I know what it is doing. What I have is that it does it in the same places, at every size, in proportion to how often the drawing crosses itself, and not at all when the drawing does not.