Enter your data or use the example, then run the tool.
Worked example
The generated gradient demonstrates palette banding. Compare the original and output; smaller palettes can be visibly lossy and may not save bytes.
Method
UPNG decodes RGBA pixels, runs its real palette quantizer and re-encodes PNG locally. Output bytes and dimensions are measured from the actual file.
Limits
PNG ≤10 MiB and ≤2 million pixels. APNG is rejected. Quantization changes colors and alpha; inspect semitransparent edges. No claim of visual losslessness or smaller output. Worker deadline applies to complex inputs.
All work stays in this browser. Each disposable worker is terminated after 2.5 seconds or cancellation. Inputs and processing logs are not sent to analytics.
IDAT inflation must exactly match the IHDR-derived scanline size (≤32 MiB); compressed metadata ≤1 MiB per chunk / 2 MiB total. Inflation stops at the first over-limit output chunk before UPNG decoding. Standard PNG IHDR/order/bit-depth are checked; CgBI is unsupported.
Your inputs stay on this device. Only optional, consented page visits are measured. Input values, files, filenames and processing logs are not sent to Analytics.
When switching languages, text, settings and selected files are temporarily kept on this device. Transfers are removed after restoring; interrupted transfers are cleaned up on a later visit. Inputs and files are never uploaded.