How it works
Two comparisons. (1) Against the ideal: every key is checked against target values and an ideal curve shape, so wear that all keys share shows up, and the piano gets plain-language notes (“heavy, and it comes from friction”). (2) Against its neighbours: single keys that are out of line.
For the neighbour comparison, each key is compared with the median of its neighbours (four each side), so the piano is its own reference: normal bass-to-treble grading cancels out and nothing needs measuring. The scan looks at the shape features of the difference: the whole curve heavier or lighter, the gap between down and up (friction), a step partway down, the let-off bump's height and position, and key dip. It flags keys where a feature is far outside this piano's own key-to-key scatter. It then matches the shape of the difference against simulated fault fingerprints to name the likely cause.
It needs faults to be the exception. A whole section regulated off the same way looks “normal” next to its neighbours; use the model for that.
Open a KMD project, or load the demo piano.
1 · Compared with the ideal
Targets (yours to set — saved in this browser)
The let-off bump targets come from the model’s typical curve (bump ~× the downweight above it, peaking ~ mm before the key bottoms). Calibrate the tolerances against pianos you know are good.