Parallel background workers
Encoding runs off the main thread across several workers, so the page stays responsive with 50 images in the queue.
Drop up to 50 photos, choose the format, size and weight, and convert when you are ready. Nothing is uploaded and nothing starts without you pressing the button.
Drop your images here
Up to 50 at a time. You can also paste from the clipboard.
JPG, PNG, WEBP, AVIF, GIF, BMP, SVG, TIFF, HEIC
Files wait here: conversion only starts when you press Convert.
Three steps, and none of them start on their own.
They are decoded once and wait in the queue. Nothing is converted and nothing leaves your device.
Format, quality, size, rotation, background. Or one preset and done.
You get the weight, the dimensions and an SSIM score of what the conversion cost.
Encoding runs off the main thread across several workers, so the page stays responsive with 50 images in the queue.
Every encoder is tested with a real two-pixel encode at startup. A browser that cannot write AVIF will not offer it.
An SSIM score against the source tells you what the compression actually cost, instead of only how much you saved.
Say "under 500 KB" and the quality is found by bisection, up to 8 encodes, to land just under the limit.
Decoding, resizing and encoding all happen in your browser. No server sees your photos, and it works offline.
Up to 50 images at once, and any of them can break away with its own format and size.
Input: JPG, PNG, WEBP, AVIF, GIF, BMP, SVG, TIFF and HEIC. EPS and camera RAW need a PostScript interpreter and per-camera tables, so they are not accepted rather than silently returned as a PNG.
The best size-to-quality trade-off for the web today, with transparency. Supported everywhere that matters.
Smaller still at the same quality, but only some browsers can write it. If yours cannot, the button is disabled.
The universal photographic format. No transparency, so you pick the background colour that goes underneath.
Lossless with transparency. The quality slider does nothing here, and that is why it is greyed out.
A real multi-size icon: 16, 32, 48, 64, 128 and 256 px in a single file, centre-cropped to a square.
One page fitted to the image, with a JPEG inside at the quality you chose.
Uncompressed RGBA for printing and archiving. Also accepted as input.
A wrapper: the raster is embedded inside an SVG. It does not trace vectors — no browser tool can — but it works wherever only .svg is accepted.
No. Decoding, resizing and encoding all happen inside your browser using the canvas and web workers. Nothing is sent to a server, and once the page has loaded it works with no connection at all.
Because your browser has no encoder for them. Browsers do not report this: asking for a GIF or a HEIC gives you back a PNG with the type quietly changed. At startup we encode two pixels into each format and check what actually comes out, so you are only offered what works.
No, and it no longer pretends to. No browser can write HEIC, EPS needs a PostScript interpreter and RAW is a different sensor format per camera model. HEIC and TIFF are accepted as input; EPS and RAW files are rejected with a message instead of coming back as a mislabelled PNG.
It is a similarity score between the converted image and the source, from 0 to 1. Above 0.98 the difference is very hard to see; below 0.95 artefacts start to show on photographs. It exists because "saved 68%" only tells you the flattering half of the story.
That is deliberate. Dropping a file only decodes it and puts it in the queue. The conversion — the expensive part — waits for you to press Convert, so you set everything up first instead of racing a preview that keeps restarting.
Any big reduction does, but how much depends on the engine. Some browsers reduce in one pass with a 2x2 kernel and throw the rest of the pixels away, which shows up as jagged edges. FormatFlow measures that at startup — it downscales a test pattern and compares it against an exact average — and only falls back to halving the image step by step when the browser needs it. Where the browser already filters properly, the extra passes would cost time and change nothing, so they are skipped. You can also add a sharpening pass on top.
Because the image is decoded with createImageBitmap and the EXIF orientation applied there, once. The old approach loaded the file into an <img> element, where some browsers apply the orientation tag and others do not, and the canvas ended up with the unrotated frame.
Fifty. They are encoded across several background workers at the same time, and each one can carry its own format and size if you switch on the per-image override.
Convert images to WEBP, AVIF, JPG, PNG, ICO, PDF, TIFF or SVG in your browser. Batch of 50, target file size, real multi-size ICO, HEIC and TIFF input, and an SSIM quality score. Nothing is uploaded.
FormatFlow converts images between JPG, PNG, WEBP, AVIF, ICO, PDF, TIFF and SVG entirely inside your browser. It reads HEIC from iPhones and TIFF as input, resizes by scale, long edge or exact dimensions, rotates, flips, sets the background colour for formats without transparency, and can hit a maximum file size by searching for the right quality.
What it will not do is lie to you. Formats your browser cannot encode are shown disabled instead of returning a PNG with the wrong extension, EPS and camera RAW are rejected outright, and every result comes with its weight, its dimensions and an SSIM score of the quality it cost. Nothing is uploaded: the whole pipeline runs on your machine.
No. Decoding, resizing and encoding all happen inside your browser using the canvas and web workers. Nothing is sent to a server, and once the page has loaded it works with no connection at all.
Because your browser has no encoder for them. Browsers do not report this: asking for a GIF or a HEIC gives you back a PNG with the type quietly changed. At startup we encode two pixels into each format and check what actually comes out, so you are only offered what works.
No, and it no longer pretends to. No browser can write HEIC, EPS needs a PostScript interpreter and RAW is a different sensor format per camera model. HEIC and TIFF are accepted as input; EPS and RAW files are rejected with a message instead of coming back as a mislabelled PNG.
It is a similarity score between the converted image and the source, from 0 to 1. Above 0.98 the difference is very hard to see; below 0.95 artefacts start to show on photographs. It exists because "saved 68%" only tells you the flattering half of the story.
That is deliberate. Dropping a file only decodes it and puts it in the queue. The conversion — the expensive part — waits for you to press Convert, so you set everything up first instead of racing a preview that keeps restarting.
Any big reduction does, but how much depends on the engine. Some browsers reduce in one pass with a 2x2 kernel and throw the rest of the pixels away, which shows up as jagged edges. FormatFlow measures that at startup — it downscales a test pattern and compares it against an exact average — and only falls back to halving the image step by step when the browser needs it. Where the browser already filters properly, the extra passes would cost time and change nothing, so they are skipped. You can also add a sharpening pass on top.
Because the image is decoded with createImageBitmap and the EXIF orientation applied there, once. The old approach loaded the file into an <img> element, where some browsers apply the orientation tag and others do not, and the canvas ended up with the unrotated frame.
Fifty. They are encoded across several background workers at the same time, and each one can carry its own format and size if you switch on the per-image override.
image converter, convert HEIC to JPG, PNG to WEBP, JPG to AVIF, WEBP to PNG, TIFF to JPG, image to ICO, favicon generator, image to PDF, batch image converter, resize images online, compress images to a target size, offline image converter, free image converter no upload