Free Image Tools & Converters
Convert between JPG, PNG, WebP, AVIF, GIF, BMP, TIFF, ICO, HEIC and SVG, plus compress, resize, and rotate images — all directly in your browser, with no per-file limit and no daily quota. Batch-convert fifty photos at once, or compress a single 4K screenshot down to under 100 KB — either way, nothing is uploaded, and there's no account to create.
The reason server-based image tools throttle batches and cap file sizes is cost: every image you upload burns their CPU and bandwidth, so they ration it. Moyang's image codecs — mozjpeg, oxipng, and WebP/AVIF encoders, all compiled to WebAssembly — run on your own device, so processing a batch of 50 photos costs exactly the same as processing one: nothing. That's also why there's no artificial "free tier" cutoff; the constraint you'll actually hit is your device's own memory, not a paywall.
How client-side image processing differs from server-based tools
Every codec here is a real, well-tested library, not a from-scratch reimplementation: jSquash ports mozjpeg (JPEG) and oxipng (PNG) to WebAssembly, the browser's own encoders handle WebP and AVIF where available, libheif-js decodes iPhone HEIC photos, and a small set of hand-written readers cover formats browsers don't natively understand — ICO, TIFF, legacy BMP, and GIF frame extraction.
Batch processing runs in a background Web Worker, so the tab stays responsive while dozens of files convert — you can keep scrolling, or start a second batch on another tool, while the first is still running. Quality is fully in your hands rather than an opaque server-side preset: JPEG, WebP, and AVIF conversions expose a real quality slider, and Compress Image adds a target-file-size mode — pick 100 KB, 200 KB, 500 KB, or 1 MB, and the tool searches for the quality and downscale combination that actually hits it — something most server-based tools don't offer at all.
Being upfront about the limits: decoding is capped at 100 megapixels per image (roughly a 12,000×8,000 photo), high enough for any consumer camera or phone, but there specifically to stop a corrupt or malicious file from silently consuming gigabytes of memory before you even see an error. HEIC photos shot in Burst or Live Photo mode contain multiple images inside one file; only the primary photo converts, and the result tells you when that happened rather than silently guessing. There's no RAW camera format support (.CR2/.NEF/.ARW) — those need dedicated demosaicing libraries this project doesn't ship yet. Animated GIF and WebP conversions to a still format (JPG/PNG) convert the first frame only, flagged in the result — turning an animation into a single still image is the point of that conversion, but turning an animation into a video isn't something these tools do.
In practice, that covers the everyday image chores: converting an iPhone HEIC library to JPG before uploading to a site that rejects HEIC, shrinking a batch of product photos to a marketplace's exact size limit, converting a screenshot to WebP for a faster-loading blog post, generating a favicon package from a logo, or stripping GPS and EXIF metadata from a photo before sharing it publicly.
FAQ
- Is there a limit on how many images I can convert at once?
- No batch-size limit. Each individual image is capped at 100 megapixels — well above any real camera photo — specifically to stop a corrupt or malicious file from silently consuming memory before you see an error.
- Can I compress an image to an exact file size?
- Yes — Compress Image has a target-size mode with 100 KB, 200 KB, 500 KB and 1 MB presets; it searches for the quality and downscale combination that hits your chosen size.
- Why does my HEIC photo only convert to one image?
- iPhone Burst and Live Photos store several images inside a single HEIC file. Only the primary photo converts, and the result flags when that happened rather than silently picking one for you.
- Do you support RAW camera files (.CR2, .NEF, .ARW)?
- Not yet — RAW formats need dedicated demosaicing support this project doesn't ship.
- Are my images uploaded to a server?
- No. All conversion, compression and resizing happens locally in your browser via WebAssembly codecs — nothing is sent anywhere.