Original-ink vector
drawing whiteboard
EMR-TEST is a lightweight Windows whiteboard and device-testing tool: it restores real ink in real time through a “sample → pressure shaping → curve fitting → vector outline” pipeline, with SAI-style jitter correction, pressure gain, a device telemetry HUD, capacitive multi-touch test and a ghost mode, and exports PNG bitmaps or JSON vector ink.
Current 1.5.0.0 ~2510 KB · Portable, Download & Run
Built for the real feel of the pen
Most whiteboards flatten ink into equal-width polylines, so circles get corners, fast strokes break and pressure feels stiff. EMR-TEST rebuilds from the sampling source: it keeps every hardware report, fits a centripetal Catmull-Rom curve, then generates a variable-width outline per point and submits it incrementally each frame — preserving the natural thickness of real ink while keeping long strokes smooth.
True ink reproduction
Keeps every hardware sample (including coalesced events); pressure, speed and entry/exit taper jointly define the width, so the preview and the final stroke match point by point.
SAI-style jitter correction
Adjustable 0–10 (default 3): delayed sampling + Gaussian iterative fitting + a trailing pen tip removes hand tremor, and the pen-up smoothly chases to the real endpoint.
Adjustable pressure gain
Pressure gain 0–10 (default 3): 0 gives a constant width and higher values amplify the pressure contrast; devices with pressure are unaffected by the toggle.
Capability matrix
From writing and testing to export, a complete loop for pen debugging and demos.
Four pen types
Pencil (graphite grain), ballpoint (round, light pressure), brush (strong pressure + entry taper) and highlighter (translucent flat tip, single fill without darkening).
Device probe
Enumerates system stylus / pressure devices, showing brand, protocol, pressure levels, tilt, barrel buttons, eraser end, VID:PID; two per row, removable individually.
Capacitive test
Multi-touch points, touch trails, pressure telemetry and report rate; trails use midpoint quadratic Béziers with per-point pressure width, with grid and trail retention toggles.
Ghost / block modes
Ghost mode releases the writing layer so you can annotate desktop content directly; the two modes keep separate ink, images and undo stacks, switching without stacking.
Images & transforms
After inserting a screenshot / image you can move it, scale from corners and rotate freely; the selection handles and cursor follow the transform, with layering and reset.
Export & save
Save = export: PNG bitmap (with paper and images) or JSON vector ink (pen type, width, color, pressure toggle and all samples); the board clears automatically after saving.
Toolbar & HUD
The bottom toolbar collapses / expands with one click; hover 1s for the move handle, hold to drag the whole toolbar and release to drop it. On maximize / restore or a logo click in penetration mode, the toolbar and HUD automatically return to their initial position. The HUD shows device, protocol, output, contacts, coordinates, pressure, Pressure Levels, pen count, tilt and report rate live.
Logo panel
The top-right panel is hidden by default; click the logo to reveal changelog, language switching and minimize/maximize/close.
Multi-language
The UI supports 36 languages, switchable live and remembered; on first run it matches the system language.
More pen types
Pen (smooth), ballpoint (fine), chalk (realistic powder), laser pointer (semi-transparent auto-fade) join the four core pen types, covering scenarios from writing to presentation.
Pressure preview
A standalone pressure-preview window shows the live stroke outline and pressure curve; you can edit the pressure response to calibrate feel on pens without pressure or with faulty sensing.
Tilt preview
Live device-tilt telemetry: an azimuth dial plus X / Y / Z axis indicators and Tilt X / Tilt Y / Azimuth readouts visualize the pen tilt and orientation in real time.
Real-time collaboration
Sync the board in real time through the official relay, with read-only / demo modes so multiple people can annotate and write on the same whiteboard.
Artwork sharing
One click generates an artwork code / URL code and share link; the compressed project JSON is uploaded and distributed via QR code or link, with no sign-up.
Stroke replay
Replay ink generation stroke by stroke on a timeline, useful for teaching, reviewing your writing and checking pressure linearity.
Screenshots
Full-screen and region snip capture; grabbed images drop straight onto the board for annotation. Esc or right-click cancels a region snip.
Changelog
An in-app Changelog window kept in sync with the site, so you can review each version changes and new capabilities anytime.
Wireless Screen
Cast the current canvas to every receiver in the same room (phone, big screen or another PC); scan or open the URL to watch, with adjustable frame rate and quality over the same relay used for collaboration.
Zone Writing
Split the canvas into 2 / 3 / 4 / 6 / 9 zones horizontally or vertically; with sync writing on, every stroke is copied to all zones, otherwise each zone stays independent.
Feedback & Sponsoring
Problem reports, feature ideas, sponsoring and other — with nickname, contact and screenshot attachment; desktop and web post to the same backend, with five payment QR codes built in.
Edge-Docked Windows
Drag any window to the canvas edge and it shrinks into a round ball with its own icon; click the ball to restore it. The ball follows the canvas colours, can slide along the edge and survives a refresh.
New Shortcuts
Alt+C wireless screen · Alt+Z zone writing · Alt+O feedback; Ctrl+T cap test and Ctrl+D device probe moved to the top-right toolbar and hide automatically in passthrough mode.
Recording & camera
A recording toolbar drops below the main one: blinking indicator, start / pause / stop, timeline, mic mute, camera toggle, teleprompter and save. The camera preview sits at the top-left of the canvas, drags as a whole and carries the same toolbar as the replay page.
Multi-page canvas
A column of page numbers on the canvas edge: the cross icon adds a page and past five pages hollow triangles appear top and bottom (hover the toolbar and use the wheel). Pages can be deleted or dragged to reorder, and hovering the middle of the canvas top / bottom edge pops up a flip triangle.
Zoom & eyedropper
A row of pure icons at the bottom-left: lock canvas / zoom out / 100% / zoom in / reset. The wheel zooms the canvas by default and adjusts line width while locked; the pen panel adds a preview chip, preset swatches and an eyedropper that picks colors on the canvas.
Rendering pipeline
Live preview (pen thread) and the final stroke (static ink) share one algorithm and one width curve, so what you see while drawing never changes after pen-up.
Sample
Receives raw Stylus packets, expands coalesced events and reads the coordinates and NormalPressure of each point.
Stabilize
HcStab delayed fitting window: spatial-radius sampling + 1-2-1 Gaussian iterations + a trailing pen tip; the pressure series is filtered in sync.
Shape
The width generator computes each point's width from pen type, pressure, speed and entry taper, with exponential smoothing and jitter suppression.
Render
After centripetal Catmull-Rom subdivision it builds a ribbon outline filled once; translucent pens fill the whole path once to avoid darkening.
// 抖动補正核心:延迟采样 + 高斯迭代拟合 + 跟随态笔尖 alpha = hcJitterAlpha(jit); // 1 / (1 + 0.5 * jit),jit = 0~10(默认 3) iter = 2 + round(jit * 0.5); // 高斯迭代遍数(上限 8) radius= 8 + jit * 0.8; // 拟合窗口半径(上限 16px) press = 3 + round(jit * 0.5); // 压感序列过滤遍数 delay = round(jit * 0.4); // 延迟采样数(上限 4) tip = lerp(tip, fit[count - 1 - delay], alpha); // 笔尖天然滞后 = SAI 手感 onPenUp: emit smoothChase(tip -> realEnd); // 抬笔补齐,收笔不缺一截 // 曲线:向心参数化 Catmull-Rom(α = 0.5),采样疏密不均也不过冲、不打圈 // 成图:沿细分点按切线法向左右偏移 → 单一闭合带状轮廓一次填充
Device recognition & protocols
Automatically parses the Tablet devices reported by the system, determines brand and protocol from name keywords and VID/PID, and shows capabilities live.
Supported protocols
EMR (electromagnetic resonance), AES (active electrostatic), MPP (Microsoft pen protocol) and USI (universal stylus); passive capacitive pens and mice are grouped separately, and unrecognized devices appear only after use.
Telemetry HUD
Shows device type, brand, protocol, output (tip / barrel button / eraser end / hover), touch count, coordinates, pressure, pressure levels, pen count, tilt and report rate in real time.
Optimised for high-frequency input
Every hot path is designed to do only per-frame increments, so long fast strokes never get slower.
Incremental submit
The trail layer appends with DrawingGroup; a new point is submitted as it arrives with no full redraw, avoiding display lag.
Cache reuse
Brushes and pens are cached and frozen by "color + quantised width", safe across pen threads with zero repeated allocation.
Redraw on demand
The grid and static layers redraw only on size / toggle changes; the live layer redraws only active elements.
Technical specs
| Item | Spec |
|---|---|
| OS | Windows 10 / 11 (recommended); runs on Windows 7 SP1 and above |
| Runtime | Microsoft .NET Framework 4.8 |
| Architecture | x64 (recommended) and x86, both with Debug / Release builds |
| Input devices | EMR pens, active capacitive pens AES / MPP / USI, passive pens, touch screens, mouse |
| Pressure | Levels follow the device; pressure gain adjustable 0–10 (default 3) and can be turned off for a constant width |
| Jitter correction | 0–10 (default 3), delayed fitting + Gaussian iterations + pen-up chase |
| Pen types | Pencil, ballpoint, brush, highlighter (translucent single fill) |
| Erase | Erase (judged by real rendered width), single-stroke delete, lasso select; the indicator ring matches the erase range 1:1 |
| Export | PNG bitmap (with paper and images), JSON vector ink (style + all samples) |
| UI | Deep-sea blue theme, borderless cards, draggable toolbar and HUD, F11 fullscreen, ghost / block modes |
| Size | Single file, about 2510 KB, no install |
Start writing in three steps
Download & run
Choose the x64 (or x86) build, download it and double-click to run — no install.
Choose pen & pressure
Toolbar → pen panel: pick pen type, width and color, and tune pressure gain and jitter correction as needed.
Write & test
Write directly; Ctrl+T opens the capacitive test and Ctrl+D the device probe to see the pressure curve and report rate.
Export
Ctrl+S saves as PNG or JSON; the board clears automatically for the next round.
Download EMR-TEST
Official site: https://www.emr-test.com · portable single file, download and run.
Version 1.5.0.0 (2026-09-16)
Windows · .NET Framework 4.8 · about 2510 KB each
64-bit (recommended)
Download x64 ↓32-bit
Download x86 ↓* .NET Framework 4.8 is required (usually built in on Windows 10 and above).
Changelog
Every version at a glance; the in-app Changelog window matches this list.
v1.5.0.0-09-16
Top-right panel hidden by default (click the logo to reveal); languages expanded to 36 with system auto-detect; clearer language dropdown; all toasts and tooltips localized; website localized and auto-switches by IP.
v1.4.0.0 · 2026-06-16
Added the language switcher and Changelog sections; jitter correction upgraded to SAI-style (0~10).
v1.3.0.0 · 2026-03-15
Image transform cursors follow direction; device probe per-item delete and restore; low-latency capacitive trails; fixed right-click menu not showing.
v1.2.0.0 · 2026-02-14
Polyline smoothing switched to centripetal Catmull-Rom; added eraser ring, brush persistence and JSON ink export.
Keyboard shortcuts
Every action is reachable from the keyboard. The table below lists all shortcuts by category.
Ctrl+BPen panelCtrl+PInk colorCtrl+IInsert imageCtrl+GBackgroundCtrl+ZUndoCtrl+Y / Ctrl+Shift+ZRedoCtrl+EEraserCtrl+DeleteClear boardCtrl+SSave & clearCtrl+MMouse modeCtrl+1~4Pen type (pencil / ball / brush / highlighter)Ctrl+5~7Eraser mode (wipe / dot / lasso)[ / ]Line width ([ / ])Ctrl+TCapacitive testCtrl+DDevice probeCtrl+OImport imageCtrl+Shift+GGhost / lockF11 / FHide / restore toolbars (fullscreen)Ctrl+Shift+DCollapse / expand toolbarCtrl+Shift+RReset toolbar & HUDCtrl+Shift+DeleteInitialize boardEscExitAlt+S / Alt+NScreenshot / snipAlt+G / Alt+F / Alt+D / Alt+PCustom bg / no-touch / dynamic cursor / pressureCtrl+Shift+M / Ctrl+Shift+FMinimize / maximizeCtrl+Shift+[ / ] · ←/→ · DelImage ops (layer / rotate / delete)Ctrl+Shift+1~4Pen types: fountain / sign / chalk / laserCtrl+Shift+SShare artworkCtrl+Shift+CReal-time collaborationCtrl+Shift+PStroke replayCtrl+Shift+OImport project (.json)Ctrl+Alt+SSpeed to thicknessCtrl+Alt+TTilt affects widthCtrl+Alt+HChangelogCtrl+Alt+LLanguage switcherAlt+1~4(Alt+Shift+1~4 reverse)Nudge pressure / speed / jitter / opacityCtrl+← / Ctrl+→Rotate selected image plus/minus 90 degAlt+CWireless screenAlt+ZZone writingAlt+OFeedbackCtrl+T / Ctrl+DCapacitive test / device probe (top-right toolbar)Esc / Ctrl+EnterIn dialogs: close / primary action (start cast · apply zones · submit)Alt+RRecording toolbar (record / camera / teleprompter)Ctrl+Alt+RTeleprompter (scrolling script, speed & size)Alt+IEyedropper: pick a color on the canvas as pen colorAlt+KLock / unlock the canvas (wheel adjusts width when locked)PageUp / PageDownPrevious / next pageCtrl+Alt+N / Alt+DeleteNew canvas page / delete current pageCtrl+= / Ctrl+- / Ctrl+0Zoom in / out / reset the canvasMReplay window: sound on / offAlt+XStop recordingAlt+MMicrophone: mute / unmuteAlt+VCamera: on / offAlt+TRecording settingsAlt+YSave recordingAlt+QClose recording toolbarFAQ
Does it work with devices that have no pressure?
Yes. Without pressure the app simulates natural thickness by "slower = thicker"; you can also set the pressure gain to 0 for a constant width.
What happens if jitter correction is too high?
Higher values use more delayed samples and a wider window, giving smoother lines but more lag and slower response. The default 3 is the balance point; tune between 0 and 6 to your speed and habits.
What is "Draw trails" for in the capacitive test?
When off it shows the fading dot that follows the touch point (to observe touch response); when on it draws the trail as persistent continuous lines whose width follows pressure, making broken lines, jitter and pressure linearity easy to inspect.
What is in the JSON export?
Each stroke's pen type, width, color, pressure toggle, jitter parameters and all samples (x / y / pressure) as vector data for playback, analysis or re-rendering.
Do ghost and normal modes affect each other?
No. Each mode keeps its own ink, images and undo stack, and switching never stacks them; ghost mode releases the writing layer so you can annotate desktop content directly.
Feedback
- Problem report
- Feature idea
- Sponsor
- Other
We will look at it as soon as we can; a screenshot plus your contact speeds things up.