Compress images, PDFs, video, audio and GIFs — and run OCR on scanned documents — entirely in your browser. Nothing leaves your device, ever.
CompressZ has no backend. All processing happens locally using WebAssembly and Web APIs. We don't collect any data, run no analytics, and have no servers that touch your files.
Made with ❤️ by ADJ and team · Privacy Policy · GitHub ↗
100% client-side file compression and OCR. No servers. No uploads. No tracking.
CompressZ runs entirely in your browser using WebAssembly, the Canvas API, WebCodecs, and two neural OCR engines. Every byte of your files stays on your device throughout the entire process.
Compiled C FFmpeg to WebAssembly. Handles video, audio, and GIF compression with full codec support. Multithreaded via SharedArrayBuffer.
OffscreenCanvas + ImageBitmap for hardware-accelerated image decoding and encoding. WebP and AVIF encoded by the browser's own GPU codec.
PDF.js 4.4 renders pages to canvas. pdf-lib 1.17 repackages images structurally. Two-strategy compression for optimal results.
W3C API for hardware-accelerated video encode/decode. GPU tier-2 fallback when FFmpeg.wasm is unavailable.
LSTM neural OCR compiled to SIMD-accelerated WASM. 100+ languages, ~10 MB, runs offline after first load.
Baidu's three-stage pipeline via WebGL (~25 MB). Best for tables, CJK, multi-column layouts and complex scans.
Strategy A (structural): Walks the PDF XObject resource dictionary, finds embedded images, decodes them, downscales to target DPI via OffscreenCanvas, re-encodes as JPEG, and splices in-place. Text, fonts, and vectors are never rasterised.
Strategy B (canvas render): PDF.js renders each page to OffscreenCanvas with colorSpace: 'srgb' and intent: 'print', then pdf-lib embeds the JPEG. Used for Extreme preset and as fallback for encrypted PDFs.
Three-tier fallback: (1) FFmpeg.wasm with multithreading when SharedArrayBuffer is available, (2) WebCodecs GPU-accelerated H.264 on Chrome/Safari, (3) MediaRecorder canvas capture as universal fallback.
CompressZ is built on the work of several open-source projects, none of which are affiliated with or endorse CompressZ: PDF.js and pdf-lib (PDF rendering/generation), FFmpeg.wasm (video/audio/GIF), Tesseract.js and the underlying Tesseract OCR engine (100+ language OCR), PaddleOCR / PP-OCRv3 via Paddle.js (primary OCR engine), and mammoth.js with html2canvas (Word document conversion). Full attribution and license details for every dependency are in CREDITS.md on GitHub.
Technical reference for all compression options and browser compatibility.
format — image/webp (default), image/jpeg, image/png, image/avifquality — 0.01–0.99. Ignored for PNG. Default: WebP 0.82, JPEG 0.85, AVIF 0.70.maxWidth / maxHeight — Downscale preserving aspect ratio.targetSizeKB — 14-iteration binary search to hit this file size.pdfCompressionLevel — low (220 DPI, q=0.85), recommended (150 DPI, q=0.72), extreme (96 DPI, q=0.45 + canvas render)targetSizeKB — Binary-searches per-image/per-page JPEG quality to approximate total target size. Accepts MB or KB in the UI.videoCodec — h264, h265, vp9, vp8, av1quality — Maps to CRF 18–35. VP9/AV1 use -b:v 0 with equivalent CRF.targetSizeKB — Calculates bitrate as (size × 8) / duration.fps — Output framerate. 0 = preserve source.maxWidth — Scale down (lanczos), aspect ratio preserved.videoPreset — ultrafast / fast / medium / slowaudioFormat — mp3, aac, ogg, opus, flac, wavaudioBitrate — kbps. Defaults: mp3→192, aac→160, ogg→128, opus→96.audioSampleRate — 0 = preserve source rate.stripMetadata — Remove ID3/tags (-map_metadata -1).gifToVideo — Convert to WebM VP9 instead of re-optimising as GIF.quality — Controls palette size: 16–256 colours.maxWidth — Lanczos resize before palette generation.fps — Framerate decimation.engine — auto, tesseract, paddlelanguage — auto, eng, fra, deu, spa, chi_sim, chi_tra, jpn, kor, ara, hin, and morerenderDpi — 150–400 DPI. Default 250. Higher = better accuracy, slower.overlayMode — Add invisible text over original PDF vs. new image PDF.extractText — Also export a .txt file.The OCR page is laid out in two columns on wider screens: drop your files and watch the queue on the left, pick an engine and tune settings on the right (settings stay in view while the file list scrolls). Below ~960px width it stacks into a single column, drop zone first.
CompressZ's compression and OCR engines are built on PDF.js, pdf-lib, FFmpeg.wasm, Tesseract.js, PaddleOCR/Paddle.js, mammoth.js, and html2canvas — see CREDITS.md for full license attribution.
npm run builddistpublic/_headers file sets COOP/COEP automatically on Cloudflare Pages.Last updated: July 2026
The short version: CompressZ processes all files locally in your browser. We do not have servers that receive your files. We collect no personal data, run no analytics, and set no cookies. Your files and their contents are never transmitted to us or any third party.
CompressZ is an open-source, client-side web application for file compression and OCR. The application is served as a static website hosted on Cloudflare Pages. Source code is publicly available on GitHub.
All compression and OCR operations run entirely inside your browser using WebAssembly, the Canvas API, and Web platform APIs. Your files are read from your device into browser memory (RAM), processed locally, and the output is written back to your device. At no point do your files traverse a network connection to our infrastructure.
You can verify this yourself by opening your browser's Network tab while using CompressZ — you will see no requests containing your file data.
Some compression engines are loaded from CDN on first use and cached by your browser thereafter. Full license attribution for each is in CREDITS.md on GitHub:
esm.sh (video/audio/GIF). These are WebAssembly binaries only; no file data is sent to esm.sh.cdn.jsdelivr.net (PDF rendering).cdn.jsdelivr.net (PDF generation).cdn.jsdelivr.net and tessdata.projectnaptha.com (OCR engine and trained language data).cdn.jsdelivr.net and paddlejs.bj.bcebos.com (OCR model weights).cdn.jsdelivr.net (Word document conversion).These CDN requests are for static assets (JavaScript and model weights) only. Your file content is never included in these requests. Standard CDN access logs (IP address, timestamp, asset requested) may be retained by the CDN providers per their own privacy policies.
Google Fonts is used for typography and is loaded from fonts.googleapis.com. This may log your IP address per Google's privacy policy. To avoid this entirely, you can use CompressZ offline after caching.
CompressZ stores two items in your browser's localStorage:
theme — your light/dark mode preference.sb-collapsed — whether the sidebar is collapsed.These values never leave your device. No file metadata, file names, or any other information is stored in localStorage.
CompressZ is served from Cloudflare Pages. When you access the website, Cloudflare's servers handle the HTTP request to deliver the static HTML, CSS, and JavaScript files. Cloudflare may log access requests (IP address, browser user agent, timestamp) per their privacy policy. These logs do not contain your file data.
CompressZ does not knowingly collect any information from anyone, including children under 13. Because we collect no personal data whatsoever, there is nothing age-specific to disclose.
If we make material changes to this policy, we will update the "Last updated" date at the top. Because CompressZ collects no contact information, we cannot notify you directly — please check this page periodically if you are concerned.
If you have questions about this privacy policy or CompressZ's data practices, please open an issue on our GitHub repository.