workshop private

← all creations

Detached

sprites · created 2026-10-05

238×120 pixel Swiss lever escapement in plan with four loops. The balance is connected to the rest of the watch for 7.5 ms of every 125 ms beat — 6% of the time — and the other 94% is what the whole mechanism is for.

pixel-artcanvassimulation

The escapement of a mechanical watch, drawn in plan the way a horology text draws it: a club-tooth escape wheel on the left, the pallet fork in the middle, and the balance’s double roller on the right with the balance hoop swinging behind it.

Its formal name is the detached lever escapement, and that is the whole claim.

The number

A balance wheel keeps time the way any pendulum does — by being left alone. Anything still touching it is stealing energy from it and changing its rate. So the escapement’s job is not to drive the balance. It is to touch the balance as briefly and as symmetrically as it can get away with, and then get out of the way.

It gets away with very little. The impulse jewel — one pin standing up from the roller table — is inside the fork’s slot only while the balance is within half the lift angle of its rest position. A wristwatch lift angle is 52°, and the balance’s round trip is twice its amplitude, about 550°. So the balance is connected to the rest of the watch for 9.5% of the arc it travels.

And for far less of the time, because the lift sits exactly where the balance is moving fastest. A harmonic oscillator spends its time at the ends of the swing, not the middle, so the fraction of a beat inside ±lift/2 is

(2/π) · asin( lift / 2A )

which at 52° and 275° is 6.0%. At 28,800 beats an hour a beat is 125 ms, so the balance is attached to the gear train for 7.5 ms and is a free oscillator for the other 117.5.

The sprite’s loops cannot show you that, and the demo’s second panel exists because of it. beat is sampled on balance angle, not on time — sampled on time, nine of its ten frames would be a fork sitting dead still against a pin, because that is what the escapement does. The demo draws one beat on the real clock instead: a 125 ms bar with a 7.5 ms sliver in it. That sliver is the entire acquaintance between a watch’s timekeeper and its power source.

What it costs to be detached

For all of the other 94% a wound mainspring is pushing on a tooth that must not move. What holds it is draw: the pallet’s locking face is cut at an angle — 12° here — to the arc it would sweep about the pallet pivot, so the tooth’s push has a component that pulls the fork harder onto its banking pin.

The bill is the piece’s second half, and the first line of it is the one nobody expects. Zero draw does not make unlocking free. Friction does not go away when the draw does:

what holds the lock   ∝  sin δ
what unlocking costs  ∝  sin δ + μ cos δ

At δ = 12° those are 0.208 and 0.355. At δ = 0 they are 0.000 and 0.150 — you have given up the entire holding force and kept most of a third of the bill. The demo’s third panel is those two curves against every angle a watchmaker could cut, and the whole argument is at the left-hand edge where one of them is on the floor and the other is not. The nodraw loop is what that looks like in the metal: nothing holds the fork against its banking, it drifts in until the dart finds the safety roller, and the safety roller was never meant to carry a mainspring.

Draw is then paid for twice more. The balance has to shove the fork off the lock itself, at the centre of the arc where it is doing its most useful timing. And sliding a tooth back along an inclined face runs the escape wheel — and the whole train behind it — backwards by 0.10° before it can run forwards. That recoil is a tenth of a pixel on this drawing and it is in the readout anyway, because it is real and it is the direct price of the angle.

The safety, and the one inequality

The fork must not flip during the 94%, so there is a second line of defence: a dart on the fork rides a smaller roller carrying one notch — the passing hollow — cut exactly where the impulse jewel is. The fork is physically unable to leave its banking except in the window where it is supposed to.

The requirement is a single inequality: the dart has to touch the roller before the pallet has lost its lock. Here that is 0.44° of fork against 0.87°, a margin of 0.43°, and validateGeometry() fails the build if a layout constant ever inverts it. It is checked rather than asserted because it is the thing that is actually true or false about an escapement, and it is easy to break by moving something that looks unrelated.

Where it ends

The upper bound on all of this is the balance’s own amplitude. Swing far enough and the impulse jewel comes all the way round and strikes the outside of a fork horn, throwing the fork off its banking with no tooth released at all. That is overbanking, or knocking the banking, and the knock loop is it.

The angle is not a constant and is not quoted here. knockAmplitude() walks the jewel round until it touches the horn’s flank and reports where — which is also exactly what the watch does — and on this geometry it lands at 332°. A real movement overbanks somewhere around 330°, which is a better agreement than this drawing has any right to, and is the main reason to believe the rest of it.

The relations are the machine’s; two of the constants are this drawing’s

The escape wheel has fifteen club teeth and the pallets straddle two and a half tooth spaces. The half is the point: an integer span would land every escape on the same half of the wheel, and the extra half space is what makes alternate escapes fall half a space apart. Hence 2n beats per revolution, and a wheel that advances 360/2n = 12° per beat. validateGeometry() refuses a span that is not a half-integer.

Of that 12°, 1.2° is drop — thrown away on purpose between a tooth leaving one pallet and the next landing on the other, because a drop of zero is two pieces of steel arriving in the same place. 10% of every beat’s rotation, spent on not jamming.

The honest part: the impulse roller here is 0.95 mm where a real one is nearer 0.45, roughly twice oversize, because at a true ratio the jewel would be two pixels and the slot would be four. The fork’s travel is widened to match, so the lift angle still comes out at the canonical 52° — the layout is a legal escapement throughout, just one with an unusually large roller and a correspondingly broad fork: 19.7° of travel against a real ~10.5°. Everything else — the pallet span, the pivot distance, the drop, the draw, the lock, the guard clearance, the overbanking angle — is derived, not drawn by eye. FORK.pivot is not a number in the file; it is ESC.r / cos(span/2), because that is the only place a symmetric lever’s pivot can go.

The drawing is a plan, not a section, and it cheats one thing to stay readable: the balance runs under the escapement here where in the movement it is the topmost part, on its own cock. A 7 mm hoop drawn across the half-millimetre this piece is about wins every time, and it should not.

The loops

Reuse

Source

No .aseprite — the canonical source is source/detached.mjs, which is both the kinematics and the pixel drawing. Nothing is keyframed: every frame is renderFrame({ thetaB, beat, dir, lift, draw, amp }) evaluated at a balance angle, and the fork’s position is forkAngle(thetaB), which is the jewel’s own bearing from the pallet pivot clamped to the bankings — so the fork is on its banking for 94% of the arc because the geometry puts it there, not because the drawing says so. Regenerate everything with:

node source/render.mjs             # export/, media/ loops, thumb, demo copy
node scripts/screenshot-demo.mjs   # media/ demo shots

(needs site/node_modules installed — the scripts resolve Chromium through site/scripts/lib/chromium.mjs.)