GhostImageStudio

Compress images in bulk.

Drop a stack of images and they are all compressed on your device, zipped, and handed back — nothing uploaded.

Drop multiple images at once, pick one operation (DPI / resize / compress / convert / strip), and download all results as a ZIP. GhostImage processes files sequentially through a single Web Worker and reports per-file success or failure. Aggregate decoded-pixel budget capped at 200 MB to prevent mobile-tab out-of-memory crashes.

How it works

  1. 1

    Drop your images

    Drag multiple files onto the dropzone. GhostImage shows the file list with per-file size and dimensions.

  2. 2

    Pick the operation

    Choose one of DPI / Resize / Compress / Convert / Strip Metadata. Op-specific settings appear inline.

  3. 3

    Process and download

    Click Process. Per-file progress shows as each completes. When all done, a Download button produces a ZIP of all successful results — failures are listed by name with their reason.

Frequently asked questions

  • Why sequential and not parallel?

    v1 uses a single Web Worker singleton — postMessage queues serialize ops anyway. True parallelism would require multiple worker instances and is on the v1.1 list. The single-worker tradeoff is simpler lifecycle and lower mobile memory pressure.

  • Can I apply different settings per file?

    Not in v1. All selected files get one settings bundle. If you need per-file ops, run them one at a time on the leaf pages.

  • What's the maximum batch size?

    The aggregate decoded-pixel budget caps at ~200 MB (roughly 50 megapixels × 4 bytes). Drops exceeding the budget are refused before processing starts. Streaming-to-disk batches via the WICG File System Access API are on the v1.1 list.

  • What if one file fails?

    The batch keeps going. Failed files appear in the result list with a short reason code; successful files end up in the ZIP. R6 is structurally enforced — per-file errors are wrapped in a discriminated result so they never abort the loop.

Every GhostImage tool runs entirely in your browser. Your file is never uploaded — there's no upload endpoint to send it to.