All articles
    Improvement

    How ScanChess Handles a Move It Can't Quite Read

    6 min read中文版
    Workflow diagram for How ScanChess Handles a Move It Can't Quite Read

    Every scoresheet has a few moves that are genuinely hard to read: the pen skipped, the writer was in time trouble, two characters ran together. The interesting question is not whether the recognizer gets those right the first time. It is what happens when it doesn't.

    We spent the last stretch on exactly that, and the changes fall into three groups: reading the ink more carefully, catching mistakes that legality checking can never catch, and asking you better questions about what's left. Nothing here rewrites your game behind your back — that stays off, on purpose.

    Being Wrong Is Not One Thing

    It helps to separate three failures that look identical in a finished PGN:

    1. Unreadable ink. The recognizer saw the stroke and picked the wrong character.
    2. Unexpected notation. The recognizer read the ink correctly, but the writer used a form that standard algebraic notation doesn't define, so the move was rejected as nonsense.
    3. A legal misread. The move reads cleanly, plays legally, and is not what was played.

    Each one needs a different answer. Legality checking only ever solved the first two, and only partly.

    Not All Confusions Are Equal

    The recognizer compares what it read against candidate moves, and that comparison used to treat every character mismatch the same: 1 for 7 cost exactly what 1 for 9 cost, even though one is a genuinely common handwriting confusion and the other almost never happens.

    That comparison is now graded. A pair that hands regularly confuse — 1/7, a/g, c/e, k/r, 0/O — costs a fraction of an edit; a pair nobody confuses costs a full one. When two candidate moves are otherwise equally close to the ink, the one that differs by a plausible slip of the pen wins.

    One special case was worth its own rule. Writers leave the capture mark off constantly — they write Bf3 for Bxf3 when in a hurry — and the old scoring charged that twice: once as a missing character, once as a mismatched capture. Two penalties for one omission were enough to push the real move behind a quiet move on a neighbouring square. An omitted x, + or # now costs a fraction of an edit, because it carries almost no information about which move was meant.

    The Notation People Actually Write

    Standard algebraic notation is what the arbiter's handbook describes. It is not always what ends up on the sheet, especially from players who learned somewhere else or decades ago. The recognizer now resolves these forms against the position instead of rejecting them:

    Written What it is
    Pe4, Pxd5, Pe8=Q pawn named with a P prefix
    e2-e4, Ng1-f3, Bc1xf4, Ng1f3 long algebraic, with or without the dash
    BxN, NxBc4 the captured piece named instead of its square
    cd, cxd, cd5, c:d file takes file

    Move numbers, ch, e.p. and annotation glyphs are stripped first, along with the several different characters people use for "takes". If the resulting reading fits exactly one legal move, it enters the candidate pool with high confidence. If it fits several — BxN when two knights can be taken — it enters with low confidence, because the reading by itself did not pick the move, and the rest of the game gets to decide.

    Legal, But Nobody Would Play It

    This is the failure that used to slip through. A misread move is usually still a legal move. Nf3 misread as Nf5 may play perfectly well; nothing in the rules objects; the PGN exports clean and wrong.

    There is a signal, though, and it comes from the game rather than the rules: after a misread, material often starts behaving in a way no real game does. A queen sits where it can be taken by a pawn, and the pawn doesn't take it. A rook hangs for three moves and both players ignore it.

    ScanChess now runs a static exchange evaluation on the real board at each ply and asks whether a side was offered a piece or more and declined it. Two guards keep this from crying wolf:

    • A side in check is not choosing. If you must answer a check, ignoring a free piece is forced, not absurd.
    • A real sacrifice stops hanging once it is answered. Material is only reported when it is still available a full move later — when the offer stood, the opponent had time to take, and didn't.

    Runs of the same absurdity collapse to the ply where they start, so a rook that hangs for six plies produces one flag, not six. Both plies get marked: the one that put the piece there, and the one that walked past it. Neither is rewritten. You get an amber flag and the reason, and you decide.

    Better Questions, Not More of Them

    The review step used to hand doubtful moves back as an open question: here is what we read, what should it be? That invites an answer that is neither what you wrote nor legal in the position.

    The question is now closed. At a doubtful ply, ScanChess takes the complete list of legal moves — usually thirty or forty — and scores each one against everything the recognizer offered for that square: its best reading and its runners-up, each weighted by its own confidence. What comes back is a short ranked list of moves that are both legal here and close to the ink, and the question becomes multiple choice.

    Two rules keep the answers honest. An answer that isn't on the list is discarded rather than accepted. And if the accepted picks taken together stop the game replaying, all of them are dropped rather than leaving the game half-repaired.

    When Both Players Kept Score

    In a rated game, two people wrote down the same moves. That is two independent readings of one game, and disagreement between them is information.

    ScanChess can now merge the two sheets. The move streams are aligned rather than zipped together, so a row one player skipped shifts the alignment instead of turning every later move into a conflict. Where the two agree, confidence goes up by half again — two hands and two readings arriving at Nf3 is much stronger evidence than one. Where they disagree, confidence goes down and both readings are kept as candidates for the review step, with a record of which sheet each came from.

    What Deliberately Did Not Change

    Automatic correction stays off. The scan is shown as scanned; where the game stops being legal, the ply that broke it is marked; where something is doubtful, it is flagged and explained. Everything above makes the flags smarter and the questions shorter. None of it silently edits your game, because a scoresheet that has been quietly "fixed" is worse than one you know to check.

    The best input is still a clean photo — our photo checklist takes thirty seconds and beats every algorithm on this page. But when the ink is genuinely ambiguous, scanning a scoresheet now fails more usefully: it tells you which move it doubts, why, and what the position says it could be.

    Turn your scoresheet into PGN in seconds

    Upload a photo and let ScanChess do the transcription.

    Scan your scoresheet

    Keep reading