Everything else on this site about bubbles assumes the light is on. Steady light, moving bubble, continuous streak.

Turn the light into a fast blink instead and something better happens. The bubble is still travelling, so each flash lands at a slightly different place along the path, and the smooth streak becomes a row of discrete marks. Time turns into space. Whatever rhythm the light was blinking in gets written along the trail.

Because the trail also has width and twist, the marks stack into weave, herringbone, lace, basketry, circuit traces, and moiré. The photograph above is a few bubbles crossing a frame while a light flickered. That is the entire trick.

Why these are the better photographs

They solve the problem the smooth trails have.

A smooth iridescent ribbon on black could be a gradient anyone could draw. A field of interlocking herringbone that follows the twist of a soap film through space could not. It has too much structure to be a happy accident and too much conformity to a curving surface to be drawn by hand, so a viewer’s first reaction is finally the right one, which is to ask how it was made.

They also break the sameness. Thin film interference hands you the same magenta and cyan and gold in every frame, so the smooth set is locked to one palette telling one story. Blink rate, duty cycle, and color per flash open up a set of new dials, and a handful of strobed frames hold more variety than a hundred smooth ones.


The quiet one. Two beaded threads and a lot of nothing, which is the version of this I would put in a room.

The light bar

The smooth version of this needs one light. The controlled version needs a light whose individual elements can be switched fast and independently, so I built one.

It is a row of about thirty ordinary 5mm through hole LEDs in a 3D printed bar, driven by four 74HC595 shift registers. Shift registers are the cheap trick here: they take a serial stream on a few pins and give you thirty two individually addressable outputs, so a microcontroller with almost no free pins can still drive the whole row and clock out a new pattern as fast as you like.


Thirty two orange wires, which is what thirty two individually controlled outputs looks like before it is tidy.

Where the patterns came from

Not from improvisation. I designed the blink sequences in a spreadsheet, laying out which LEDs are on in each time step as a grid, and exported the grid as a C++ array the firmware clocks out to the shift registers. The picture on the screen is literally the picture in the trail, sheared by however fast the bubble happened to be moving.


Designing a Greek key maze as a grid, which the bar then plays out one column at a time.

The generative source was Stephen Wolfram’s cellular automata. Rule 30 and its relatives take a row of cells and a trivial rule about neighbors and produce endless non repeating structured pattern, which is exactly what you want out of a one dimensional light source that gets smeared across a frame. A one dimensional automaton being drawn one step at a time is the same shape as a row of LEDs blinking while a bubble drifts past.

The catch, and the idea I never got to

There is a real problem with these. They look computer generated. Barcodes, QR codes, glitch art, datamosh, circuit traces: the whole visual family reads as synthetic. So the capture is still invisible, and now the texture is actively arguing that no camera was involved.

Which is also the opening, because the aesthetic is begging to be real data.

Drive the blink from an actual signal. A song’s waveform, a heartbeat, a sentence in binary, a date. Then the barcode is a barcode, the pattern means something, and the photograph is titled after what is written in it rather than being an abstract with a number for a name. That turns the liability into the point: it looks like data because it is data, encoded in light, at a real place and time, onto a real soap film. It is also squarely an embedded timing problem, which is the part of this I am best at.

The version I would most like to make is a single exposure holding both. Strobed texture for structure, a continuous pass for the trail, and a flash freezing an intact bubble at the end of it. Something that looks impossible to have photographed while containing undeniable proof that it was.

The bar got built and it works. It never made it out of the prototype stage and into a real shoot, which is the single biggest loose end in the whole project.