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 21e40f5bbf chore(release): 0.8.2 [skip ci]
## [0.8.2](https://github.com/siddharthksah/Stirling-Image/compare/v0.8.1...v0.8.2) (2026-03-25)

### Bug Fixes

* **test:** add missing PNG fixture files to repo ([8474b0e](8474b0ee52))
* **test:** exclude e2e tests from vitest and fix CI test suite ([91acab9](91acab9967))
2026-03-25 17:33:09 +00:00
.github refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
.husky refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
apps chore(release): 0.8.2 [skip ci] 2026-03-25 17:33:09 +00:00
docker fix(docker): skip husky prepare script in production install 2026-03-26 01:10:51 +08:00
packages chore(release): 0.8.2 [skip ci] 2026-03-25 17:33:09 +00:00
scripts feat: add semantic-release for automated versioning and help dialog 2026-03-22 21:25:14 +08:00
tests fix(test): add missing PNG fixture files to repo 2026-03-26 01:32:48 +08:00
.dockerignore chore: remove dead code, add test infrastructure, update docs 2026-03-23 11:46:45 +08:00
.env.example chore: remove internal docs from repo, update public documentation 2026-03-26 01:11:40 +08:00
.gitignore fix(test): add missing PNG fixture files to repo 2026-03-26 01:32:48 +08:00
.releaserc.json fix: streamline CI/CD — remove broken AI docs updater, fix Docker publish 2026-03-23 15:14:34 +08:00
biome.json refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
CHANGELOG.md chore(release): 0.8.2 [skip ci] 2026-03-25 17:33:09 +00:00
CLAUDE.md refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
LICENSE Initial commit 2026-03-22 02:33:47 +08:00
package.json chore(release): 0.8.2 [skip ci] 2026-03-25 17:33:09 +00:00
playwright.config.ts refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
pnpm-lock.yaml refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
pnpm-workspace.yaml feat: initialize Turborepo monorepo with pnpm workspaces 2026-03-22 02:41:44 +08:00
README.md chore: remove internal docs from repo, update public documentation 2026-03-26 01:11:40 +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 fix(test): exclude e2e tests from vitest and fix CI test suite 2026-03-26 01:32:48 +08:00

Stirling Image

The Open-Source Image Processing Platform

Docker CI License Stars


Self-hosted image processing with 37+ tools in a single Docker container. Resize, compress, convert, watermark, remove backgrounds, run OCR, and more. Nothing 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

Open http://localhost:1349. Default login is admin / admin.

What it does

  • 37+ image tools in one place — resize, crop, rotate, compress, convert, watermark, color adjustments, and the rest.

  • AI tools that run locally — background removal (rembg), upscaling (Real-ESRGAN), OCR (PaddleOCR), face blurring (MediaPipe), object erasing (LaMa). No external API calls.

  • Your hardware, your data — no telemetry, no tracking, no cloud. Files stay on your machine.

  • Batch processing — drop up to 200 images, apply any tool, get a ZIP back. Configurable concurrency.

  • Pipelines — chain tools into reusable workflows (resize, then compress, then convert to WebP, then strip metadata). Save them and rerun later.

  • REST API — every tool is exposed at /api/v1/tools/:toolId. Swagger docs at /api/docs.

  • Persistent file storage — save processed images server-side with version tracking. Pick up where you left off.

  • Teams and admin settings — manage users, toggle tool visibility, configure cleanup, upload a custom logo.

  • Single container — runs on Intel, AMD, and Apple Silicon (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

In: JPG, PNG, WebP, AVIF, TIFF, BMP, GIF (animated), SVG, HEIC/HEIF, JPEG XL, ICO, RAW (CR2, NEF, ARW, DNG)

Out: JPG, PNG, WebP, AVIF, TIFF, GIF, JPEG XL, SVG, ICO, PDF

Configuration

Variable Default Description
PORT 1349 Server port
AUTH_ENABLED true Require login (admin / admin by default)
MAX_UPLOAD_SIZE_MB 100 Max file upload size
MAX_BATCH_SIZE 200 Max files per batch
CONCURRENT_JOBS 3 Parallel processing limit
FILE_MAX_AGE_HOURS 24 Auto-delete temp files after this many hours
FILES_STORAGE_PATH ./data/files Where persistent user files are stored
STORAGE_MODE local Storage backend (local or s3)

See .env.example for the full list.

Docker Compose example

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

React 19 + Vite frontend, Fastify + Sharp backend, SQLite via Drizzle ORM, Python sidecar for AI/ML models. Monorepo with pnpm workspaces. Multi-arch Docker builds.

Support this project

If you find this useful, consider supporting development:

GitHub Sponsors Ko-fi

Contributing

Contributions welcome. Open an issue first so we can talk about what you have in mind.

License

MIT