The working copy for large images
- The browser decodes the original once, in WebAssembly, and downscales it to a deterministic working copy. Its longest side is
workingCopy.maxSide(2048 by default). Up tolimits.maxClientMegapixels(16 by default) the browser also keeps the full image; above it, the browser keeps only the working copy. An original abovelimits.maxClientBytes(50e6 by default) does not load. - Every edit previews on the working copy through the same WASM core.
- Export or download renders in the browser when the full image is resident.
- Above the megapixel limit the browser cannot export.
export()anddownload()fail withNOT_RESIDENT, and the element disables its Export and Download buttons. Your application renders the original with@sealpixel/renderinstead.
limits.maxClientMegapixels, and 2048 px is the default of workingCopy.maxSide.The editor builds the working copy itself and never sends the image to a server.
Above the limit
The edit log describes the full resolution, whatever the browser holds. Take it from the editor:
ts
const { log, index } = editor.getEditLog();Send the original and { log, index } to your server in the way your application works. There, createRenderer renders the full resolution with the same core, and the hash matches a browser export of the same image. The log's source.hash is the sha256 of the original the editor loaded, so the renderer refuses a different file.
estimateMemoryMB(width, height) tells you the memory a render needs. See Render on your server for the contract, and Edit in the browser, render on your server for the whole flow.