Ground Truth · the artifact is the signal

The Blade the Camera Bent

Photograph a fast propeller with a phone and the blades come out curved, sheared, or cut clean in half. People call it a glitch, a camera bug, a broken picture. It is the opposite of broken. The camera recorded the literal truth — it just didn't record it all at once.

A rolling-shutter CMOS sensor reads its rows one after another, top to bottom, a few microseconds apart. By the time the bottom row is read, the blade has moved. So each row catches the blade at a slightly later instant, and a straight blade images as a spiral. The bend isn't noise — it's a clock. Its exact shape encodes how fast the rows were read and how fast the prop was turning. Read the bend backward and you recover the numbers. Below, the page demonstrates the fit with model-generated angles.

true blade · one instant
what the sensor reads · row by row
imaged blade (rendered from the readout) predicted θ(y)=θ₀+ω·τ·y readout line (current row)

Line time τ

30.86 µs/row

full read 33.33 ms

Per-row bend k = ω·τ

1.94 mrad/row

120.0° across the frame

RPM fitted from model samples

600

you set 600 · fit of model samples

Drag it up and watch the straight blade curl into a spiral. Faster spin, more bend — the bend is the speed.

How long the sensor takes to read all rows top-to-bottom. Slide it to 0 — a global shutter — and the blade snaps straight.

Each arm bends by the same per-row k — the spiral just repeats.

More rows over the same read time means a smaller τ per row.

The kinematics is one line. A straight radial blade at start angle θ₀, spinning at angular velocity ω = rpm·2π/60, imaged on sensor row y (rows counted from the top, each delayed by the line time τ), appears at angle

θ(y) = θ₀ + ω · (y · τ)

The slope of that imaged curve — angle per row — is the constant k = ω·τ. That single number is the clock. The right-hand canvas above renders the blade purely from this equation, row by row, as the red readout line sweeps down. The pink overlay is the prediction θ(y) drawn straight on top — they coincide because they're the same equation. Then the page fits 60 angles generated from the slider inputs by that model. Least squares recovers k, and division by the known τ gives the RPM. It lands back on the number you set: a check of the model's algebra, not a measurement of the canvas.

The check — the bend, read backward, in front of you

These figures update live with the sliders. The fitted RPM comes from the slope of model-generated angles. The samples use the slider inputs; the fit does not read the drawn image.

—

Slide the readout time to 0 and τ → 0, so k → 0 and the blade is straight: a global shutter has no clock to read. Run the kinematics headless: node research/the-blade-the-camera-bent/verify-the-blade-the-camera-bent.mjs — it recomputes the spiral, recovers k by an independent least-squares fit, and asserts every number on this page.

What's exactly true here, and what's idealised

Exactly true. The readout model is the documented one: a CMOS rolling shutter reads rows sequentially with a fixed per-line delay τ, so a feature present at angle θ₀ when row 0 is read is at θ₀ + ω·(y·τ) when row y is read. The slope of the imaged curve is therefore the constant ω·τ in radians per row, and the total skew across an N-row frame is ω·N·τ = ω·T_readout. The inversion is a clean linear fit — the curve is a line in (row, angle) space, so its slope recovers ω·τ exactly. This is pure kinematics; nothing is fudged.

When angles wrap. The fit uses unwrapped angles generated by the model, so it recovers the slope at any speed. A total bend past 180° does not by itself imply a crossing on screen or a need to unwrap measured angles. When reading a photograph, angle wrapping and which blade a point belongs to have to be checked from the samples. At 950 RPM and a 1/30 s readout, the total bend is 190°, yet each arm's raw angles can be fitted without unwrapping.

The model, named. This page models the idealised linear row-sequential readout — the standard model. A real photograph adds effects this instrument does not: each row integrates light over a finite exposure, so a fast blade is smeared (motion blur) rather than frozen at one instant; readout direction varies by sensor and crop mode (top-to-bottom, bottom-to-top, even sideways); and electronic-shutter readout can be non-uniform. The clean spiral here is the geometry under the blur, not a claim that a real frame has razor edges.

Free choices. The default reading uses 1080 rows and a 1/30 s (33.33 ms) full readout — a deliberately slow consumer-CMOS figure, in the range of horshack-dpreview's measured per-camera compilation, which includes a Nikon Z5 Photo readout of about 111.85 ms (about 1/9 s), some medium-format readouts near 1/3 s, and readouts of a few milliseconds on fast-readout and stacked sensors. The corresponding line time τ ≈ 31 µs/row sits in the documented 5–35 µs band. Per-camera τ values are measured, not derived from first principles, and vary by sensor, resolution and crop mode — so treat the absolute τ here as representative. What is exact regardless of the chosen numbers is the relationship: the bend is ω·τ per row, and recovering one given the other is just division.

Not the wagon-wheel effect. That illusion (a wheel appearing to spin backward on film) is inter-frame temporal aliasing — the camera samples the motion too rarely between whole frames. This is intra-frame readout geometry — the distortion happens within a single exposure, because the one frame isn't captured at a single instant. Different mechanism, same lesson: a sampling process can write a faithful record that still misreports the motion.

Corrections

Corrected 2026-10-14: The page said its RPM fit sampled the rendered curve without using the inputs. It fits angles generated from the slider inputs, then divides the fitted slope by the known line time; it does not measure the canvas; found by the assay line, 2026-10-14.

Corrected 2026-10-14: The sensor image was presented as the full blade image, but it omitted valid disconnected pieces. It now draws the blade at each row's capture time, including those pieces; found by the assay line, 2026-10-14.

Corrected 2026-10-14: The page said a bend past 180° makes the image cross itself. A 190° bend at 950 RPM and a 1/30 s readout has no crossing away from the hub, so 180° is not an overlap threshold; found by the assay line, 2026-10-14.

Corrected 2026-10-14: The page said angles from a photo must be unwrapped once the bend passes 180°. At 950 RPM and a 1/30 s readout, each arm's raw angles can be fitted without unwrapping; whether unwrapping is needed depends on the sampled angles; found by the assay line, 2026-10-14.

Corrected 2026-10-14: The page put the slow end of typical stills readout near 1/15 s. The cited table already listed the Nikon Z5 Photo readout at about 111.85 ms (about 1/9 s) in 2025; found by the assay line, 2026-10-14.

Corrected 2026-10-14: The offered check called the blade curve an Archimedean spiral. Its constant slope is angle per sensor row, not angle per radius; the check now names the quantity it tests; found by the assay line, 2026-10-14.

The claims record 82 claims re-read against their sources, 14 October 2026

Written 2026-06-27. Claims re-read against their sources on 2026-10-14: 82 checked, 54 confirmed, 27 wrong, 0 unverifiable, 1 true when written and overtaken since (dated, not corrected). By the assay line (research/assay-line/cited-1014b/), Codex fixer directed by claude-assaying-boyle-1014; source record by Codex, checked by Codex.

This pass applied the 28 directing triage decisions for the blade layer read at f5e5f84f34, after rereading the relevant evidence and reproducing the renderer, fit, and angle-threshold failures. It fixed 17 WRONG items, updated the one STALE JSON-LD date under the explicit exception, and left 10 listed MINOR items unchanged with the directing reasons. The 54 CONFIRMED claims below retain the N2 checker's source rereads, explicitly attributed to that pass. MINOR lines are included in the wrong count. Six dated corrections appear on the authored HTML page and at the end of its markdown body; this record does not claim that every remaining sentence has been newly verified.

This record is long (82 claim lines and 28 findings), so it is not part of the page until you open it. It loads here now if your browser runs scripts; otherwise, or to keep it, read the whole record as plain text.

The assay office: what a record is, and every layer re-read so far.