How to compression level optimizer online
- Step 1Open the optimizer (Pro) — Go to /archive-tools/compression-level-optimizer. Because
minTieris pro, Free accounts see an upgrade overlay rather than the dropzone — sign in on a Pro, Pro+Media or Developer plan to get the file picker. - Step 2Drop your files — Drag in one file or select several at once — the picker has
multipleenabled. All selected files are bundled into one ZIP for the benchmark, so add everything you'd ship together. - Step 3Check the tier size limit — Each file must fit your per-job byte cap: 500 MB on Pro, 2 GB on Pro+Media and Developer. Oversized files are rejected before any compression starts.
- Step 4Run the benchmark — Click Process. The tool compresses your input four times — levels 1, 3, 6 and 9 — and times each pass. For large inputs this is four full DEFLATE passes, so expect roughly 4x a single zip's wall-clock time.
- Step 5Read the metrics — The result shows two chips (Best level and Best size) plus a JSON block:
originalSize, aresultsarray (one row per level withsize,timeMs,ratio), andbestLevel. Copy the JSON if you want to paste it into a ticket or spreadsheet. - Step 6Download the winner — Click Download. You receive the smallest ZIP produced across the four levels — the bytes of the best archive, ready to ship. The on-screen JSON tells you which level produced it and at what time cost.
What the tool actually does (and doesn't)
Grounded in lib/archive/archive-processor.ts (optimizeLevels) and lib/archive/archive-tool-schemas.ts. Verify any claim here against the code before relying on it.
| Aspect | Reality | Notes |
|---|---|---|
| Levels tested | 1, 3, 6, 9 | A fixed array [1, 3, 6, 9] — not all of 1–9. Levels 2, 4, 5, 7, 8 are not benchmarked. |
| Engine | fflate.zipSync | Pure DEFLATE/ZIP. No zip.js and no libarchive are involved in this tool — so no 7z/rar/xz/bz2 output. |
| Input | One or more raw files | isMultiFile is on. Multiple files are packed into a single ZIP and benchmarked as one bundle. |
| UI options | None | The option schema is empty ([]). There is no level slider, no format selector, no password field, no presets. |
| On-screen output | JSON metrics | originalSize, results[{level,size,timeMs,ratio}], bestLevel, plus Best level / Best size chips. |
| Download | Smallest ZIP | The Download button delivers the bytes of the smallest archive, not the JSON report. |
| Minimum tier | Pro | Free accounts get an upgrade overlay instead of the tool. |
Tier limits for the archive family
From lib/tier-limits.ts (archive family). Per-job file-size cap and per-archive entry cap both apply.
| Tier | Max file size | Max entries / archive | Files per job |
|---|---|---|---|
| Free | — (tool locked) | — | Upgrade required |
| Pro | 500 MB | 50,000 | 20 |
| Pro+Media | 2 GB | 500,000 | 100 |
| Developer | 2 GB | 500,000 | unlimited |
Cookbook
Real benchmark scenarios with the kind of JSON the tool emits. Sizes are representative; the shape of the output is exactly what optimizeLevels returns.
Source-code folder: level 9 barely beats level 6
Text-heavy input compresses well, but the gap between 6 and 9 is usually tiny while the time cost is not. This is the canonical reason level 6 is the default everywhere.
Input: 1 file (app.bundle.js, 4.0 MB of JS)
{
"originalSize": 4194304,
"results": [
{ "level": 1, "size": 1310720, "timeMs": 38.5, "ratio": "68.8%" },
{ "level": 3, "size": 1153434, "timeMs": 61.2, "ratio": "72.5%" },
{ "level": 6, "size": 1042022, "timeMs": 142.7, "ratio": "75.2%" },
{ "level": 9, "size": 1027604, "timeMs": 268.9, "ratio": "75.5%" }
],
"bestLevel": 9
}
Takeaway: level 9 wins by 0.3% but takes ~2x level 6's time.Already-compressed media: level barely matters
A JPEG is already entropy-dense, so DEFLATE has almost nothing to remove. All four levels land within a rounding error of the original size.
Input: 1 file (photo.jpg, 3.0 MB)
{
"originalSize": 3145728,
"results": [
{ "level": 1, "size": 3142180, "timeMs": 9.1, "ratio": "0.1%" },
{ "level": 3, "size": 3141902, "timeMs": 11.4, "ratio": "0.1%" },
{ "level": 6, "size": 3141744, "timeMs": 18.0, "ratio": "0.1%" },
{ "level": 9, "size": 3141702, "timeMs": 22.7, "ratio": "0.1%" }
],
"bestLevel": 9
}
Takeaway: don't pay for level 9 on media — store-level is the honest choice.Multiple files in one job
Several files dropped together are packed into a single ZIP, and the benchmark measures the whole bundle. entryCount equals the number of files you dropped.
Input: 3 files (report.csv 2 MB, notes.txt 0.5 MB, data.json 1 MB)
{
"originalSize": 3670016,
"results": [
{ "level": 1, "size": 901120, "timeMs": 30.2, "ratio": "75.4%" },
{ "level": 3, "size": 845230, "timeMs": 48.9, "ratio": "77.0%" },
{ "level": 6, "size": 798144, "timeMs": 96.4, "ratio": "78.3%" },
{ "level": 9, "size": 790012, "timeMs": 181.1, "ratio": "78.5%" }
],
"bestLevel": 6
}
Note: bestLevel here is 6 — level 9 saved only 8 KB more.Empty / zero-byte input
A 0-byte file produces a valid (tiny) ZIP, but ratio can't be computed against a zero original — the helper returns an em-dash placeholder.
Input: 1 file (empty.txt, 0 bytes)
{
"originalSize": 0,
"results": [
{ "level": 1, "size": 118, "timeMs": 0.3, "ratio": "\u2014" },
{ "level": 3, "size": 118, "timeMs": 0.2, "ratio": "\u2014" },
{ "level": 6, "size": 118, "timeMs": 0.2, "ratio": "\u2014" },
{ "level": 9, "size": 118, "timeMs": 0.2, "ratio": "\u2014" }
],
"bestLevel": 1
}
The ZIP header overhead makes the output larger than the input.From metrics to a committed archive
Once the benchmark tells you a level, the optimizer's Download gives you that exact ZIP. To rebuild at the same level later (or with a folder), hand off to the Smart Archive Compressor.
1. Optimizer says: bestLevel 6, Best size 1.0 MB 2. Download -> smallest ZIP saved locally 3. Repeat builds: open /archive-tools/smart-archive-compressor and set compression level 6 to match
Edge cases and what actually happens
Free tier opens the tool
Upgrade requiredminTier is pro. On a Free account the page renders an upgrade overlay instead of the dropzone, so there is no free benchmark run. Sign in on Pro, Pro+Media or Developer to use it.
Expecting a level slider or all of 1–9
By designThe option schema is empty — there are no controls. The tool always tests exactly 1, 3, 6, 9. You can't pick a custom level here; use Smart Archive Compressor for an explicit 0–9 level choice.
Hoping for a 7z/rar/xz benchmark
Not supportedThis tool only uses fflate and only produces DEFLATE ZIP. It does not benchmark 7z, rar, xz or bz2. For format conversion see Archive Format Converter.
File exceeds the per-job size cap
RejectedInputs over your tier's byte limit (500 MB Pro, 2 GB Pro+Media/Developer) are blocked before compression with an error naming the file and limit.
No files dropped
ErroroptimizeLevels throws "Drop one or more files to benchmark." when the file list is empty. Add at least one file.
Already-compressed input shrinks ~0%
ExpectedJPEG, MP4, MP3 and existing ZIPs are entropy-dense, so all four levels report near-0% ratio. That's correct, not a bug — the data simply isn't compressible.
Zero-byte file makes the ZIP bigger
ExpectedZIP per-entry headers add ~100+ bytes, so a 0-byte input produces an output larger than the input. ratio shows an em-dash because it can't divide by a zero original size.
Benchmark feels ~4x slower than one zip
By designThe tool runs four full compression passes, so wall-clock time is roughly four single-zip operations. The timeMs column shows the cost of each level so you can judge the trade-off.
Two levels tie on size
PreservedbestLevel is chosen by strict less-than, so the first level that hits the smallest size wins (lower level preferred on a tie). The downloaded ZIP matches that level.
Downloaded file is the ZIP, not the JSON
By designThe Download button delivers the smallest archive's bytes. The JSON metrics live on screen — copy them from the result panel if you need the report itself.
Frequently asked questions
Is the Compression Level Optimizer free?
No. It's a Pro-tier tool — minTier is pro. On a Free account the page shows an upgrade overlay instead of the file picker. Pro, Pro+Media and Developer plans can run it.
Which levels does it test?
Exactly four: DEFLATE 1, 3, 6 and 9. It does not test 2, 4, 5, 7 or 8 — the level list is a fixed array in the code.
Does it upload my files?
No. It uses fflate in WebAssembly inside your browser tab. Files are read with the File API and never sent to a server — open DevTools → Network during a run and you'll see no outbound upload of your data.
What's the maximum file size?
Per the archive tier limits: 500 MB on Pro, 2 GB on Pro+Media and Developer. Each archive is also capped at 50,000 entries (Pro) or 500,000 (Pro+Media/Developer).
Can I benchmark several files at once?
Yes. The picker accepts multiple files; they're packed into one ZIP and benchmarked together. Pro allows up to 20 files per job, Pro+Media up to 100, Developer unlimited.
What exactly do I download?
The smallest of the four ZIPs produced. The on-screen JSON tells you which level won and its time cost; the Download button gives you that archive's bytes.
Can I pick a specific level?
Not in this tool — it has no options. If you already know the level you want and just need to build the archive, use Smart Archive Compressor, which exposes a 0–9 level control.
Does it support 7z, rar, tar.gz or xz?
No. It produces DEFLATE ZIP only via fflate. For converting between archive formats, use Archive Format Converter; to inspect an unknown file, Auto Format Detector.
Why is the output sometimes larger than the input?
ZIP adds per-entry headers, and already-compressed or zero-byte inputs can't shrink. In those cases the smallest ZIP can still exceed the original — that's normal.
Why does the ratio show a dash?
ratioPercent returns an em-dash when the original size is zero or non-finite, since it can't divide by zero. You'll see it on empty inputs.
Which browsers work?
Any browser with WebAssembly: recent Chrome, Edge, Firefox, Safari, Brave and Opera. Very large inputs are bounded by device memory rather than the browser itself.
Is there an API or CLI?
Not currently — every JAD archive tool runs as a browser page with no server path. For scripted DEFLATE benchmarking outside the browser, fflate (the same engine) is available as an npm package.
Privacy first
Every JAD Archive tool runs entirely in your browser using fflate, @zip.js/zip.js, and the libarchive WASM bridge. Your archives never leave your device — verified by zero outbound network requests during processing.