The specimen is yours · pattern

The Signature You Cannot Repeat

Draw the same invented mark twice. The browser keeps the full path, timing and stroke boundaries on this page, then asks a narrow question: how do these two captured performances differ under one displayed dynamic time warping rule? It does not decide whether they match, who drew them, or whether either is genuine.

Do not draw your legal, banking or usual signature. Invent a mark that means nothing. A dynamic trace is sensitive behavioural data even when this page keeps it local.

Published anchor first

Five rows from a 2009 paper

Khalil, Moustafa and Abbas printed a symmetric cost matrix for five signatures. This block starts from only the ten upper-triangle values, mirrors them, removes each diagonal zero, and recovers the nearest and farthest cost in every row. Nothing from your drawing is compared with these costs. Different hardware, features and protocols make that comparison meaningless.

Nearest non-self cost in each rowcomputing
Farthest non-self cost in each rowcomputing

Rebuilding the published example.

Now bring the unrepeatable thing

The shipped synthetic mark is already running below, so every part of the instrument has something to say before you touch it. Draw over either panel to replace that repetition. Add another stroke by lifting and drawing again.

Trace bytes sent
0, no sending code exists
Page network API calls
0 since audit began
Resources after load
0 observed

Synthetic fallback loaded: 93 samples, three traces, CC0 1.0.

Repetition Asynthetic

Time runs from cyan to amber. Each lift begins a new stroke.

Repetition Bsynthetic

Sampling follows Pointer Events and any coalesced events the browser exposes.

computing

This is a measurement under the controls below. There is no threshold and no identity verdict.

Open the feature and normalization controls

Only direction, speed and pressure read the drawn data. The stroke-start marker is structural: if direction, speed and pressure are all zero, two traces whose stroke layouts already agree score exactly zero no matter what was drawn. The page forbids that whole family of settings, not just the all-zero one, and restores direction weight to 1. This rule was widened after a review found the stroke-start-only case, and the visible check panel now measures the vacuity it prevents. The page also forces pressure weight to zero unless both traces contain genuinely supported pressure samples.

Keep the path. Change the clock.

A common dismissal is that this machinery only rewards the same outline. So the page makes a controlled counterfactual from repetition A. It retains the normalized arc-length path and stroke boundaries exactly, then spreads each stroke's original duration uniformly along that path. This is not a forgery and not a model of another person. It is a probe with one controlled difference.

Layer two

Three synchronized comparisons

Path coordinates only
computing
Direction only, weight 1
computing
Speed only, weight 1
computing
All selected weights
computing

The first three cells fix their own weights, so they name every contributor. The fourth uses the whole selected weight set, currently direction 1, speed 1, stroke start 4, pressure 0, and the stroke-start term is part of it. Read the first two cells knowing what they cost: against the uniform-time probe the path and direction cells are zero by arithmetic rather than by measurement, because the probe copies the processed coordinates and direction is computed from them. Speed is the only channel that can differ from this probe, which is why the check panel below also runs a reparameterised twin, whose zero is measured, and why a zero speed weight makes the fourth cell say nothing at all.

Both processed paths, separated vertically for legibility. The violet line joins the selected pair on the recovered warping path.
Every accumulated cell, dark to amber, with the recovered path in cyan. Infinite forbidden cells remain black.
Repetition A diagnostics. Raw speed uses CSS pixels per millisecond. Processed speed uses normalized coordinate units per millisecond. Acceleration is shown only as a jitter-sensitive diagnostic and has zero score weight.

What entered the calculation

Raw samples and transforms

0 samples
    traceindexx CSS pxy CSS pxt msstrokepointerpressuresupported

    The table shows the first 240 raw samples. The count above is the full count. Export preserves every sample, not only the visible rows.

    The check

    Running independent failure cases.

    Every uncertainty and free choice

    The trace stays on this side of the glass

    The page has no analytics, remote font, third-party script, upload endpoint or persistence call. It does not use localStorage, IndexedDB, cookies, logs or any navigation, query or network URL for traces. The one exception is deliberate: the export button serialises your two traces into a blob: URL that exists only inside this tab, hands it to a download link and revokes it a second later. Its Content Security Policy says connect-src 'none'. The counters above make attempted sending visible, and the browser's Network panel is the independent place to check. Resource requests needed to load this page can appear there. No request body should contain a trace.

    The traces themselves are held in this tab's memory for as long as the instrument is open, because a comparison cannot be computed without them. That is retention in memory, not storage: nothing is written to disk unless you press export, and nothing is sent at all. Clearing memory, replacing a repetition or closing the tab ends it.

    The claim has a boundary. Page code can show what page code attempted. It cannot prove that a browser extension, browser vendor, operating system, input driver or hosting environment is incapable of observing input. Clear memory drops the arrays and overwrites mutable live samples where JavaScript permits. It cannot command the JavaScript engine to erase old copies immediately.

    Published performance lives on another scale

    An equal error rate, EER, is the operating point, usually interpolated, where false acceptance and false rejection rates are equal under one named dataset and protocol. It is not the chance that this drawing is genuine, the error probability of one decision, or necessarily a deployed threshold.

    3.06%
    Khalil et al.

    Printed EER for cosine of direction plus speed, using five references per signer on 94 available SUSIG users, 100 Hz ePad-ink capture, 15 genuine tests and 10 skilled forgeries per signer.

    2.84% / 2.89%
    SVC2004 Team 6

    Best average skilled-forgery EERs on the hidden 60-user evaluation for Tasks 1 and 2. Standard deviations were 5.64% and 5.69%. Both maximum per-user values were 30.00%.

    2.8% / 1.6%
    Jain, Griess, Connell

    Best Table 6 line: false rejection rate and random-forgery false acceptance rate. They are distinct operating measures, not an EER, across 1,232 signatures from 102 writers with three-reference templates.

    SVC2004 used five enrollment signatures, ten trials, 10 genuine probes, 20 skilled forgeries and 20 random forgeries per user. Task 2 added orientation and pressure, yet its best average skilled-forgery EER was slightly higher than Task 1. That result does not support a general claim that more tablet channels necessarily help. None of these percentages transfers to this browser, device, feature rule or pair of drawings.

    What this does not prove

    It does not prove that either drawing is genuine, that both came from one person, that dynamic handwriting is unique, that a copied shape would fail a real verifier, or that any published EER applies here. There is no enrollment population, impostor distribution, skilled-forgery set, learned threshold or error estimate. The live result is a local measurement. The same-path replay proves only that this chosen dynamic representation can contain timing information absent from the rendered outline.