Screenshot beautifier

Frame a screenshot on a background, kept pixel for pixel, with private details covered for good.

Or drop them here, or paste. PNG, JPEG, WebP, GIF or AVIF, any number, one style for all. Nothing is uploaded.

Preview

Drag across the screenshot to cover anything private.

Export

Pixels
…
File
…
Written ppi
…
Screenshot at
…
The style link carries the frame, background and export settings after the #, which browsers never send. It never carries your screenshot.

Alt text

  • What would someone miss if they could not see it? Say that first.
  • Name the one thing the screenshot is there to show: a number, a new button, an error.
  • Copy any text that matters word for word; skip the rest of the interface.

72 characters. X allows 1,000. Bluesky allows 2,000.

Frame and export

Frame
Background
Scale
Format
More optionsPadding from its size · corners 12 px · shadow 3 · no caption · density from the file

PNG is lossless, so it has no quality setting.

Drawing the preview…

In short

Add a screenshot, cover anything private, and choose a frame, a background and a size. The image is drawn in your browser from the screenshot’s own pixels: exported at the density it was taken at (2× for a Retina Mac, which writes 144 ppi into the file), every pixel goes into the PNG unchanged. Covered areas are filled without reading what was under them, so they cannot be unblurred, and the download carries no location, camera details or colour profile.

What screenshot beautifier is

A tool that places a screenshot on a background with padding, rounded corners, a shadow and, optionally, a browser or device frame, then exports it for a post, a slide or a product page. This one draws the whole image from the screenshot’s decoded pixels in your browser, so at the scale the screenshot was taken at its pixels go into the file unchanged.

What this tool does that others do not

  • Pixel for pixel at the scale it was taken

    A Mac writes 144 ppi into a Retina screenshot; the tool reads it as 2× and, exported at 2×, copies each of the screenshot’s pixels to one pixel of the file at a whole-pixel offset. Only the anti-aliased corner arcs are blended. At any other scale it is resampled once with Lanczos3 and the panel says by how much.

    The sample, a 1920 × 1200 capture at 144 ppi, exports at 2× as 2240 × 1600 with all 2,304,000 of its pixels in the browser frame and every one outside the two rounded corners unchanged. shots.so’s “1x” export of its default layout was 1920 × 1440 whatever went into it (measured 8 Oct 2026).

  • Covering that cannot be undone

    Frosted boxes are filled from the colours just outside the box plus a fixed grain, and solid boxes with one colour, so nothing in the file depends on what was underneath. A blur of the covered pixels is a known filter of them, and known filters can be partly reversed; pixelated text has been recovered by block matching.

    The unit test swaps every pixel under four boxes, overlapping and at the image edge, for different “text” and requires the output to be byte-identical. A 9 × 9 blur of the covered pixels fails it.

  • What the file carried, said per file, and none of it kept

    Location, camera details, the stored orientation and the colour profile are read from the file before it is drawn. The browser converts a Display P3 screenshot to sRGB as it decodes, and the download is encoded from pixels alone, so no EXIF, GPS or profile can reach it.

    The test input is a phone JPEG with GPS, a camera model and a Display P3 profile; its PNG and JPEG exports read back with no GPS, no camera, no profile, and 96 ppi per 1× of scale.

  • Frames drawn from numbers, sizes from the platforms

    Browser, window, phone and tablet frames are drawn at export time from a few measurements, so their edges are sharp at 3× and there is no device maker’s artwork to license. Fixed canvases are the social sizes from the platforms’ own pages, and the file is checked against each platform’s upload limit.

    Apple’s design-resources licence forbids redistributing its device images. YouTube’s 3840 × 2160 thumbnail has a 2 MB limit on mobile; the panel measures the real file against it before you download.

How to use it

  1. Add the screenshot

    Choose, drop or paste one or several. The panel shows the stored size, the pixel density the file declares and anything it carried, such as GPS.

  2. Cover anything private

    Drag across the preview to add a frosted box, or use Add a box and type its position. Switch a box to Solid for passwords and keys.

  3. Choose a frame, background and canvas

    Fit the screenshot keeps the scale free; a social canvas sets the size from the platform’s page. Padding, corners, shadow and a caption are under More options; read the caption’s contrast at the worst pixel behind it.

  4. Export at the screenshot’s own density

    The Export panel says whether the screenshot is placed pixel for pixel and shows the file’s bytes and written ppi before you download. Several screenshots download as one ZIP.

Worked examples

Real input, real figures.

A Retina screenshot for a launch post

You give it

The sample: 1920 × 1200 at 144 ppi, browser frame, Dusk gradient, padding from its size (80 px), exported at 2×.

You get

2240 × 1600 PNG with 192 ppi written, the screenshot pixel for pixel. Exported at 1× instead, it becomes 1120 × 800 and the screenshot is reduced to 50% with Lanczos3, which the panel states.

The same screenshot as a link preview

You give it

Canvas set to Link preview (Open Graph), 1200 × 630.

You get

The composition is scaled to fit inside 1200 × 630, so the screenshot is resampled once (to about 39% of its stored width) and the file is checked against the 8 MB limit Meta publishes.

Drawn from the pixels against a fixed canvas or a page capture

Aspectdsynshots.so, screenshot.rocks, MockUPhone
Screenshot pixelsCopied unchanged at the matching scale; otherwise one Lanczos3 resample, statedshots.so: a fixed canvas; screenshot.rocks: dom-to-image at the canvas’s CSS size; MockUPhone: Pillow resize then an OpenCV warp
Resolution in the file96 ppi per 1× written into PNG and JPEGNone written
Covering detailsSolid or frosted, independent of the covered pixelsscreenshot.rocks: one blur strength, no solid box
Device framesGeneric, drawn at exportNamed Apple, Google and Samsung devices
UploadsNone, including from batch and pastescreenshot.rocks’s browser extension posts the capture to its server
CostFree, no account, no watermarkpika.style and Xnapper watermark free exports

Guide

What it will not do

  • No perspective tilt or 3D device: turning the screenshot would resample every pixel, which is the thing this tool avoids.
  • No video or animated export, and no capture from a URL, which would need a browser on a server and would send your URL to it.
  • Text in the address bar and the caption uses your system’s interface font, so it can look slightly different on another computer.
  • A screenshot taken at 1.5× (a common Windows setting) has no whole export scale that matches it, so it is always resampled.

What happens to a screenshot’s pixels elsewhere

A Retina screenshot already has twice the pixels it needs for a 1× display. Exporting it at 2× needs no scaling at all, yet most beautifiers scale it anyway, because they draw a fixed canvas or take a picture of their own web page. Measured and read from source on 8 October 2026:

ToolHow the image is madeResolution in the file
shots.soIts “1x” export of the default layout was 1920 × 1440, whatever was placed in itNone
screenshot.rocksdom-to-image draws the editor at the canvas’s CSS size, with no scale settingNone
MockUPhonePillow resizes to the device screen, then OpenCV warps it onto the device photoNone
This toolCopied pixel for pixel at the matching scale; otherwise one Lanczos3 resample, stated96 ppi per 1×

Why a blur is not a redaction

Blurring or pixelating text replaces each pixel with a known mixture of its neighbours. That is a filter of the original, and a known filter can be matched or partly reversed: the open-source Depix recovers pixelated text by comparing blocks with pixelated samples of known text. So neither cover here reads the pixels it covers. A solid box is one colour; a frosted box is built from the colours just outside it, so it looks like a blur while holding nothing of what was there. The test for both is that changing everything under the box changes nothing in the file.

Fixed sizes, from the platforms’ own pages

CanvasSizeUpload limit
Link previews: Link preview (Open Graph)1200 × 6308.00 MB
LinkedIn: Shared link or post image1200 × 627Not stated
X: Post photo, 3:41200 × 16005.00 MB
Instagram: Post, square1080 × 1080Not stated
Instagram: Post, portrait 3:41080 × 1440Not stated
Instagram: Post, landscape 1.91:11080 × 566Not stated
Pinterest: Standard Pin, 2:31000 × 150020.00 MB
Discord: Server banner960 × 540Not stated
YouTube: Video thumbnail3840 × 21602.00 MB

The same sizes, with safe zones and a cropping tool for photographs, are in social media image sizes. For code rather than a screenshot, code to image draws the code as text.