Guides

Export resolution, how far you can push the scale

What the export scale multiplies, why a 4x export cannot restore detail from a large upload, and when Safari's canvas area limit locks a scale.

Updated 25 September 2026Next review 20 November 2026

Sources

Raising the export scale to 4x feels like it should give you four times the sharpness. It does not. Once you know what the scale multiplies, it also becomes clear where raising it stops doing anything.

Output size is canvas size times scale

The scale multiplies the size of the working canvas, and the canvas size depends on the format you picked.

Canvas size per format: all 18 formats, named as they appear in the format panel
FormatCanvas
Single1080 × 1080
Multi-device, Responsive (3), Desktop, Full lineup1920 × 1080
Diagonal stagger, Repeating grid, Diagonal cascade, Diagonal grid 1, Diagonal grid 2, Flat-lay, Laptop duo, Mixed phone trio1200 × 1200
Phone trio, Browser window, Tablet trio, Browser + phone, Tablet + phone1600 × 1000

That table lists all 18 formats, with none left out. Since the subject of this article is what the scale multiplies, the full list earns its space here rather than a few representative examples. Whichever format you picked, it is on one of those four rows.

Those 18 are every format in the list, and none of them uses a portrait canvas.

Exporting Single at 2x gives 2160 × 2160. The output size shown in the export panel is that calculation.

Your upload has already been shrunk

This is the part that matters. An uploaded screenshot with a long edge over 2000 pixels is scaled down to 2000 pixels before you work with it. That keeps memory use in check during editing, and the aspect ratio is preserved.

So uploading a 6000 pixel screenshot and exporting at 4x does not bring the original detail back. What gets enlarged is the 2000 pixel bitmap. On top of that, the bitmap does not fill the canvas. It sits inside the screen area of the device. In the Single format the screen area is smaller than the canvas, so the pixels actually spent on your screenshot are far fewer than the output size suggests.

The same 2000 pixel cap applies to a background image. A background covers the entire canvas rather than a screen area, so the loss from enlargement is greater. Export a 1920 × 1080 canvas at 2x and a 2000 pixel original has to fill 3840 pixels of width.

The practical conclusion: 2x covers most uses, and 3x or higher earns its place only when the image will be enlarged, as in print (inference, the right scale for a given use is not something the code decides).

Sometimes a scale is locked

Apple's browsers cap canvas area. When the output area passes that cap, the result is a blank image. Scale buttons that would cross the cap are locked before you press them.

That lock exists because the compositing and the export both finish inside the browser rather than on a server. Your upload is never sent anywhere, and in return the canvas that builds the result has to stay under the ceiling the browser sets.

The table below applies that area limit to sizes worked out from the code values.

(calculated) Output area per canvas and scale
Canvas2x3x4x
1080 × 10802160 × 2160 · 4.7M ✓3240 × 3240 · 10.5M ✓4320 × 4320 · 18.7M ✗
1200 × 12002400 × 2400 · 5.8M ✓3600 × 3600 · 13.0M ✓4800 × 4800 · 23.0M ✗
1600 × 10003200 × 2000 · 6.4M ✓4800 × 3000 · 14.4M ✓6400 × 4000 · 25.6M ✗
1920 × 10803840 × 2160 · 8.3M ✓5760 × 3240 · 18.7M ✗✗

The check marks and crosses come from substituting the area limit of 16,777,216 described in the external fact section below.

The lock is decided from the browser user agent string. It covers every browser on iPhone and iPad, and Safari on any platform. Chrome, Edge, and Firefox on macOS, and Chromium browsers on Windows and Android, are not covered, so all four scales stay open there. The test is not Apple hardware. It is an iOS device or Safari according to the user agent.

If the image conversion step returns an empty result, it retries once. If the retry is also empty, you are told to lower the scale. Other failures, such as a browser that cannot composite the canvas at all, are reported separately and are not retried.

Transparency and file formats

A transparent background works with PNG and WebP only. JPG cannot carry transparency at all, so the chosen background color is laid down first and the composite goes on top of it. Turning transparency off and exporting PNG fills the background the same way.

The export hides the editing tool layers. Selection handles and alignment guides never reach the result.

Related reading

In short

  • Output size is the canvas size of the format times the scale, and the scale runs from 1x to 4x.
  • Uploads are scaled to a 2000 pixel long edge, so raising the scale does not recover detail from the original.
  • On Apple's browsers a high scale can be locked by the canvas area cap. Edge length is not part of the test.
  • Pick PNG or WebP when you need a transparent background.

External fact: browser canvas limits

What the sources confirm

WebKit caps area only. There is no cap on width or height. The source comment says so.

Firefox limits width/height to 32767 pixels... We limit by area instead, giving us larger maximum dimensions, in exchange for a smaller maximum canvas size.Source W1

The iOS area cap has changed once since it was introduced.

How the iOS canvas area cap changed
PeriodiOS area capSource
2015-06-16 to 2024-03-154096 × 4096 = 16,777,216W3
2024-03-15 to now8192 × 8192 = 67,108,864W2
  • Other platforms, meaning desktop, sit at 16384 × 16384 = 268,435,456 (W1)
  • Apple's developer documentation does not carry these numbers. They appear never to have been documented officially, and the only evidence is the WebKit source and the bug tracker.

Where our implementation differs, stated plainly

This service checks area only, the same way WebKit does, as of 2026-08-22. Edge length is not part of the test.

The value we apply is still the 2015 one, 16,777,216. The cap rose to 67,108,864 in March 2024, but the lower number is kept as a safe floor so that older iOS, meaning 17 and below, does not hand back a blank image. On a recent iPhone that makes us more conservative than the browser actually is. Raising it means first deciding the oldest OS we support.

How to read the markers in this article
Kind of basisMarkerWhat it means
Confirmed in codeno markerThe evidence table names the file and constant
Worked out from code values(calculated)Derived by substituting the constants, the table itself is not in the code
Reading with no basis in code(inference)The author's explanation, not a verified fact
External factown sectionSet by browser vendors, so our code cannot confirm it

What this article is based on

What this article is based on
StatementWhere it comes from
Output size is canvas size times scalethe outW and outH calculation in panels/ExportPanel.tsx, toCanvas({ pixelRatio }) in engine/exportImage.ts
Canvas size per format, all 18 formatsthe canvas and status fields of each preset in presets/presets.data.ts (all 18, every one with status 'active', grouped by canvas value)
The format list has 18 entries in total and none uses a portrait canvasPRESETS in presets/presets.data.ts (18 entries) and their canvas values: 1080 × 1080, 1200 × 1200, 1600 × 1000, 1920 × 1080
Scales run from 1x to 4xeditorConstants.EXPORT_SCALES
Uploads are downscaled to a 2000px long edge, ratio preserved, high quality resizeeditorConstants.WORK_MAX_EDGE, engine/uploadImage.ts
Older browsers that cannot resize keep the originalthe catch branch in engine/uploadImage.ts
Compositing and export finish inside the browser, with nothing uploadedcreateImageBitmap in engine/uploadImage.ts, toCanvas then canvas.toBlob in engine/exportImage.ts (no fetch or transfer code anywhere in features/editor)
Scales that would cross the limit are lockedengine/exportCaps.ts, panels/ExportPanel.tsx
One retry on failure, then guidancecanvasToBlobOnce in engine/exportImage.ts
Transparency is PNG and WebP only, JPG composites onto the background colorcanTransparent = format !== 'jpg' in panels/ExportPanel.tsx, the transparent and flattenColor branches in engine/exportImage.ts
Editing tool layers are excluded from the exportlayers.ui.hide() in engine/exportImage.ts
The canvas area limit the app applies, 16,777,216, tested on area aloneeditorConstants.SAFARI_MAX_AREA, computeExportCaps in engine/exportCaps.ts (edge length is not tested; the value comes from W1 and W3 rather than from our code, and the gap against current WebKit is stated in the external fact section)
The right scale for a given use, meaning 2x is enough(inference), no basis in code
The check marks and crosses in the scale table(calculated) from the canvas sizes and the area limit, the table is not in the code

Related guides