June 19, 2026 | By Jaroslav Sklenář, Neon Bender


A man came to my shop in the spring and asked for a sign that was not a sign.

He did not want words. He did not want an arrow, or a martini glass, or his name in cursive, the tired violet a cheap tube goes. He wanted a band of light to run across the top of a page he had built, and he wanted that light to move the way smoke moves over a fire — slow, folded into itself, going nowhere in particular. And he wanted one more thing, which he said last and quietly, the way people say the thing they actually came for: when someone draws a finger across it, the light should remember. Not light up. Remember. Hold the shape of the passing for a moment, carry it along, and then let it go.

I have bent glass for thirty years. My father bent it before me, in a town in Bohemia where the river ran white with the grit from the glassworks and the old men coughed glass by forty. I told the man what my father would have told him: light does not move. You pour the gas into the tube, you put the current through it, and it sits exactly where the glass tells it to sit and it hums. That is the whole art — deciding, once, where the light will live, and then living with it.

He said: make it forget that.

And there was a catch he had not mentioned and I had not guessed: the sign was not to be glass. It was to live at the top of a web page, which means it is not light in a tube at all. It is a small program — a fragment shader, the apprentices call it — that paints the same strip of the screen from nothing, by answering one question for every pixel, sixty times a second: what color are you, right now? Bending that light is the same art as bending glass, except the glass is arithmetic, and you never get to set the torch down.

So I tried.

The room behind the shop

I should say, before I go further, that I do not work alone anymore.

There is a room behind the shop now, and it is full of apprentices. They are not like the apprentices my father had. They never sleep, they never go home, and they never once tell me a thing is good because they are tired of me asking. I show them a piece and I say, this is wrong, tell me why, and they argue with each other — loudly, all at once — until the arguing wears down to the one thing none of them could see alone. They think in arithmetic; they hand me four lines of it and call it a recipe. My job is to read the recipe back into light, and to tell them, when the light comes out wrong, exactly how it is wrong.

It is a strange way to work. I am still the one holding the fire. But I have stopped pretending the fire is the hard part.

The marble

The first light I made him was a disgrace.

The drifting smoke itself was easy — a few layers of noise, the kind that looks like fog, stirred slowly so it folds over itself. The trouble was the remembering. To make the light lean under the finger, I did the obvious thing: I found the spot under the fingertip and I shoved the smoke there a little way in the direction the finger was going. Hardest at the center, softening to nothing in a ring around it. In the recipe it is one line. And the light gathered up under my fingertip into a small, bright, perfect ball. A bead. A marble.

I made it smaller. It was a smaller marble. I made it dimmer. It was a dim marble. I softened its edges until they were barely there, and what I had then was a soft marble, which is still, I promise you, a marble. A marble is the one thing weather never is. You have never once looked at the sky and seen a sphere of bright weather sitting in it, holding still, waiting to be noticed. Weather has no center. That is almost the definition of it.

I took the marble into the back room and asked the apprentices why my light kept turning into a bead, and they argued for a while, and then one of them said the thing I had been too close to see. It is a marble because you keep grinding it round. A push that is strongest at one point and fades out evenly around it — that is not a smudge. They have a cold word for it: a lens. A lens gathers light toward its center — strongest in the middle, the same falloff every time — and a center is a point with no width left. I had written, by hand, the exact recipe for a lens, and then spent a month annoyed that it focused.

You cannot make a lens stop being a lens by making it smaller. You have to break the circle.

Stop grinding circles

Here is what weather knows that a marble does not.

In real moving air, no two neighboring specks go the same way. One curls left, the one beside it curls down, the one beside that gets pulled into the wake of the first. There is no agreement. The whole mess holds together precisely because every point has its own mind about which way to turn.

So I stopped shoving all the light one way. The apprentices gave me a different kind of noise to push it with, and once they explained it I understood their pride. You start with a plain hill of noise — peaks and valleys of pure number. But you do not push the light downhill, the way water runs. You push it along the slope, turned a quarter-circle, so it runs around the hill and never up or down it. They wrote it down for me like this, their notes still in the margins, and it is shorter than this paragraph:

// the curl of a hill of noise (psi): a flow that can only turn, never pile up
vec2 curlNoise(vec2 x) {
    float e = 0.045;
    float dx = psi(x + vec2(e, 0.0)) - psi(x - vec2(e, 0.0)); // uphill, left-right
    float dy = psi(x + vec2(0.0, e)) - psi(x - vec2(0.0, e)); // uphill, up-down
    return vec2(dy, -dx) / (2.0 * e);                          // that slope, turned sideways
}

The psi is the hill — itself a slow smoke of noise that drifts in time, so the flow is never quite the same two moments running. The last line is the whole trick: find which way the hill rises, then rotate that a quarter-turn, so the light runs across the slope instead of down it. A flow built this way has a name the apprentices use — divergence-free — meaning it can swirl and braid and tear all it likes, but it can never gather light into a pile or scoop a hollow. No pile means no bump. No bump means no lens. No lens means no marble. I spent an hour trying to make a bead on purpose with this noise and could not do it.

Then two smaller things. I stretched the disturbance along the line the finger traveled, so it is long like a brushstroke instead of round like a coin. And I roughed its edges with a little more of the same noise, so its outline never closes into a clean oval.

I dragged my finger across, and for the first time the light did not bunch into a bead. It smeared — a ragged ribbon, leaning the way I had moved, breaking into filaments at its edges, the way a column of smoke frays at the top where the air gets hold of it.

It was, finally, weather. Small weather, but weather.

The light that forgets

And then I lifted my finger, and it forgot me instantly.

This is the part that is hard to explain to someone who has not made one. The light I had built was honest — too honest. A fragment shader keeps nothing: it paints each pixel from scratch, sixty times a second, and remembers not one stroke it made. So the light moved while I touched it, and the instant I stopped, it snapped back to its idle drift as if I had never been there — no wake, no memory. Smoke does not do that. Put your hand through a column of smoke and pull it back: the smoke holds the gap for a breath, carries it upward, lets it spread and thin and only then forgets. The remembering is most of what makes smoke look alive.

My light had no remembering because it had nowhere to keep it. To make it remember, I had to give it a ledger — a small, dim back-room slate where the disturbance could be written down and then slowly, slowly wiped.

The slate is real, and it is small: a second little picture, two hundred and fifty-six specks wide and thirty-two tall, each speck holding just two numbers — which way the light there has been pushed, and how hard. The apprentices call it a framebuffer. Their trick is to keep two of them and bounce between: read off yesterday's slate, write onto today's, and tomorrow the one they wrote on becomes the old one they read from. They swap which is which; I just watch the light catch up a day late. Today's slate is yesterday's, dimmed a touch and nudged a hair downwind — the same hand, the same margins:

vec2 here = uv - vec2(driftPerFrame, 0.0); // look a hair upwind
vec2 w    = texture2D(slate, here).rg;     // what was written here a moment ago
w *= exp(-dt / TAU);                        // let it fade (TAU is about six seconds)
w += whatTheFingerJustDrew(uv);            // add this instant's stroke

The whole feel of the thing is hidden in that one TAU. Six seconds. Make it bigger and a stroke hangs in the air like a contrail; make it smaller and the light forgets you before you have lifted your hand.

The apprentices gave me exactly one warning about the slate, and it was a good one. When you nudge it downwind, nudge it by a fixed, gentle amount — the same small step every frame — and nothing else. There is a fancier way, where you let the remembered motion carry itself: every stroke drifting along the very flow it recorded. It looks magnificent for about two seconds. Then each stroke bleeds into its neighbors, and the bleeding feeds the bleeding, and the whole slate settles into one flat, even gray. A wake keeps its shape because the water it rides on does not churn it. So the slate only ever drifts, one steady direction, and never stirs itself. The dumber slate is the one that keeps the memory legible.

The expensive machine I did not use

I want to be honest about a temptation, because leaving it out would make me sound wiser than I am.

There is a famous, expensive machine for exactly this — a true simulation of moving fluid, the kind with a dead mathematician's name on it, Navier and Stokes, that does not fake the air but solves it, push and pressure both, the way a river solves an eddy. People have spent careers on it. I wanted to use it, because it is the kind of tool that makes you feel serious. The apprentices and I took it apart on the bench, and at its very heart — in the place where the simulation first learns that you have touched the water — we found the same move I had spent a month escaping. To start a puff of motion, it stamps a little bump of speed into the fluid: hardest at the center, fading out in a ring, all pointed one way.

A marble. The famous machine is built around one. And it is worse than mine ever was: hold your finger still over it, and it stamps the same bump into the same spot every frame, faster than the fluid can carry it off, so the bead does not merely appear — it brightens, the longer you hold still, into precisely the glowing marble I had been running from.

So I put the expensive machine back in its case. The light over that man's page is the turning noise and the drifting slate and nothing else: no simulation, no solver grinding in the back, no pressure to balance — and not one corner left for a marble to hide in.

What it is now

The sign sits across the top of his page now.

When no one touches it, it is only weather — a slow cyan-and-magenta drift, dim in the middle so the words in front of it can be read, brighter where the glass runs out at the edges. You could look at it for an hour and not know it was waiting for you.

Draw a finger across it and the light leans into your passing. It does not light up and it does not chase you. It bends, the way a current bends around a hand, holds the shape of where you went, carries that shape a little way down the glass, and then — over five seconds, six — lets it go, until the slate is wiped clean and the light forgets you completely and goes back to being weather.

My father would not have believed light could be taught to forget on a schedule. I am not sure I believe it. But I built the thing, and it does what the man asked, and most evenings I find a reason to drag my finger across it one more time before I lock up, just to watch it remember me, and then forget me, on the same schedule as everyone else.


Jaroslav Sklenář bends light in a shop that smells of hot glass and ozone, a trade he learned from his father in a river town that no longer makes windows. The sign is real. It runs across the top of devlin.vining.club in a few hundred lines of WebGL: a fragment shader for the smoke, a divergence-free curl-noise field for the turning, and a slowly-fading framebuffer — two hundred fifty-six by thirty-two, decaying over about six seconds — for the remembering. The expensive machine it is not built on is a real-time fluid simulation. Move your cursor across the top of the page and watch it hold the shape of your passing.