Private \u00b7 in your browser

Compress JPG, PNG and WebP in the browser \u2014 no upload

Crush shrinks photos on this device with the Canvas API. You set JPEG or WebP quality, optionally cap width or height, and download a single file or a ZIP. There is no conversion server, no account, and no watermark on the pixels.

Most \u201cfree compressors\u201d send the original to a machine you do not control, then mail you a link. That is convenient until the photo is a passport scan, a client moodboard, or a kid\u2019s birthday. Crush never posts image bytes. After the page has loaded you can even turn the radio off and keep working.

JPEG is still the format email and printers understand. WebP is usually smaller at the same look in current browsers. PNG is the right pick when edges must stay sharp. JPG vs WebP explains when 8\u00d78 JPEG blocks show up and when WebP is wasted because the site still rejects it. How to compress walks the slider, iOS download, and batch ZIP.

Drop images here

JPG, PNG, WebP, BMP, GIF — they never leave this tab.

Options

Output format

PNG ignores quality (lossless). JPG/WebP use this slider.

How Crush compresses a photo

The pipeline is local: decode with createImageBitmap, fit to your max size, encode with canvas.toBlob. That is why the tool still works after you turn the radio off.

  1. 1

    Choose photos on this device

    Drop files or use the picker. Crush reads them in the tab. JPG, PNG, WebP, BMP, and the first frame of a GIF are accepted. Nothing is posted to a conversion API.

  2. 2

    Pick the output and the quality band

    JPEG is the safe send-anywhere format. WebP is usually smaller at the same look. PNG is lossless for screenshots and hard edges. The quality slider only applies to JPEG and WebP.

  3. 3

    Optionally cap width or height

    A 4000-pixel phone photo does not need to stay 4000 pixels for a web card. Aspect ratio is kept. Empty fields mean “do not resize.”

  4. 4

    Compress in the browser

    Canvas encodes a new blob. Progress is per file. A type mismatch or a memory guard shows an error on that row instead of failing the whole batch.

  5. 5

    Download one file or a ZIP

    No watermark and no account. On iOS, use Share if the browser blocks a raw blob download. Closing the tab drops the bitmaps from memory.

What Crush will and will not do

Crush re-encodes still images. It is not a HEIC converter (iPhone Camera rolls need a different codec), not a video compressor, and not an animation optimizer \u2014 a GIF is flattened to its first frame. It is also not an archival master: Canvas output drops GPS, camera serial, and most ICC complexity. Keep the original if you need print color or captions.

The useful quality band for photographs is roughly 75\u201385 on the JPEG/WebP slider. Below ~60 you buy file size with blocky skies and ringing around type. Screenshots should stay PNG or go to WebP, not JPEG. Resizing a 12-megapixel still down to the width you actually display often saves more bytes than chasing another five points of quality. Limits are this device\u2019s memory, not a daily quota we invented.

Browsers: current Chrome, Edge, Firefox, and Safari, including iOS. WebP encode is probed; if this engine cannot write WebP, Crush falls back to JPEG so you still leave with a file. Magic-byte checks reject random documents that were renamed to .jpg. If a row errors, the rest of the batch still runs.

People use Crush to fit photos into a 2 MB application form, to stop a CMS from timing out on a 9 MB phone JPEG, to send a lookbook over WhatsApp without the messenger crushing it a second time, and to strip location as a side effect of re-encoding before a public post. Use cases spells those out. If something breaks, contact has the operator email \u2014 there is no server copy of your files to \u201cretrieve.\u201d

FAQ

Does Crush upload my photos to a server?

No. Crush never posts image bytes to an API. After you pick files, the browser reads them with FileReader / createImageBitmap, draws them onto a Canvas, and encodes a new blob with canvas.toBlob. That work happens in this tab’s memory. Closing the tab discards the bitmaps. Hosting may log that you requested the HTML page (IP, user-agent), which is normal for any public site, but those logs do not contain your photos. You can load Crush, disconnect from the network, and still compress files that are already on the device.

Do I need an account or email to compress images?

No signup, no magic link, no “free 5 images then paywall.” Crush is a single-purpose page: choose files, set quality and optional max width or height, tap Compress, download. There is no cloud quota because there is no cloud job. If a batch fails it is almost always this device running out of RAM on very large phone photos, not a product limit we invented. We do not store a user id, and we do not email you a download link.

Will Crush stamp a watermark on the result?

Never. The output file is whatever the browser encoder produced: JPG, PNG, or WebP pixels only. We do not composite a logo, we do not append EXIF “processed by Crush,” and we do not wrap the download in a branded ZIP name unless you choose batch ZIP (the archive is named for convenience, the images inside are unstamped). If you need a mark for a client, add it in an editor. This tool’s job is smaller files, not branding.

Which formats can I drop in, and what comes out?

Typical inputs: JPEG (.jpg / .jpeg), PNG, WebP, BMP, and GIF (first frame only — Crush is not an animation compressor). Output is JPEG, PNG, or WebP, depending on what you pick and what this browser can encode. If WebP encoding is missing on an older engine, Crush falls back to JPEG so you still get a download instead of a silent failure. HEIC/HEIF from iPhone Camera is a different codec; use HEIC Local for that conversion, then bring the JPEG here if you still need a smaller file.

When does JPEG look blocky, and what quality should I use?

JPEG splits the picture into 8×8 blocks and throws away high-frequency detail. Below about 50–60 on Crush’s slider you start to see squares in skies, ringing around sharp type, and muddy skin. For photos destined for email or a CMS, 75–85 is the useful band: most people cannot tell them from the original at phone size, and the file often drops by half or more. Screenshots and UI with thin lines should not be JPEG at all — use PNG or WebP. If you already see blocks, raising quality cannot invent lost detail; re-export from the original instead of crushing a crushed JPEG again.

When should I pick WebP instead of JPEG?

WebP (lossy) usually beats JPEG at the same visual quality because it spends bits more efficiently on edges. Use WebP when the destination actually accepts it: modern Chrome, Edge, Firefox, recent Safari, and most current CMSs. Use JPEG when you are sending to a printer portal, an old Outlook client, or a form that still rejects .webp. Lossless PNG remains the right pick for screenshots, logos with hard edges, and anything that must survive many re-exports. Crush lets you try the same source at JPEG 80 and WebP 80 and compare the two file sizes before you commit to a ZIP.

Why does a PNG sometimes barely shrink — or even grow?

PNG is lossless. Crush re-encodes the bitmap and drops extra chunks (text comments, large metadata) which often trims screenshots. A photo saved as PNG is already a poor fit: the format was not designed for camera noise, so the file stays huge. Converting that photo to JPEG or WebP is the real win. Conversely, a tiny 24-color icon that was already run through a PNG optimizer may grow a few hundred bytes after Canvas round-trip because browsers do not use the same filters as oxipng. If the output is larger, keep the original or switch format instead of forcing PNG.

Can I resize and compress in one pass?

Yes. Set a max width, a max height, or both. Crush keeps aspect ratio and fits the image inside that box (it does not stretch). This matters more than the quality slider for 12-megapixel phone photos headed to WhatsApp, a slide deck, or a product grid that only shows 800 CSS pixels. Encoding a 4000-pixel JPEG at quality 80 still wastes bytes if you display it at 640. Leave both fields empty to keep the original pixel size. Crush will not upscale a small image to “fill” the box.

Is there a file-count or daily limit?

We do not meter downloads. The ceiling is this device: decoding many 20-megapixel photos at once can hit Safari or Chrome memory guards, and Crush will refuse a file that looks unsafe rather than freeze the tab. On a phone, compress in batches of a handful instead of dropping a whole camera roll. On a laptop, larger batches and ZIP are fine. If a single file fails, try lowering max dimensions first — a 2048-pixel cap is enough for almost any web use and uses far less RAM than a 48-megapixel original.

Is the ZIP still private if I download all files at once?

Yes. The archive is built in the tab with JSZip from the blobs already in memory. Nothing is uploaded to zip “in the cloud.” The ZIP is only a container so you do not tap Download twenty times. iOS Safari sometimes prefers the Share sheet for a single blob; Crush uses that path when a raw download would vanish. The photos inside the ZIP are the same unwatermarked files you would get one-by-one.

Does Crush work on iPhone and iPad?

Yes, as a web app in Safari (and other iOS browsers that use WebKit). Drag-and-drop is awkward on phones, so use the file picker. After compress, if the download does not appear in Files, use the Share sheet Crush offers and save the image to Photos. iOS may apply EXIF orientation when creating the bitmap; Crush draws the upright pixels so you do not get a sideways JPEG. Very large Live Photos are still two assets — Crush compresses the still, not the video clip.

Does Crush keep EXIF, GPS, or color profiles?

Usually no. Canvas encoding produces a fresh file. GPS coordinates, camera serial, and most metadata do not survive toBlob. That is useful if you are posting a photo and do not want a map pin attached — but it also means you should not use Crush as an archival master. Keep the original if you need IPTC captions or a print ICC profile. If your only goal is to strip location, know that Crush does that as a side effect of re-encoding, not as a dedicated redaction tool.

Can I compress animated GIFs or video?

GIF: only the first frame is drawn to canvas, so you will get a still. Video (MP4, MOV) is out of scope — Crush is an image compressor, not a transcode farm. For HEIC bursts and Live Photo stills, convert the still first, then crush it. Sending a movie into the dropzone will be rejected by the type guard rather than silently producing a broken JPEG.

Who runs Crush and how do I report a broken file?

Crush is a free local-first tool from Ultimatum, a brand-marketing studio. Write to ultaultimatum@gmail.com with the browser name, device, input format, and whether the failure was encode, download, or ZIP. Do not attach private photos unless you accept that email is not an end-to-end vault. We cannot restore a file you already closed out of the tab — there is no server copy. Product questions that are already answered on How to and JPG vs WebP will get a pointer to those pages.

Why does a photo still look bad after I send it in WhatsApp?

Because the chat probably recoded it as a photo. Crush cannot switch WhatsApp’s encoder off. Start from the camera original, cap the long edge around 1600 px, JPEG 75–85, then attach the result as a document / file when the app allows. Saving an image from an old bubble and running that through Crush will not restore detail. Full path: the WhatsApp guide.

Gmail turned my photos into a Drive link. Did Crush fail?

No. Gmail does that when the message attachments go over about 25 MB in total. MIME encoding also inflates the files. Cap width, encode JPEG 75–85, add the new sizes, and leave headroom. Crush does not send mail and does not create a Drive link. Details: the email guide.

I tapped download on iPhone and nothing landed in Files. Where is the picture?

Safari often ignores a raw blob download. Use Share on the result and Save Image to Photos or Save to Files. Then check the new file’s size so you do not attach the original by mistake. Encode fewer 48MP stills at a time if the tab reloads. Step-by-step: the iPhone guide.

Should I pick WebP for WhatsApp or for a visa form?

Usually no. Many chats and almost all bureaucratic uploaders still want JPEG. WebP is the smaller file on a modern website that already serves WebP. If the destination list says .jpg, obey the list. Compare one hero on the quality page before you batch.

Need a brand people actually want?

Crush is a free tool from Ultimatum. We also build brand identity, private utilities, and $10k websites.

Ultimatum hub