Stirling-PDF but for images. 30+ tools and local AI in a single Docker container - resize, compress, remove backgrounds, upscale, OCR, and more. No cloud, no telemetry. Your images never leave your machine.
Find a file
semantic-release-bot acf48432be chore(release): 0.3.0 [skip ci]
# [0.3.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.2.1...v0.3.0) (2026-03-23)

### Bug Fixes

* add SSE progress endpoint to public paths ([b3f590c](b3f590c8b3))
* apply continuous progress bar to erase-object and OCR ([8db84a7](8db84a753c))
* continuous progress bar (no 100%→0% reset) ([28cd950](28cd950ede))
* setError(null) was overriding setProcessing(true) ([b5cc452](b5cc452077))

### Features

* **ai:** add emit_progress() calls to all Python AI scripts ([7238429](723842988b))
* **ai:** add onProgress callback to all AI wrapper functions ([acb230c](acb230cc98))
* **ai:** rewrite bridge.ts to stream stderr progress via spawn ([7d74ddd](7d74ddd3a6))
* **api:** add SingleFileProgress type and SSE update function ([7eddac5](7eddac5119))
* **api:** wire AI route handlers to SSE progress via clientJobId ([27600a4](27600a4318))
* replace model dropdown with intuitive subject/quality selector in remove-bg ([9aa0371](9aa0371a14))
* **web:** add ProgressCard component ([01d5d66](01d5d66466))
* **web:** add ProgressCard to non-AI tool settings (Group A) ([5c64b30](5c64b306ea))
* **web:** migrate AI tool settings to ProgressCard ([dbd3bf7](dbd3bf737e))
* **web:** rewrite useToolProcessor with XHR upload progress and SSE ([60945fd](60945fd3b3))
2026-03-23 04:03:22 +00:00
.github/workflows feat: add semantic-release for automated versioning and help dialog 2026-03-22 21:25:14 +08:00
apps chore(release): 0.3.0 [skip ci] 2026-03-23 04:03:22 +00:00
docker chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
docs/superpowers docs: add implementation plan for real progress bars 2026-03-23 01:35:29 +08:00
packages chore(release): 0.3.0 [skip ci] 2026-03-23 04:03:22 +00:00
scripts feat: add semantic-release for automated versioning and help dialog 2026-03-22 21:25:14 +08:00
tests chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
.dockerignore chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
.env.example fix: make port 1349 the UI port in all modes 2026-03-22 10:31:11 +08:00
.gitignore chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
.releaserc.json feat: add semantic-release for automated versioning and help dialog 2026-03-22 21:25:14 +08:00
CHANGELOG.md chore(release): 0.3.0 [skip ci] 2026-03-23 04:03:22 +00:00
LICENSE Initial commit 2026-03-22 02:33:47 +08:00
package.json chore(release): 0.3.0 [skip ci] 2026-03-23 04:03:22 +00:00
playwright.config.ts chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
pnpm-lock.yaml chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
pnpm-workspace.yaml feat: initialize Turborepo monorepo with pnpm workspaces 2026-03-22 02:41:44 +08:00
PRD.md Upgrade to production Python ML stack, multi-arch Docker 2026-03-22 02:38:12 +08:00
README.md docs: add comprehensive README matching Stirling-PDF style 2026-03-22 11:14:35 +08:00
tsconfig.base.json feat: initialize Turborepo monorepo with pnpm workspaces 2026-03-22 02:41:44 +08:00
turbo.json feat: initialize Turborepo monorepo with pnpm workspaces 2026-03-22 02:41:44 +08:00
vitest.config.ts chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00

Stirling Image

The Open-Source Image Processing Platform

Docker CI License Stars


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.

License

MIT