SmartUpscale

SmartUpscale is an extension for Firefox and Chrome web-browsers, that applies integer scaling to images on webpages. Prevents blurring images which have their size in physical pixels an integer number of times larger than their real size.

Useful with displays with high pixel density (HiDPI, high-DPI, Retina), including 4K/5K monitors at OS-level zoom of 200%.

The scale is calculated individually for each image.

Images are processed once loaded, as well as on changing browser-level zoom and after some of dynamic page changes.

The extension starts to work immediately after installation and does not need browser restart.

See also
  • IntegerScaler — utility for integer scaling of games in Windows 7+.
  • bsnes-mt — SNES (Super Nintendo) emulator with support for dual-axis integer scaling with zero pixel shimmering.

Options

The following extension options are available in the browser’s window “Add-on Manager → Extensions”:

Maximum image zoom that blur should be prevented at
Allows to limit zoom level that blur should be disabled at. Default value — 0 — means no limits.
Observe dynamic page changes (enabled by default)
Allows to auto­matically process new images added to the page dynamically after its initial load.
Disable blur for all elements (disabled by default)
Disables blur globally for all elements on the page regardless of current zoom level (equivalent to a corresponding user stylesheet). May cause distortion of images displayed at non-integer zoom levels.

Limitations

  • The extension only processes images embedded in the page as HTML element IMG. The extension does not process images embedded via CSS as background or using :before or :after pseudo­elements, since there is no reliable way to determine their in-page size, as well as in terms of performance. Also, it’s technically possible to disable blur not for specific background image itself, but for the element (or pseudo­element) that has that background image, while a single element may have multiple background images, each with its own scale factor.
  • Images opened directly in a separate tab may sometimes not be processed (Firefox-specific; Chrome behavior is unknown).
  • Dynamic pages changes are tracked partially. In particular, resizing individual images via CSS isn’t tracked while resizing via HTML attributes is tracked.