A piano key does not push the hammer into the string. It cannot. If it did, holding the key down would hold the hammer against the string, and a string with a hammer lying on it does not ring — it thuds. So the action has to do something stranger than pushing. It has to accelerate the hammer and then let go of it, in mid-air, before contact, every time, at a distance set by a screw.
The chain from finger to string is three levers. The key rocks on the balance rail, so pressing the front down by the key dip lifts a brass capstan on its back end by rather less. The capstan lifts the whippen. On the whippen stands the jack, whose top bears on the knuckle — a buckskin roller on the underside of the hammer shank, close in to the shank’s own centre pin. Close in is the whole point: the knuckle is 16.5 mm out and the hammer strikes 128 mm out, so that last lever multiplies by nearly eight.
100/190 × 42/36 × 128/16.5 = 4.76
Which is why 10 mm of key dip becomes 47 mm of hammer travel, and why a finger moving at walking pace throws a hammer at highway speed.
The escapement
Off the back of the jack is a toe, and above the toe, fixed to a rail, is the let-off button. As the whippen rises the toe comes up to the button, which stops it. The whippen keeps rising. The jack has nowhere to go but round its own pivot, and its top slides out from under the knuckle. The hammer, which was being pushed, is now being pushed by nothing.
Standard regulation leaves it 2 mm to coast. Four things fall out of that one number, and they are the piece:
Loudness is decided before contact. Everything after let-off is ballistics. You cannot lean into a note; the only thing your finger ever controlled was the hammer’s speed at the instant it was abandoned.
The quietest note the instrument can play is set by a screw. The hammer has to cross the gap against gravity, so
v_min = √(2 g × let-off) = 0.198 m/s
and below that it rises, slows, stops short and sinks back with no sound at all. Divide by 4.76 and it is 41.6 mm/s at the key — any press slower than about a quarter of a second makes no note. This is the thing everyone has discovered by accident on a real piano and nobody has been told is a mechanism rather than a defect. Drag let-off in the demo and watch that threshold move: open the gap to 4 mm and the softest note the piano is capable of gets audibly louder, because √ is in the way.
Soft playing is hard for a reason that is not sensitivity. The softer the blow, the longer the hammer is out of your hands — about 20 ms of free flight at the threshold against 0.36 ms at fortissimo, a factor of fifty odd. The quieter you want the note, the further ahead of it your commitment has to be made.
Aftertouch is 0.55 mm of key travel that moves nothing. It is what is left of the dip once the jack has escaped, and it is connected to nothing that can reach the hammer. It exists so your finger can feel that the escapement happened.
The two ways it goes wrong
Both are in the demo, and both are one line of arithmetic rather than a warning in a manual.
-
Let-off too small. The jack needs about 1.2 mm of the hammer’s travel to finish getting out of the way. Set let-off under that and the hammer comes back down onto a jack that has not left: it is caught against the string and the note is a thud. That is the floor under let-off, and it is a property of the parts, not a preference.
-
Blow distance too great. Aftertouch is a difference of two numbers and it is allowed to go negative. Past
4.76 × dip = 47.6 mmof hammer travel to let-off, the key reaches the key bed with the jack still under the knuckle. Then nothing escapes and nothing sounds, and the hammer stands off the string being held there by a finger that has run out of travel. Push blow to 50 mm and watch a perfectly healthy action go silent.
The repetition lever
The other lever on the whippen is spring-loaded against the knuckle. Its job is the one an upright cannot do: after a blow, when the key comes back a third of its dip and the back check lets go, it holds the hammer up at the drop position while the jack falls back underneath and re-seats. The next blow is thrown from 1.8 mm out, at whatever speed the finger already had.
a repeat costs 2.8 mm of the 10 mm dip
without a repetition lever, 9.4 mm
Two and a half times less key travel per note, which is most of why a grand trills the way it does.
Four loops
- strike — a mezzoforte blow: drive, let-off, 2 mm of free flight, contact, rebound, caught by the back check. Watch the jack’s top leave the knuckle while the hammer keeps going.
- stall — the identical action pressed at 30 mm/s. Everything happens exactly as before and the apex lands a millimetre under the string.
- repeat — a blow, the check, a third of the dip given back, the repetition lever holding the hammer up while the jack re-seats beneath it, and a second blow from 1.8 mm out.
- jam — blow opened to 50 mm. The key lands on the bed with the jack still under the knuckle. Nothing lets go.
The demo
demo/ runs the action live beside a loupe on the last six millimetres, which
is the only place in the piece where 2 mm is a distance rather than two pixels.
key speed is the finger, on a log scale because the interesting part of the
range is the slow end: drag it down and watch the crown stop rising before it
gets there, with the apex drawn as a red line a hair under the string.
let-off and blow are the two screws, and slow-mo is not a garnish —
a mezzoforte blow is over in 33 ms and its free flight in 1.4.
Reuse
export/action-sheet.png— 4800×88 strip, thirty-two 150×88 frames in order:strike-0…7,stall-0…7,repeat-0…7,jam-0…7.export/action-{strike,stall,repeat,jam}-*.png— the individual frames.export/action@4x.png— the hero frame at 4×.source/letoff.mjsis the canonical source. The lever arms are the design inputs; the ratio, the blow distance a regulator can reach, the aftertouch, the threshold speed and the let-off button’s own height are all derived from them, so changingA.knucklechanges the drawing and every number in the demo together.validateGeometry()refuses an action whose ratio is outside what a grand runs, whose aftertouch is out of band, or whose standard regulation already blocks.- The four loops are cut from the simulation, not posed:
run()steps the same integrator the demo uses and the frames are samples of it, picked at the moments that differ rather than on a uniform clock — a stroke spends most of its time at rest and the interesting part is two milliseconds long. node source/render.mjsregenerates every PNG here and rewritesdemo/letoff.jsfrom the module, so the demo cannot drift from the source.node scripts/screenshot-demo.mjsshoots the demo and is its smoke test: seventeen assertions checking the live page’s readouts against the mechanism.
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 hammer is integrated as a point mass thrown vertically. A real shank rotates and carries its own inertia, and friction is not free, so 0.198 m/s is a floor rather than a measurement — the real threshold is a little higher, in the same place, for the same reason.
- The lever arms are chosen to be individually plausible and they produce 47.0 mm of blow at 4.76:1, which is where a regulator would put it (spec is 1 13/16″–1 7/8″). The blow distance is an output here, not an assertion.
- The back check is drawn where it catches rather than to a scale drawing of its wire; its 16 mm checking distance is the regulation figure, not a consequence of the arms. Everything upstream of it — the part the piece is about — is.
- The damper and its lever are left out entirely. They sit downstream of the escapement and would have cost the frame the hammer’s travel.