How to troubleshooting the compression level optimizer
- Step 1Confirm your tier — If you see an upgrade overlay instead of a file dropzone, you're on Free. The tool's
minTieris pro — sign in on Pro, Pro+Media or Developer to get the picker. - Step 2Check the file size against your cap — A pre-process error naming the file and limit means it's too big: 500 MB (Pro) or 2 GB (Pro+Media/Developer). Benchmark a smaller sample instead.
- Step 3Confirm you actually dropped a file — An empty selection throws "Drop one or more files to benchmark." Re-select your input — multiple files are allowed and are bundled into one ZIP.
- Step 4Interpret a ~0% ratio — If every level reports near-0%, the input is already compressed (JPEG, MP4, MP3, existing ZIP). That's correct, not a failure — DEFLATE can't shrink entropy-dense data.
- Step 5Find your download — The Download button saves the smallest ZIP as
compression-levels.json. It's a real ZIP —unzipit or rename to.zip. The metrics JSON is the text shown on screen; copy it from the result panel. - Step 6Wait out large runs — Because the tool runs four passes, a large input takes ~4x a single compression. There's no timeout — let it finish, or use a smaller sample if the tab is memory-constrained.
Symptom to cause to fix
Each row maps to real behaviour in lib/archive/archive-processor.ts, the client tier gate, and lib/tier-limits.ts.
| Symptom | Cause | Fix |
|---|---|---|
| Upgrade overlay, no dropzone | Free tier; tool is minTier pro | Use a Pro+ account |
| "exceeds the ... tier per-job limit" | File over size cap | Sample smaller, or upgrade tier |
| "Drop one or more files to benchmark." | No file selected | Re-pick at least one file |
| Every level ~0% ratio | Input already compressed | Expected — store-level it elsewhere |
| Output larger than input | ZIP header overhead / 0-byte input | Expected for tiny/incompressible data |
| Ratio shows — (dash) | Original size is 0 | Expected; can't divide by zero |
| Download is named .json but is a ZIP | Blob is the best ZIP; filename is fixed | Rename to .zip or just unzip it |
| Run feels very slow | Four full DEFLATE passes | Expected; sample smaller if needed |
Tier caps that trigger rejections
From lib/tier-limits.ts (archive family). Free is not listed because the tool is locked on Free.
| Tier | Max file size | Entries / archive | Files per job |
|---|---|---|---|
| Pro | 500 MB | 50,000 | 20 |
| Pro+Media | 2 GB | 500,000 | 100 |
| Developer | 2 GB | 500,000 | unlimited |
Cookbook
Concrete diagnoses for the messages and surprises people actually hit.
"There's no file dropzone"
This is the tier gate, not a bug. The tool requires Pro; Free accounts get the upgrade overlay component instead of the file picker.
Account: Free Page: /archive-tools/compression-level-optimizer What you see: [ Compression Level Optimizer requires the Pro plan. ] [ Upgrade ] Fix: sign in on Pro / Pro+Media / Developer.
"It said my file is too big"
The size check runs before compression and names the file and limit. Benchmark a representative slice instead of the whole thing.
Input: backup.tar (740 MB) on Pro Error: File "backup.tar" exceeds the pro tier per-job limit (500.0 MB). Upgrade for larger files. Fix: upgrade to Pro+Media/Developer (2 GB), or sample <500 MB.
"All four levels show 0% — is it broken?"
No. The input is already compressed, so DEFLATE has nothing to remove. The result is honest.
Input: clip.mp4 (already H.264-compressed)
{
"results": [
{ "level": 1, "size": 5243012, "ratio": "0.0%" },
{ "level": 9, "size": 5242980, "ratio": "0.0%" }
],
"bestLevel": 9
}
Meaning: media is incompressible by DEFLATE. Working as intended."My download is a .json that won't open as JSON"
The Download button gives you the smallest ZIP's bytes, saved under the report's filename. It's a ZIP; the JSON metrics are the on-screen text.
Downloaded: compression-levels.json $ file compression-levels.json compression-levels.json: Zip archive data $ mv compression-levels.json best.zip && unzip -l best.zip ... your files ... (The metrics JSON is the panel text — use Copy to save it.)
"It's been compressing for a long time"
Four full passes on a large input is genuinely slow, and there's no timeout to bail you out. Reduce the sample if the tab is memory-bound.
Input: 1.8 GB dataset on Pro+Media Behaviour: four DEFLATE passes (L1,L3,L6,L9) run in sequence. No 30s timeout exists -> it runs to completion or OOMs the tab. Fix: benchmark a smaller representative sample instead.
Edge cases and what actually happens
Free account, no dropzone
Upgrade requiredNot a bug — the tool's minTier is pro, so Free shows a ProOverlay instead of the file picker. Upgrade to use it.
File over the per-job cap
RejectedThe size check throws before compression: "File ... exceeds the {tier} tier per-job limit ({size})." Sample smaller or upgrade.
No file dropped
ErroroptimizeLevels throws "Drop one or more files to benchmark." when the file list is empty. Select at least one file.
Every level shows ~0%
ExpectedAlready-compressed input (JPEG/MP4/MP3/ZIP) can't be shrunk by DEFLATE. Correct behaviour, not a failure.
Output bigger than input
ExpectedZIP per-entry headers add overhead; tiny or incompressible inputs can produce a larger archive. Normal.
Ratio renders as an em-dash
ExpectedratioPercent returns — when the original size is 0 or non-finite (e.g. an empty file), since it can't compute a percentage.
Download is a ZIP named .json
By designThe blob is the smallest ZIP; the filename is fixed to compression-levels.json. Rename to .zip or unzip directly — the on-screen text is the JSON report.
Run is slow with no timeout
ExpectedFour full DEFLATE passes run in sequence and there is no 30-second timeout in this tool. Large inputs run to completion or exhaust tab memory — use a smaller sample.
Wanted levels 2/4/5/7/8
By designOnly 1, 3, 6, 9 are tested — the set is fixed in code. Use a zip CLI loop for the missing levels.
Tab crashes on a huge input
Memory limitAll four ZIPs are built in memory. Very large inputs can exceed the browser heap and crash the tab. Reduce the input size or use a native CLI for multi-GB data.
Frequently asked questions
Why is there no place to drop a file?
You're on the Free tier. The tool requires Pro (minTier: pro), so Free shows an upgrade overlay instead of the dropzone. Sign in on Pro, Pro+Media or Developer.
Why was my file rejected before processing?
It's over your per-job size cap: 500 MB on Pro, 2 GB on Pro+Media/Developer. The error names the file and the limit. Benchmark a smaller sample or upgrade.
Why does it say to drop a file when I already did?
The selection came through empty (a cancelled picker, or files filtered out). Re-pick — multiple files are allowed and are bundled into one ZIP.
Why do all levels show 0% compression?
Your input is already compressed — JPEG, MP4, MP3 or an existing ZIP. DEFLATE can't reduce entropy-dense data, so every level lands near 0%. That's correct.
Why is the output bigger than the original?
ZIP adds per-entry headers, and incompressible or zero-byte inputs can't shrink. In those cases even the smallest ZIP can exceed the input — expected behaviour.
Why does the ratio show a dash?
When the original size is zero (an empty file), the ratio can't be computed, so it renders as an em-dash. Add real content to see a percentage.
Why is my download a .json file?
The download is the smallest ZIP's bytes, but the filename is fixed to compression-levels.json. It's a real ZIP — rename it to .zip or unzip it directly. The metrics JSON is the text shown on screen; use Copy to save it.
Is there a 30-second timeout?
No. Despite older guidance, this tool has no processing timeout. A large input runs four full passes to completion — or exhausts tab memory. Use a smaller sample if it's taking too long.
Why is it so slow?
It compresses your input four times (levels 1, 3, 6, 9) and times each, so wall-clock time is roughly four single-zip operations. Reduce the input to speed it up.
Can I add the levels it skips (2, 4, 5, 7, 8)?
No — the level set is fixed in code. For every level 1–9, run a zip -N loop in a shell.
The tab crashed on a big file — why?
All four ZIPs are built in memory, so very large inputs can exceed the browser heap. Benchmark a smaller representative sample, or use a native CLI for multi-GB data.
My input isn't an archive — will it still work?
Yes. The tool compresses whatever raw files you give it into a ZIP at each level; the input doesn't have to be an existing archive. If you instead want to inspect or convert an existing archive, use Auto Format Detector or Archive Format Converter.
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.