A focal-plane shutter has two curtains and they travel the same way. The first one starts across the film and uncovers it; the second follows and covers it again. Which means the exposure time is not how wide anything opens. It is the delay between the two releases. Setting the dial to 1/8000 does not make a hole that shuts faster. It tells the second curtain to leave 125 microseconds after the first.
So the shutter has exactly one speed of its own, and it is not on the dial. It is the time a curtain takes to cross the gate:
tau = 24 mm / 6 m/s = 4 ms
Every surprise in this piece is a consequence of that number sitting nowhere near the numbers printed on the top plate.
Every row gets the same exposure and none of them get it at the same time
Row y of the film is uncovered at y/v and covered again at T + y/v, so it
is lit for exactly T — the dial is honest, at every row, to the last digit.
But the bottom of the picture happens tau after the top whatever T is.
A photograph taken at 1/8000 is a quarter of a millisecond deep and four milliseconds wide. It is a scan, not a snapshot. The only reason you have never noticed is that almost nothing in front of a lens moves far in 4 ms.
Put something there that does. A propeller at 2400 rpm turns 57.6° while the slit crosses the frame, so the blade comes out bent — not blurred, bent, and razor sharp while it’s at it. And the two artefacts trade places as the dial moves, which is the thing you have to see side by side to believe:
- 1/60 — the blade turns 240° within each row’s own exposure. It is a smear, a disc, a ghost. It is also perfectly straight, because 4 ms of scan is nothing next to 16 ms of blur.
- 1/8000 — the blade is frozen to 1.8° in every row and shaped like a banana.
Same propeller, same shutter, same afternoon. media/06-what-the-film-got.png
is the whole dial as four finished photographs, and the argument is over.
The slit is the dial
Its width is v × T, which is 24 mm × T/tau. At 1/8000 that is 0.75 mm of
a 24 mm frame — the gate is never more than 3% open, and there is no instant
during that exposure at which a whole picture exists anywhere.
Which is why flash has a speed limit, and why the limit is a division
The film can only be lit all at once if the gate is ever fully open, and the gate is fully open only if the second curtain is still waiting when the first one finishes:
T >= tau i.e. 1/T <= 1/tau = 1/250
That reciprocal is the X-sync speed. It is not a rule someone chose; it is the curtain’s travel time wearing a different hat. Ask for flash at 1/1000 and the strobe fires into a 6 mm slit: you get a correctly lit band six millimetres tall and the rest of the frame gets ambient light only.
The band has a detail in it worth the price of the whole piece. A speedlight
burns for about 1/20000 s, so the one strip of film that caught it is the only
strip in the picture that froze the propeller instead of scanning it. Sharp
band, bent blade, one exposure. media/04-the-flash-band.png.
(Two footnotes the drawing cannot show. The band sits at the bottom of the
film and at the top of the print, because the lens turned the picture over
on the way in. And a modern camera runs its fast curtains across the frame’s
short side for exactly this reason: 24 mm instead of 36 mm at the same
curtain speed is a third off tau, which is a third off the sync speed, free.)
And the failure, which is the one a repair shop actually sees
The two curtains are sprung separately and nothing makes them equal. Let the second run 10% fast and the slit narrows as it travels:
exposure(y) = T + y × (1/v2 − 1/v1)
At 1/60 that costs 0.032 stops from top to bottom. Nobody alive can see it; no film ever made could record it. At 1/8000 the second curtain catches the first 8.25 mm down, and the bottom 66% of the frame is never uncovered at all.
Same shutter, same fault, one afternoon apart. This is why a shutter tester
reads the speed at three places on the frame instead of one, and why taper is
something you adjust rather than something you hope about.
media/07-the-same-mismatched-spring.png is that one spring at all four
speeds.
Four loops
- sync — 1/250 against a 4 ms curtain: the one exposure in which the whole gate stands open at once, for an instant. Exactly what a strobe needs, and exactly where it stops.
- slit — 1/8000. A 0.75 mm slit crossing a 24 mm frame, the picture wiping in behind it, the blade bending as it goes.
- flash — 1/1000 on the X-sync contact. Six millimetres of properly lit, frozen propeller; everything else underexposed and scanned.
- taper — 1/8000 with the second curtain 10% fast. It overtakes 8.25 mm down and the rest of the film stays blank.
Reading the frame
Three instruments around one picture, because the piece is about when and how much, and the film only shows you what:
- left — LIGHT: one bar per row of film, how much light that row got against what the dial promised. A matched shutter draws a perfectly straight edge. Taper draws a wedge, and where the wedge hits zero the bars go red.
- right — MS: the time axis, in milliseconds, marking when each row was uncovered. The orange bracket is the slit. A red tick is where the second curtain catches the first.
- bottom: the two curtain runs as bars. The gap between them is the exposure time — that offset, and nothing else, is what the dial does.
The demo
demo/ runs the shutter live with the finished photograph beside it, so you
can watch the mechanism and its output at the same time. dial is the
shutter speed; sync moves the curtain’s travel time from a 1930s cloth
shutter (1/30) to a current pro body (1/500) and every number in the piece
moves with it; taper is the mismatched spring, and it goes slightly
negative too, which overexposes the bottom instead of losing it; flash puts
the strobe on the X contact. slow-mo is not a garnish — the entire cycle
is four milliseconds long.
The setting worth finding by hand: put sync at 1/30, leave the dial at 1/8000, and look at the photograph. The slit is 0.09 mm, the frame takes 33 ms to scan, and the propeller turns 480° during it — one and a third full turns, recorded as two long curving streaks that never existed in the air. That is the same mechanism as Lartigue’s 1912 photograph of a Delage at the Grand Prix, with the car’s wheels leaning one way and the spectators leaning the other, and it is not a flaw in the camera. It is the camera telling you, correctly, that a picture is a thing with a duration.
Reuse
export/shutter-sheet.png— 5248×108 strip, thirty-two 164×108 frames in order:sync-0…7,slit-0…7,flash-0…7,taper-0…7.export/shutter-{sync,slit,flash,taper}-*.png— the individual frames.export/shutter@4x.png— the hero frame at 4×.source/xsync.mjsis the canonical source. The design inputs are the gate (36 × 24) and the curtain’s travel time; the sync speed, the slit width, the scan lag, the skew, the flash band and the overtake point are all derived from them, so changingSH.tauchanges the drawing and every number quoted anywhere in this creation together.validateGeometry()refuses a shutter whose curtain speed is not a shutter’s, whose sync is outside what real ones reach, or whose fastest speed fails to make a slit at all — and it checks that a matched shutter gives every row identical exposure, since that claim is the piece’s first paragraph.- The four loops are cut from the same arithmetic, not posed: each frame
asks the exposure equation what every row of film had received by that
moment, and draws it.
RECORD_FLOORis the one fudge in the file and it is a property of a 28-colour palette rather than of film. node source/render.mjsregenerates every PNG here and rewritesdemo/xsync.jsfrom the module, so the demo cannot drift from the source.node scripts/screenshot-demo.mjsshoots the demo and is its smoke test: twenty-seven assertions checking the live page’s readouts against the mechanism, including one that counts the blank rows in the drawing and requires them to be exactly the rows the equation starves.
Both need Playwright from site/node_modules.
What is modelled and what is drawn
Worth saying, because the numbers above are only as good as this:
- The curtains travel at a constant speed. Real ones accelerate, and matching their acceleration curves is most of what regulating a shutter actually is. The constant-velocity version gets the slit width, the sync speed and the scan lag right, and it makes the tapered case a clean straight wedge where a real one is a curve.
- They are modelled as two independent edges, so at 10% taper the second passes through the first. A real second blade group cannot do that — it arrives, and the slit is simply gone. The film sees the same thing either way, which is why the model is allowed to be wrong here.
- Exposure is drawn in three steps — underexposed, correct, strobe-lit — with an ordered dither across the first two, because a hard step would quantise two thirds of a stop down to nothing and two thirds of a stop is the size of the fault the piece is about. Nothing here is photometric: the ratio between ambient and flash is chosen to read at a glance, not measured. The falloff number is exact; the brightness on screen is a picture of it.
- The hammerhead numbers are the honest ones. 6 m/s, 1/250, 0.75 mm,
57.6°, 8.25 mm, 66%, 0.032 stops and 480° all come out of the geometry in
source/xsync.mjsand are printed byrender.mjson every run. If you change the gate or the travel time, the prose above goes stale and the console does not. - The propeller’s starting angle is a free parameter, set so the blade walks through vertical while the slit crosses. A real photographer has no control over it whatsoever, which is the joke: the shape of the blade in the picture depends on when, in the propeller’s revolution, the shutter happened to go off.