# [0.5.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.4.1...v0.5.0) (2026-03-23) ### Bug Fixes * resolve TypeScript Uint8Array type error with fflate ([1d35db9](https://github.com/siddharthksah/Stirling-Image/commit/1d35db98bf359c07779522c30b00d8c7a9d3cb89)) * white screen crash when uploading photos with null GPS EXIF data ([70c73d8](https://github.com/siddharthksah/Stirling-Image/commit/70c73d85c992bc724c6b18a2d43789871b318e78)) ### Features * accept clientJobId in batch endpoint for SSE progress correlation ([2514078](https://github.com/siddharthksah/Stirling-Image/commit/2514078ea1feb8e44296e226e37e8e379a20473a)) * add CSS transform props to ImageViewer for live rotate/flip preview ([267da78](https://github.com/siddharthksah/Stirling-Image/commit/267da7857743898e612ba5bb80e24985664bd311)) * add live preview callback to RotateSettings, rename button to Apply ([ec192e3](https://github.com/siddharthksah/Stirling-Image/commit/ec192e3d96d864e3ce47e991ba1c72d6a4ee7cea)) * add MultiImageViewer with arrow navigation and filmstrip ([815a8ed](https://github.com/siddharthksah/Stirling-Image/commit/815a8ed419b82aadec4e07ef4456e9e96b84b65f)) * add processAllFiles batch method to tool processor hook ([846a51a](https://github.com/siddharthksah/Stirling-Image/commit/846a51a9fdf4e8fc4c1b9673f13acde646ae0ca9)) * add SideBySideComparison component for resize results ([271cab6](https://github.com/siddharthksah/Stirling-Image/commit/271cab647bb41872c5e205d6236e35eb7fad0810)) * add ThumbnailStrip filmstrip component ([6521d70](https://github.com/siddharthksah/Stirling-Image/commit/6521d702385f23a7cb9312c1661541943bfe2e03)) * conditional result views — side-by-side for resize, live preview for rotate ([59a57f3](https://github.com/siddharthksah/Stirling-Image/commit/59a57f3a00bbd0c6331d1165594ad4266ce3b536)) * **crop:** add CropCanvas component with visual overlay, grid, and keyboard controls ([1a076be](https://github.com/siddharthksah/Stirling-Image/commit/1a076be9b2cc5f434296f2739a395321368c2177)) * **crop:** add react-image-crop dependency ([31d426f](https://github.com/siddharthksah/Stirling-Image/commit/31d426ff6f02965d20e75e85ff15a8cbc1d1df0b)) * **crop:** redesign CropSettings with aspect presets, pixel inputs, and grid toggle ([c2c256a](https://github.com/siddharthksah/Stirling-Image/commit/c2c256a180640cf046bd1bc46b05065171a4c2dc)) * **crop:** wire CropCanvas and CropSettings into tool-page with bidirectional state ([786a671](https://github.com/siddharthksah/Stirling-Image/commit/786a671c39859ae0bf1f8732c2ff4efe210d2466)) * integrate MultiImageViewer and multi-file UX into tool page ([3796533](https://github.com/siddharthksah/Stirling-Image/commit/37965338228a2fca3623718a7db2f8757a464651)) * merge multi-image UX — batch processing, filmstrip navigation, resize/rotate redesign ([80756d1](https://github.com/siddharthksah/Stirling-Image/commit/80756d15917a877b21a900d282bb6522ae76c2e2)) * multi-file metadata display with per-file caching ([474b4a9](https://github.com/siddharthksah/Stirling-Image/commit/474b4a941e1be43887beac8d2ec57eb703cba260)) * rewrite file-store with FileEntry model for multi-image support ([8844b44](https://github.com/siddharthksah/Stirling-Image/commit/8844b44fff2abfbe3262a113dfc35d83367add05)) * rewrite resize settings with tab-based UI (presets, custom, scale) ([bc105fd](https://github.com/siddharthksah/Stirling-Image/commit/bc105fd261de3c11b279557dba98aaad65214f42)) * wire up batch processing across tool settings components ([9e2c28f](https://github.com/siddharthksah/Stirling-Image/commit/9e2c28f19124fca4bc4f55c0997e2314170ae478))
Stirling Image
The Open-Source Image Processing Platform
A self-hosted, privacy-first image processing suite with 37+ tools. Resize, compress, convert, watermark, remove backgrounds, and more — all from a single Docker container. No data ever leaves your server.
Inspired by Stirling-PDF, built for images.
Quick Start
docker run -d -p 1349:1349 -v ./data:/data ghcr.io/siddharthksah/stirling-image:latest
Then open http://localhost:1349.
Key Capabilities
-
37+ image tools — Resize, crop, rotate, compress, convert, watermark, color adjustments, and more in one place.
-
AI-powered processing — Background removal (rembg), image upscaling (Real-ESRGAN), OCR text extraction, face/PII auto-blurring, and smart cropping — all running locally.
-
Privacy first — Every operation runs on your hardware. No files are sent to external servers. No telemetry, no tracking, no cloud dependencies.
-
Batch processing — Drop 200 images, apply any tool, download results as a ZIP. Concurrent processing with configurable limits.
-
Automation pipelines — Chain tools into reusable workflows (e.g., Resize, Compress, Convert to WebP, Strip Metadata). Save and reuse pipelines.
-
Full API — Every tool is available via REST API with Swagger documentation at
/api/docs. Automate image processing from scripts, CI/CD, or other tools. -
Self-hosted & portable — Single Docker container. Works on Intel, AMD, and Apple Silicon (multi-arch:
linux/amd64+linux/arm64).
Tools
| Category | Tools |
|---|---|
| Essentials | Resize, Crop, Rotate & Flip, Convert, Compress |
| Optimization | Strip Metadata, Bulk Rename, Image to PDF, Favicon Generator |
| Adjustments | Brightness/Contrast, Saturation, Color Channels, Color Effects, Replace Color |
| AI Tools | Background Removal, Upscaling, Object Eraser, OCR, Face Blur, Smart Crop |
| Watermark | Text Watermark, Image Watermark, Text Overlay, Image Composition |
| Utilities | Image Info, Compare, Find Duplicates, Color Palette, QR Generator, Barcode Reader |
| Layout | Collage/Grid, Image Splitting, Border & Frame |
| Format | SVG to Raster, Image to SVG, GIF Tools |
| Automation | Pipeline Builder, Batch Processing |
Supported Formats
Input: JPG, PNG, WebP, AVIF, TIFF, BMP, GIF (animated), SVG, HEIC/HEIF, JPEG XL, ICO, RAW (CR2, NEF, ARW, DNG)
Output: JPG, PNG, WebP, AVIF, TIFF, GIF, JPEG XL, SVG, ICO, PDF
Configuration
| Variable | Default | Description |
|---|---|---|
PORT |
1349 |
Application port |
AUTH_ENABLED |
true |
Enable login (default credentials: admin / admin) |
MAX_UPLOAD_SIZE_MB |
100 |
Maximum file upload size |
MAX_BATCH_SIZE |
200 |
Maximum files per batch |
CONCURRENT_JOBS |
3 |
Parallel processing limit |
FILE_MAX_AGE_HOURS |
24 |
Auto-cleanup temp files after this duration |
STORAGE_MODE |
local |
Storage backend (local or s3) |
See .env.example for the full list.
Docker Compose
services:
stirling-image:
image: ghcr.io/siddharthksah/stirling-image:latest
container_name: stirling-image
ports:
- "1349:1349"
volumes:
- stirling-data:/data
restart: unless-stopped
volumes:
stirling-data:
Development
git clone https://github.com/siddharthksah/Stirling-Image.git
cd Stirling-Image
pnpm install
pnpm dev
# UI: http://localhost:1349
Requires Node.js 22+ and pnpm 9+.
Tech Stack
- Frontend: React 19, Vite, Tailwind CSS 4, shadcn/ui
- Backend: Fastify, Sharp (libvips), Drizzle ORM, SQLite
- AI/ML: Python (rembg, Real-ESRGAN, PaddleOCR, MediaPipe)
- Infrastructure: Turborepo monorepo, Docker multi-arch
Contributing
Contributions are welcome. Please open an issue first to discuss what you'd like to change.