Screen and Media Query Entropy: Reading the Display Without Permission
Everyone knows screen resolution is a fingerprinting input, and most teams dismiss it as too coarse to matter. That view is outdated: modern displays leak color gamut, HDR support, pixel density, and a long list of media-query answers that together tell a surprisingly specific story.
Beyond width and height
The obvious values are screen.width, screen.height, screen.availWidth, and screen.availHeight. The gap between total and available area reveals taskbars, docks, and menu bars, which differ by OS and configuration. Add window.devicePixelRatio and you separate standard displays from Retina and high-DPI panels.
But the display exposes far more through window.matchMedia. A script can query dozens of features and record each answer:
prefers-color-scheme(light, dark)prefers-reduced-motionandprefers-reduced-transparencycolor-gamut(srgb, p3, rec2020)dynamic-range(standard, high)prefers-contrastpointerandhover(coarse, fine, none)resolutionin dppxupdate(fast, slow)
Each answer is a small bit of entropy. Twenty of them combined narrow the population considerably, and several, like P3 color gamut and HDR support, correlate with specific hardware tiers.
Why the combination is stable and useful
Individually these values fluctuate. Window size changes as the user resizes; orientation flips on mobile. The durable core is the physical display: total screen dimensions, pixel ratio, color gamut, and pointer capabilities rarely change for a given device. Prynt separates the volatile viewport signals from the stable display signals and weights them differently.
Color gamut and dynamic range deserve the same attention: color-gamut: p3 and dynamic-range: high correlate with premium hardware tiers, so they meaningfully split the population even though each is a single answer. The pointer and hover media features deserve special mention. A device reporting pointer: fine and hover: hover claims to be a mouse-driven desktop. If the same session reports a touch-only user agent or a mobile platform, that contradiction is a tamper signal. Automation frameworks frequently get these features wrong.
Detecting spoofing through contradictions
Screen values are easy to override individually. Object.defineProperty can rewrite screen.width, and headless configs routinely set fake dimensions. What is hard is keeping every related value consistent.
A spoofed 3840x2160 resolution with devicePixelRatio: 1, a srgb-only gamut, pointer: none, and an availHeight equal to the full height is an internally inconsistent picture. Real 4K displays cluster around particular pixel-ratio and gamut combinations, and real desktops reserve some vertical space for system chrome. Prynt scores these joint distributions rather than trusting any single field, and because scoring runs server-side, the client cannot see which contradiction gave it away.
Fitting screen signals into the model
Screen and media-query entropy is a low-cost, permission-free contributor to Prynt’s stable visitorId. It runs instantly, needs no user prompt, and pairs naturally with heavier signals like canvas and WebGPU. In our multi-signal model it plays two roles: adding raw entropy and serving as a consistency check against user agent, platform, and touch capability.
Because Prynt correlates these signals across its reputation network, a display profile that appears across hundreds of accounts with mismatched other signals stands out as a farm or automation cluster rather than a single legitimate user.
Orientation, foldables, and edge cases
Mobile adds complexity that desktop-focused implementations miss. Orientation changes swap width and height, foldable devices expose two very different screen geometries depending on their state, and browser chrome on mobile grows and shrinks as the user scrolls, changing available height mid-session. Treating any of these transient states as a stable identifier produces churn. Prynt normalizes orientation and keys the durable signal to the physical panel rather than the current viewport, so a phone rotated sideways is still recognized as the same device. Foldables are handled as a device that legitimately reports two screen profiles, which is itself a distinguishing trait rather than a contradiction. Getting these edge cases right is what separates a screen signal that adds stable entropy from one that generates noise.
Guidance for practitioners
- Split volatile viewport metrics from stable physical-display metrics and weight them separately.
- Enumerate a broad set of media features, not just
prefers-color-scheme. - Cross-check pointer, hover, and pixel ratio against the reported device class.
- Treat impossible combinations, such as high resolution with pixel ratio 1 and no color-gamut support, as tamper evidence.
The display is one of the few surfaces every visitor exposes without a permission prompt, and reading it carefully turns a signal most teams ignore into a dependable part of the fingerprint.
Explore how screen and media-query signals combine into a stable identity on the free playground.
Try it free
Prynt is device intelligence with a free tier — visitor IDs, bot & fraud Smart Signals, and behavioral biometrics, powered by a cross-site network. Start free.