{{ summaryTitle }}
{{ summaryValue }}

{{ summaryLine }}

{{ state === 'completed' ? 'Strokes' : 'Stroke limit' }}{{ state === 'completed' ? (values?.stroke_count || 0) : 20 }} {{ state === 'completed' ? 'Samples' : 'Retention' }}{{ state === 'completed' ? (values?.sample_count || 0) : 'Current tab' }}

{{ state === 'running' ? 'Session armed.' : state === 'completed' ? 'Session stopped; observations retained.' : 'Ready.' }}

Pressure · 0–1
{{ current ? fmt(current.sample.pressure) : '—' }}
Pointer
{{ current?.pointer_type || 'Unobserved' }}
State
{{ readingState }}
Tilt X/Y
{{ current ? ((current.sample.tilt_x === null ? '—' : fmt(current.sample.tilt_x, 0) + '°') + ' / ' + (current.sample.tilt_y === null ? '—' : fmt(current.sample.tilt_y, 0) + '°')) : 'Unobserved' }}
{{ state }}
Pen test examples
Preview the records without a pen. Replaces retained observations; Start begins a fresh test. Limits: 20 strokes, 1500 samples per stroke, 10000 total; capture stops at a limit. Nothing is uploaded or saved automatically.
×{{ fmt(multiplier, 2) }}
Optional display refinement, ×0.5–3. Blank uses ×1; recorded values stay unchanged.

{{ exportStatus }}

{{ reportText }}

{{ exportStatus }}

StrokeOriginPointerEndSamplesContact readingsMin (0–1)Mean (0–1)Max (0–1)Duration (ms)ObservationInspectCopy
{{ s.id }}{{ s.origin }}{{ s.pointer_type }}{{ s.end }}{{ s.sample_count }}{{ s.contact_count }} {{ fmt(s.minimum) }}{{ fmt(s.mean) }}{{ fmt(s.maximum) }}{{ fmt(s.duration_ms, 1) }}{{ s.observation }}

No strokes were delivered during this session. Start and draw on the pad, or load the labelled example.

{{ exportStatus }}

OriginPointerEventTime (ms)X (CSS px)Y (CSS px)Pressure (0–1)Tilt X (°)Tilt Y (°)Twist (°)Tangential (−1–1)Altitude (rad)Azimuth (rad)Contact width (CSS px)Contact height (CSS px)ButtonsBrowser trustedCopy
{{ selectedStroke.origin }}{{ selectedStroke.pointer_type }} {{ s.event }}{{ fmt(s.t_ms, 1) }}{{ fmt(s.x, 1) }}{{ fmt(s.y, 1) }}{{ fmt(s.pressure, 3) }}{{ fmt(s.tilt_x, 3) }}{{ fmt(s.tilt_y, 3) }}{{ fmt(s.twist, 3) }}{{ fmt(s.tangential, 3) }}{{ fmt(s.altitude, 3) }}{{ fmt(s.azimuth, 3) }}{{ fmt(s.contact_width, 3) }}{{ fmt(s.contact_height, 3) }}{{ fmt(s.buttons, 3) }}{{ s.trusted }}
Samples {{ pageIndex * 50 + 1 }}–{{ Math.min((pageIndex + 1) * 50, selectedStroke?.sample_count || 0) }} of {{ selectedStroke?.sample_count || 0 }}. CSV/DOCX save this page; JSON saves all.

{{ exportStatus }}

{{ !chartRows.length ? 'No contact pressure readings to plot.' : 'Chart unavailable; the sample audit retains the observations.' }}

{{ selectedStroke?.origin || 'No stroke' }} · Pressure 0–1; contact samples only.

Similar tools

A stylus can move a cursor correctly while every line still has the same thickness. Pressure-sensitive drawing needs an additional signal that changes as the pen presses against the surface. Drawing applications can use that signal to control a brush, while brush settings determine how the changing input affects the finished stroke.

Browser pressure is a normalized number from 0 to 1. It describes a position within the reported pressure range, rather than a calibrated force in newtons. The same number from two pens need not represent the same physical effort, and reaching 1 is not a target that requires pressing harder. A browser pressure check is useful for comparing the readings delivered during ordinary drawing.

Contact and hover need different interpretations. A pen can report its position above the surface, and its side button can be pressed while the tip remains in the air. Tip contact, eraser contact and barrel-button activity are therefore separate facts. Counting every active button as contact can make a hovering pen appear to produce drawing pressure.

Orientation adds another kind of information. Tilt describes how far the shaft leans, twist describes rotation around the shaft, and altitude and azimuth describe its elevation and direction. These readings can affect drawing behavior independently of tip pressure. A changing angle does not establish that the pressure signal changes, and a pressure-sensitive pen need not expose every orientation measurement.

A useful comparison begins with several deliberate strokes that move from light to comfortable firm contact and back again. Keeping the pen, surface, driver settings and browser the same makes differences easier to interpret. Testing tilt separately helps avoid changing several conditions at once. Comparing the same device in another browser and a native drawing application can then show whether the behavior is specific to one setting or application.

Fixed readings require care. A constant 0.5 may be the compatibility value supplied when pressure is unsupported, or it may be an actual reading halfway along the reported scale. Missing pressure means no usable value was delivered. A reported zero remains a numeric observation whose meaning depends on contact and button state. Cursor movement, a pen label and a visible pressure field cannot establish sensor accuracy, advertised pressure levels or device calibration.

How to Use This Tool:

Use the stylus you want to check. Load synthetic example offers a separate way to preview the records without measuring a device, and replaces any observations already retained.

  1. Select Start to arm a fresh capture. This replaces the previous session or example. If the browser reports that Pointer Events are unavailable, use a browser that exposes them for live capture.
  2. Draw a few deliberate strokes on the pad while varying pressure. Current pressure and tilt appear above the pad alongside the pointer type and contact state. Release the tip and any held buttons between strokes; a normal release finishes that stroke while leaving capture armed.
    Leave Ink width in Advanced blank for ×1. Values from ×0.5 to ×3 change only the drawn line. An invalid width stops active capture. Clear the value or return it to that range to restore access to the retained results.
  3. Select Stop when you have enough observations. The summary then describes the retained session, and the Observation report records its outcome. Current live readings clear without deleting the recorded strokes.
  4. Select Inspect beside a stroke in the Stroke ledger to examine its Sample audit. Compare its pressure pattern in the Pressure timeline, then save any evidence you need before starting again. Copy and download actions become available after capture stops.

Reset clears the observations and returns to readiness without arming capture. If the report contains no strokes, select Start and draw on the pad before stopping. If the chart is unavailable, the sample records remain available and Retry chart can try the display again.

Interpreting Results:

Read the pointer type and origin alongside the pressure result. A drawn line can come from pen, mouse or touch input, and a recorded stroke can contain barrel-button activity without any tip contact.

  • Pressure varied means a qualifying pen stroke contained changing contact-pressure values. Compare the changes with the light and firm parts of your stroke. Variation alone does not measure accuracy or certify a physical pressure sensor.
  • Inconclusive means pen input was observed without qualifying pressure variation. A stroke fixed at 0.5 is compatible with the browser fallback, but does not prove that fallback was used. Another fixed value, missing pressure or barrel-only activity can also leave support unresolved. Repeat a deliberate stroke and compare the same device in another browser or drawing application.
  • No pen observed means no stroke qualified as native pen input. Mouse, touch, unknown or untrusted pen records may still exist. Check the recorded pointer type before treating those observations as evidence about a stylus.

The live state Buttons active can describe a hovering pen with its barrel button held. It contributes no pen contact-pressure readings unless tip or eraser contact is also reported. With no buttons held, hovering updates only the current display. The readings clear when the pointer leaves the pad.

An origin of native reflects browser-trusted recorded input. A retained untrusted sample marks its stroke untrusted event, while the demonstration remains synthetic example. The session's native pen conclusion requires pen input with native origin and every retained sample browser-trusted. Browser automation can also produce trusted input, so these labels cannot distinguish a physical pen from all simulated input. An untrusted or synthetic stroke may show changing numbers without establishing native pen support.

The Observation report and its text copy summarize the session and each stroke using displayed figures. The Stroke ledger has one row per stroke. The Sample audit shows up to 50 samples from the selected stroke at a time, and its CSV or DOCX export contains only that visible page. Raw JSON contains every retained stroke and sample, including origin, timing, button states, optional readings and the display preference.

CSV and JSON retain numeric values without the display's decimal rounding; DOCX uses the displayed table text. A pressure-timeline CSV contains the selected stroke's complete contact-pressure trace. A PNG image captures that timeline and its origin label. It provides a visual record of the plotted observations, while the sample records preserve the individual readings needed for closer comparison.

Technical Details:

Pressure statistics depend on which observations count as contact. A recorded stroke follows one pointer from its initial pressed state until release or interruption. Its raw sample count can therefore include readings that do not belong in a contact-pressure average.

Contact rules

The Buttons reading combines active button flags into a bit mask. For pen input, any combination containing the tip flag 1 or eraser flag 32 qualifies as contact before release. The barrel flag 2 alone does not.

Pen button states and eligibility for contact-pressure statistics
Pen state Button flag Contact-pressure treatment
Tip contact 1 Include observed pressure before release.
Eraser contact 32 Include observed pressure before release.
Barrel button alone 2 Exclude from contact statistics and pressure ink.
Hover with no buttons 0 Current observation only, outside retained contact statistics.
Release Any Retain the delivered sample, but exclude its pressure from contact statistics.

A zero pressure delivered during qualifying contact is a valid reading and is included. Hover and release are excluded because of their contact state, not because zero is inherently invalid. Missing pressure does not become zero and does not increase the contact-reading count. Mouse, touch and unknown input use their nonzero button state for their own statistics and remain explicitly non-pen observations.

Formula Core

For a stroke with at least one eligible reading, let pᵢ be each normalized contact-pressure reading and n their count. The mean gives every delivered contact reading equal weight.

p ¯ = ∑ i = 1 n p i n

The minimum and maximum are the smallest and largest eligible pressures. With no eligible readings, all three statistics are unobserved. These statistics belong to individual strokes; session totals count strokes and all retained samples. The mean is not weighted by elapsed time, so a part of the stroke that produces more readings contributes more to it.

Variation requires at least two eligible readings within the same stroke whose exact minimum and maximum differ. There is no minimum change threshold or accuracy score. Two individually fixed strokes with different values do not establish variation within a stroke. Display rounding can hide a small difference that still qualifies.

Stroke duration is the last retained sample's elapsed time from the beginning of that stroke. A normally retained release can extend the duration beyond the last contact reading. An interrupted stroke ends at its last available sample, without an invented release or a fabricated final reading.

Pressure and orientation quantities

The ranges below describe browser readings, not a manufacturer's accuracy specification. A field can be present with a standard default even when no corresponding sensor information was supplied.

Browser pressure and orientation ranges, units and default meanings
Reading Range and unit Meaning and availability
Pressure 0 to 1, unitless Normalized pressure. Unsupported pressure uses 0.5 with active buttons and 0 otherwise.
Tilt X and Y −90 to 90 degrees Lean relative to the surface normal. Positive X is right and positive Y is down the screen. Unsupported tilt defaults to 0.
Twist 0 to 359 degrees Clockwise rotation around the pen's shaft. Unsupported twist defaults to 0.
Tangential pressure −1 to 1, unitless A separate control, often a stylus wheel. Zero is neutral or unsupported. It is distinct from the barrel button's pressed state.
Altitude 0 to π/2 radians Zero is parallel to the surface and π/2 is perpendicular. The unsupported-angle default is π/2.
Azimuth 0 to 2π radians Clockwise direction of the pen's cap from screen-right. Zero is also used when orientation is unsupported or the pen is perpendicular.

Orientation representations may be derived from one another by the browser. Missing, nonnumeric or nonfinite pressure and orientation readings remain Unobserved; valid numeric zero remains zero. Finite values outside the accepted ranges invalidate the observations rather than being silently forced into range.

Coordinates and contact width or height use CSS pixels, the browser's layout units. Contact dimensions describe reported contact geometry and can default to 1 when it is unavailable. They are separate from drawn ink width. Coordinates are relative to the pad and can extend outside it while pointer capture continues, even though the visible ink is clipped to the pad.

Sampling, timing and display precision

Browsers can combine several movement readings into one delivery. Those bundled readings are called coalesced samples. When available, their individual observations are retained instead of also counting the combined movement again; otherwise the delivered movement is used. Press and release readings remain explicit. Predicted positions are not added.

Elapsed times are browser timestamps expressed in milliseconds from the start of each stroke. The pressure timeline places observed contact points at their actual elapsed times, which need not be evenly spaced, and joins them without smoothing. Connecting two points adds no measurements between them. Neither the number of samples nor their spacing establishes the pen's hardware sampling rate or input latency.

Pressure statistics and most numeric sample readings display up to three decimal places. Elapsed time and X/Y coordinates display up to one decimal place, while the live tilt readout uses whole degrees. Calculations use the retained numbers before this presentation rounding.

Ink width represents a reading

The drawn width is a visual mapping of pressure. With p as the observed pressure, m as the selected ink-width multiplier and w as width in CSS pixels, the mapping is:

w = { ( 1 + 10 p ) m pressure observed 3 m pressure unobserved

The constant-width fallback draws contact whose pressure is unavailable without inventing a pressure value. Changing the multiplier redraws the ink and leaves recorded samples, pressure statistics and the pressure timeline unchanged. It does not calibrate the device or alter its pressure response.

Session Limits and Privacy:

A session retains at most 20 strokes, 1,500 samples per stroke and 10,000 samples in total. Capture stops before accepting observations beyond those bounds, preserving the partial stroke and its ending reason. A release can fill the total exactly; a further press then ends capture without adding another stroke. Older observations are not removed to make room for new ones.

  • One pointer owns a stroke at a time. Other simultaneous pointers are ignored, and a later stroke can use another pointer type. This behavior does not test palm rejection.
  • Losing window focus, hiding the page, cancellation, lost capture or an inability to capture the pointer ends the session. Existing observations remain available while the page stays open. Capture does not resume automatically.
  • Leaving or closing the tool releases active capture and stops monitoring. Reloading removes the retained observations.

Observations are processed in the current tab's memory without being uploaded or saved automatically. Only the ink-width preference enters the page address, so sharing that address does not share a recording. Copies and downloads happen on request. Sample exports can include the coordinates and timing of your drawing, as well as pressure and orientation, so those files carry more than a pressure summary.

Worked Examples:

One synthetic stroke with 42 recorded samples

Load synthetic example gives 41 contact readings at 25 ms intervals from 0 through 1,000 ms. The release at 1,025 ms raises the raw count to 42 and sets the duration to 1,025 ms. Pressure rises from 0.1 to a maximum of 0.9 and returns to approximately 0.1, for an arithmetic mean of approximately 0.5966185283776992, displayed as 0.597. Release pressure zero is recorded but excluded from the contact minimum of 0.1, the mean and the 41-point timeline, which ends at 1,000 ms. Altitude and azimuth are unavailable, while twist and tangential pressure are valid numeric zeros. All 42 samples have Browser trusted false and synthetic example origin. The variation illustrates the calculation without testing hardware. Select Start to replace the demonstration with your own capture.

References: