Privacy
Your images are never uploaded. Not to us, not to a third party, not temporarily. This page explains why that is a structural fact rather than a promise.
What happens to an image you open
When you drop a file onto a tool, your browser reads it from disk, decodes it into memory, and draws it onto a canvas element. When you export, the browser encodes that canvas back into a PNG, JPEG or WebP and hands the result to your downloads folder. ZIP archives are assembled in memory by the same tab.
At no point in that sequence is there a network request. There is no upload endpoint in this application, no image-processing API, no server action that touches pixels, and no third-party editing service. If you disconnect from the internet after the page has loaded, every tool still works.
How to verify it
- 1. Open your browser’s developer tools and select the Network tab.
- 2. Load an image into any tool and export it.
- 3. Watch the request list. You will see the page’s own scripts and fonts, and nothing carrying your image. There is no request whose payload is measured in megabytes.
- 4. Or simply switch to aeroplane mode after the page loads and use the tool anyway.
This is also enforced in our own test suite: an automated browser test fails the build if any tool causes a network request carrying image data.
What is measured
Social Toolshed records privacy-safe usage analytics so we know which tools are worth maintaining. The complete list of events and the complete list of values each one can carry is below — it is generated directly from the schema the code uses, so it cannot drift out of date.
tool_viewed
- platform
- youtube | twitch | discord | instagram | tiktok | linkedin | x | pinterest | facebook
- asset
- route slug, e.g. banner-size
- studio
- editor | safe-zone | compressor | circle-crop | collage | carousel | layout | mockup | pack
image_loaded
- inputFormat
- png | jpeg | webp | unknown
- sizeBucket
- under-100kb | 100kb-512kb | 512kb-2mb | 2mb-10mb | over-10mb
- pixelBucket
- small | medium | large | very-large
- hasAlpha
- yes | no
crop_changed
- mode
- fill | fit | free
- input
- drag | keyboard | zoom | reset
safe_zone_toggled
- visible
- yes | no
export_completed
- platform
- youtube | twitch | discord | instagram | tiktok | linkedin | x | pinterest | facebook
- asset
- route slug, e.g. banner-size
- format
- png | jpeg | webp
- sizeBucket
- under-100kb | 100kb-512kb | 512kb-2mb | 2mb-10mb | over-10mb
- limit
- ok | close | over | unknown
batch_export_completed
- kind
- size-ladder | carousel | collage | layout | pack
- countBucket
- 1 | 2-5 | 6-12 | 13+
tool_error
- code
- unsupported-type | animated-input | too-large | too-many-pixels | decode-failed | encode-failed | zip-failed | unknown
related_tool_clicked
- from
- route slug, e.g. banner-size
- to
- route slug, e.g. banner-size
That is everything. No filenames, no image dimensions of your specific file beyond a coarse bucket, no pixel data, no pasted text, no account identifiers. The analytics layer validates every event against that schema before sending it, and discards anything that does not match exactly — so a value that is not on that list cannot be recorded even by mistake.
What is stored on your device
One thing: your most recent focal point — two numbers between 0 and 1, plus a zoom level — kept in sessionStorage so that moving between tools does not lose your composition. It contains nothing derived from your image, and your browser deletes it when you close the tab. No cookies are set by this site for tracking, and there is no account system.
Third parties
The site is hosted on Vercel, which processes standard request logs, and uses Vercel Analytics for the events listed above. Web fonts are self-hosted at build time rather than fetched from a font CDN at runtime. No advertising, tracking or session-recording scripts are loaded.
Related
The methodology page explains how the dimensions themselves are sourced and where they are uncertain.