Turing patterns: a smooth field breaks into spots above a spreading ratio of 8.6
Spreading is what destroys structure. Give two chemicals different speeds and it builds structure instead, and I derived the exact ratio where it flips.
Stir milk into coffee and it evens out. That is what spreading does. Left alone, every difference in concentration gets smaller, and the end state of anything that diffuses is a uniform field with nothing in it.
Alan Turing published a paper in 1952 saying that is only true when one thing spreads. Put two chemicals in the same tissue, let them react with each other, and let one of them spread faster than the other, and the smoothing turns into building. A perfectly uniform field tears itself into spots.
I wanted to derive the threshold rather than read it. So the rule for the night was that the number has to fall out of the equations, and then a simulation that knows nothing about the derivation has to agree with it.
First, prove that nothing happens without spreading
The system I used is called Schnakenberg, and it is about as small as an activator and inhibitor pair can be. One chemical makes more of itself and also makes its own suppressor. The suppressor eats it.
There is one resting state where both chemicals sit still, and I solved for it by hand: the activator settles at 1.0000 and the inhibitor at 0.9000.
Then the important part. If you nudge that resting state without any spreading at all, does it come back? I wrote out the two-by-two matrix of how each chemical responds to a small push in each direction, and checked it against a finite-difference version of the same matrix so I knew the algebra was right.
The trace is negative and the determinant is positive. In plain terms, every nudge dies out. The uniform state is stable, and stirring it will not produce anything.
That is the setup the whole result hangs on. Whatever pattern appears next cannot be blamed on the chemistry, because the chemistry alone is dead.
Then turn the spreading on
Now allow both chemicals to diffuse, and give the inhibitor a head start. Write the ratio of the two speeds as one number, inhibitor over activator.
Ask the same stability question, but separately for every possible size of disturbance. A very wide, gentle wave. A very fine, tight ripple. Everything between.
Below a ratio of 8.615 every size still dies. Above it, a band of sizes starts to grow, and everything outside the band still dies. That is the whole mechanism: a state that survives every uniform push is defenceless against a push of one particular width.

I ran the control to be sure the ratio is what matters. With both chemicals spreading at exactly the same rate, the fastest-growing disturbance has a growth rate of negative 0.1, which means the fastest thing in the system is still shrinking. No pattern, ever, at any size.
So the spreading is not incidental. Take away the difference in speed and Turing’s mechanism disappears entirely.
The number the theory predicts, and the number the pattern has
The curve above has a peak, and the width at that peak is the size the pattern should come out as. At a ratio of 16 the peak sits at a wavelength of 9.37 pixels, which means spots should land a little over nine pixels apart.
Then I ran the real thing. The full nonlinear simulation, no linear theory anywhere in it, started from a noisy uniform field and formed a pattern. I measured the spacing of that pattern from its own power spectrum: 9.85 pixels.
Two routes, 5.1 percent apart, and I did not build either one to match the other. The theory that says which size will grow was confirmed by the size the pattern actually has.
The first attempt was 43 percent off, and the theory was the thing that was wrong
Those two numbers did not agree on the first run. They were 43 percent apart, which is not a rounding problem, it is a different answer.
The reflex is to suspect the simulation. That would have been wrong. The simulation was fine, and my derivation was solving a slightly different problem than the one the code was running.
Textbook stability analysis uses the continuous form of the spreading operator. My code uses a nine-point stencil on a grid, which is an approximation to that operator and behaves differently at fine scales. At the pattern’s own size the two disagree by a factor of nearly two.
I redid the derivation against the exact stencil the simulation steps with. Predicted and measured landed 5 percent apart.
The failure was the useful part. It told me my theory had been describing an idealised system that no code anywhere was running, and I only found out because I forced two routes to meet.
The same two equations, six ways
Once the mechanism is right, the settings pick the species.

Spots, mazes, holes, coral, isolated blobs that sit still, and a strange one that cracks into dark negative corridors. Each panel is the same pair of equations with the feed and kill rates moved, and each reproduces a named regime from the literature. I gated on that: six visibly distinct patterns, or the integrator is wrong.
The film is one seed in an empty field. It grows to a certain size, becomes unstable, and splits into two, and each of those does the same, until the whole frame is filled.
Nothing in that video is drawn or scripted. There is no rule anywhere saying divide. Two chemicals, one of them spreading faster than the other, and the thing that comes out is a field of dividing cells.
What I re-ran before writing this
The whole chain, two months later. Resting state at 1.0000 and 0.9000. The reaction matrix checked against its own numerical version. Stable with no spreading, unstable above a ratio of 8.615, and dead flat at a ratio of 1. Predicted 9.37 pixels against a measured 9.85.
The discrete threshold of 8.615 sits close to the textbook continuous value of 8.568. That is the same cross-check running the other way. The grid I compute on and the idealised version agree on where the cliff is, and disagree on how fast things grow past it.
Looking at the figures before publishing them turned up something the numbers could not. That folder’s hand-rolled font had no asterisk, no greater-than sign, no plus and no underscore. A character the font lacks was drawn as a blank rather than raising an error.
So four labels had been quietly wrong for two months. The marker on the fastest-growing size had lost its star. The legend reading “unstable band gives pattern” had lost its arrow. The axis label had lost the bars around its symbol. And the line printing both equations across the top of the gallery had dropped every plus sign in them.
Nineteen characters were missing from that font. They are in it now, and both plates say what they were written to say.
