akmcompress
v0.1.1
Published
Browser-only image compression to WebP with adaptive quality and social-media friendly defaults.
Maintainers
Readme
akmcompress
akmcompress is a browser-only image compressor for upload workflows like social media posting, creator dashboards, and image submission forms.
It outputs .webp files and tries to get files as small as possible without dropping straight into destructive ultra-low-quality defaults.
What It Does
- Compresses images to WebP
- Uses adaptive quality search instead of one fixed quality level
- Downscales large images by default for better upload efficiency
- Keeps aspect ratio intact
- Exposes options when you need stricter byte or dimension limits
- Works in the browser with
File,Image,canvas, andURL.createObjectURL
Install
npm install akmcompressQuick Start
import { compressImage } from "akmcompress";
const input = fileInput.files?.[0];
if (input) {
const result = await compressImage(input);
console.log(result.file);
console.log(result.info);
console.log(result.savedBytes);
}Social Media Example
import { compressImage } from "akmcompress";
const result = await compressImage(file, {
maxDimension: 1600,
maxOutputBytes: 180_000,
});Keep Original Dimensions
import { compressImage } from "akmcompress";
const result = await compressImage(file, {
preserveDimensions: true,
maxOutputBytes: 250_000,
});API
compressImage(file: File, options?: CompressionOptions): Promise<CompressionResult>
Compresses an image to WebP and returns:
file: the compressed output filepreviewUrl: an object URL for previewing the compressed resultinfo: output file metadatasavedBytes: byte savings compared with the input file
CompressionOptions
type CompressionOptions = {
maxOutputBytes?: number;
maxDimension?: number;
preserveDimensions?: boolean;
minQuality?: number;
maxQuality?: number;
};createPreviewAsset(file: File)
Creates a preview object URL and image metadata for any input File.
formatFileSize(bytes: number)
Formats bytes into a readable string like 512 B, 1.2 KB, or 2.34 MB.
Notes
- Browser-only package. It does not run in plain Node.js.
- Output format is always WebP.
- By default, very large images are downscaled to make upload sizes more practical.
- If you need original dimensions, set
preserveDimensions: true. - Tiny targets like
1 KBare not realistic for most normal images without severe visible degradation.
Publish
npm run build
npm pack --dry-run
npm publish