Shrink a photo or image to 100KB or less for upload limits on forms, shops and communities.
"100 KB" allows up to 100 × 1,024 = 102,400 bytes. Small images usually fit at the Balanced quality straight away: the 512 × 512 NASA photo became a 45,813-byte JPG (SSIM 0.9785), a 256 × 256 brick texture a 14,214-byte WebP, and a 75,758-byte JPG was returned untouched because it already fitted. For larger photos 100 KB holds roughly 0.6–1.3 megapixels. If the form counts 100,000 bytes, type 97; to use more of the budget, pick High quality.
Drop image files hereProcess many files at onceNo upload · processed on this device
Making a game?
Nerulio is a 2D game asset studio first: draw pixel art, cut sprite sheets into animations, pack texture atlases, check autotile tilesets and export them for Godot, Unity, Phaser and other engines. It runs in your browser; files stay on your device.
The target only limits; it does not attract. Every format is first encoded at the level's quality, and only candidates above 102,400 bytes are searched down. Among those that fit, the highest score wins. So a 512-px photo at Balanced lands near 45 KB, not near 100 KB.
Choosing High quality moves the starting point to 0.92. The High candidates measured on the same photo were a 59,824-byte WebP (SSIM 0.9883) and a 73,755-byte JPG (0.9874); both fit under 102,400, so the WebP would win.
For photos larger than the test file, the budget is what matters: 819,200 bits. At the two densities measured on the fixture (0.62 and 1.40 bits per pixel) that is 1.33 or 0.59 megapixels — roughly 1330 × 998 or 883 × 662 for a 4:3 photo. A 12-megapixel phone photo needs its dimensions reduced first.
102,400 bytes
100 × 1,024; the exact ceiling the preset uses.
Level quality
The starting quality (0.60 / 0.80 / 0.92); a target never raises it.
Megapixel budget
Target bits ÷ bits per pixel; a rough guide to the dimensions that fit.
100 KB on three real files (measured)
Balanced level, Auto format, Chromium 153, 2026-09-28.
Target 100 KB = 102,400 bytes
astronaut.png 512 x 512 791,555 bytes -> JPG q0.80 45,813 bytes SSIM 0.9785
bricks_Color.png 256 x 256 127,956 bytes -> WebP q0.80 14,214 bytes SSIM 0.9701
astronaut.jpg 512 x 512 75,758 bytes -> original kept (fits already)
Budget 819,200 bits: 1.33 MP at 0.62 bits/px, 0.59 MP at 1.40 bits/px
The brick texture is ambientCG's CC0 Bricks076C, reduced to 256 × 256 in the repository; its WebP scored higher than the 15,653-byte JPG (0.9573).
Entering the right limit
The form says
Target size to enter
Largest file you get
100 KB, counted as 1,024 bytes
100 (preset)
102,400 bytes
100 KB, counted as 1,000 bytes
97
99,328 bytes
100 KB, as good as possible
100 + High quality
Starts at quality 0.92
100 KB and a maximum width
100 + Max width
Resized first, then compressed
Check the result
Compare the size in the result list with the form's limit, and the exact bytes in the file properties.
If the result is far below 100 KB and you want more detail, run again at High quality.
Open at 100 % and check the parts the viewer will look at first.
Troubleshooting
Symptom
Likely cause
How to check
Fix
A phone photo shows "Target size not reached"
Twelve megapixels do not fit in 819,200 bits
Warning under the file
Allow smaller dimensions, or set Max width to about 1,300 px
The result is much smaller than 100 KB
Balanced never goes above quality 0.80
Result line, e.g. 45 KB
Pick High quality
Rejected by a form that says 100 KB
It counts 100,000 bytes
Exact byte count
Enter 97
The texture or pattern looks smeared
WebP was chosen and smooths fine repeating detail
Zoom in on the pattern
Set Output format to PNG if the limit allows, or JPG and compare
You only want a lighter web copy and there is no fixed limit.
What this page does not cover
The target cannot be used as a minimum; results can be far below it.
The megapixel figures are estimates from one photo; detailed or noisy pictures need more bytes.
Versions and sources
Measured on 2026-09-28 in Playwright Chromium 153 by calling src/compression.js with the options src/task/compress.js passes for ?kb=100, on tests/fixtures/astronaut.png, its Pillow JPG (quality 92) and tests/fixtures/texture/bricks_Color.png. The High-quality figures are the level's measured candidates on the same photo.
Several quality and format candidates are encoded until one fits 100KB; each result is decoded again and compared (SSIM) so the best-looking one wins. You see the real file size before downloading.
Resolution is kept by default. Only if the target cannot be reached, opt in to shrinking the dimensions.
Your file is never uploaded — it is processed inside this browser.
Example generated with this tool. ZIP tools show their preview; inspect the downloaded archive for every file.
Compress image
Set a size limit, then check the actual result.
How it works
Open the source file
Choose the processing mode and settings
Run, inspect the result and download
Supported formats
PNG / JPG / WebP / AVIF / HEIC → PNG / JPG / WebP — Input decoding and output encoding depend on browser support. Animated inputs are rejected; select a still frame first.
What this tool does
Auto compares actual browser codec outputs using a sampled visual metric and target-size search. Alpha-aware format selection; optional dimension reduction.
Implementation and verified quality
advanced · browser codecs / proxy SSIM candidate search. Quality qualification is in progress. Pro/Flagship quality has not been established.
Before you export
Actual device memory, storage and codec support. Tested examples are evidence, not a guarantee for every file.
Frequently asked questions
What determines the supported size?
Actual device memory, storage and codec support. Tested examples are evidence, not a guarantee for every file.
Are my files uploaded?
This tool processes the files you open on your device without uploading them. Images you explicitly attach to community posts are uploaded separately. Optional engines and models are downloaded from third parties; those requests expose connection information such as your IP address.
Will my work be saved automatically?
No. Images and editing state stay in this tab; media output can use local temporary storage. Changing language preserves your work; reloading, closing the tab, or following a link to another page can clear it.