Pic Smaller – Compress JPEG, PNG, WEBP, AVIF, SVG and GIF images intelligently
Pic Smaller – Compress JPEG, PNG, WEBP, AVIF, SVG and GIF images intelligently
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · فارسی · Türkçe
[!IMPORTANT]
Pic Smaller Desktop — The Flagship Edition
Uncompromising native power, beyond the browser.
Elevate your workflow with the flagship Pic Smaller Desktop. A dedicated native application built for professionals who refuse to settle — it glides through massive files and entire folder libraries, supports 16+ image formats, and delivers superior processing performance. Complete the experience with an advanced suite of AI tools: background removal, watermark removal, and high-fidelity image upscaling.
Pic Smaller is a free, open-source batch image compressor that runs entirely in the browser. Images are processed locally with Web Workers, WebAssembly, Canvas, and browser codecs. Files are never uploaded to an application server.
Use the hosted app at picsmaller.com or www.picsmaller.com.
The core workspace combines batch input, compression results, output settings, and download actions in one view.
Requirements:
git clone https://github.com/joye61/pic-smaller.git
cd pic-smaller
npm ci
npm run dev
Useful commands:
npm test # Run the test suite
npm run lint # Run ESLint
npm run build # Build the standalone Node.js server
npm run build:pages # Export the static Cloudflare Pages site to out/
The public site uses Cloudflare Pages with the GitHub repository integration. Cloudflare builds and deploys the site automatically with these settings:
Setting Value Production branchmaster
Preview branch
develop
Build command
npm run build:pages
Output directory
out
Node.js version
22
Pushes to master update production. Pushes to develop create preview
deployments. Other branches do not deploy automatically.
The Pages build removes Next.js's generated top-level 404.html, allowing
Cloudflare Pages to apply its native single-page application fallback.
The Docker image is an alternative for private or self-hosted deployments. It
uses Next.js standalone output, runs as the unprivileged node user, handles
signals through tini, and includes a container health check.
docker build --pull -t pic-smaller:latest .
docker run -d \
--name pic-smaller \
--restart unless-stopped \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=64m \
--cap-drop ALL \
--security-opt no-new-privileges \
-p 127.0.0.1:3000:3000 \
pic-smaller:latest
Open http://127.0.0.1:3000. For public access, place the container behind a
TLS-terminating reverse proxy such as Caddy, nginx, or Traefik. Remove the
127.0.0.1: bind prefix only when direct network exposure is intentional.
The web application does not require API keys. Never commit credentials,
Cloudflare tokens, .env files, .dev.vars, private keys, or local Wrangler
state. The repository ignore rules exclude these files. If a future feature
needs secrets, store them in the deployment platform's secret manager and
provide only documented placeholder names in an .env.example file.
src/app/: Next.js application entry points.src/components/: reusable interface components.src/engines/: browser codecs, workers, transforms, and compression queue.src/locales/: translations.src/views/: application views.public/: browser codec and WebAssembly assets prepared during builds.scripts/: codec preparation and deployment build helpers.tests/: Node.js test suite.develop.npm test, npm run lint, and the relevant production build.Pic Smaller is available under the MIT License.
No open issues yet, or sync has not completed.