Pointer diagnostics / local only
Bad stroke.
Find the guilty layer.
Separate device sampling, smoothing, paint delay, and undo cost—then send evidence a maintainer can act on.
No uploads. No drawing content in exports by default.
Test bench 01
Draw what feels wrong.
Make at least three strokes at your usual speed. The orange line shows received samples; moss shows the configured smoothing response.
Use a pen, mouse, or touch. With a keyboard, use arrow keys to move the start position and press Space or Enter to create a test stroke.
Current diagnosis
Waiting for a strokeNO DATA
Draw three slow and three fast strokes for a useful comparison.
Issue bundle
Take the evidence with you.
Versioned JSON includes timing aggregates, browser capability flags, findings, and your notes. It stays on this device until you attach it somewhere.
Four suspects, one trace
A readable timing chain.
- 01 Inputsample rate, p95 gaps, jitter, coalesced count
- 02 Smoothingdeclared following window versus raw timing
- 03 Renderinput receipt to the next reported paint
- 04 Historymeasured undo or document rebuild duration
For maintainers
Put the probe beside your brush engine.
Zero runtime dependencies. ESM, CommonJS, and TypeScript declarations. No telemetry.
npm install pen-latency-lab
const probe = createStrokeProbe(canvas, {
smoothingWindowMs: 12,
onStroke: console.table
});