Commit Graph
280 Commits
Author SHA1 Message Date
semantic-release-bot b20039eddf chore(release): 1.12.0 [skip ci]
# [1.12.0](https://github.com/stirling-image/stirling-image/compare/v1.11.0...v1.12.0) (2026-04-10)

### Features

* unified Docker image with GPU auto-detection ([#37](https://github.com/stirling-image/stirling-image/issues/37)) ([b0083e2](https://github.com/stirling-image/stirling-image/commit/b0083e2b083d0bf52b6a576f7ef67fbff0cc8cbe))
2026-04-10 05:45:42 +00:00
stirling-imageandGitHub b0083e2b08 feat: unified Docker image with GPU auto-detection (#37)
Merge CPU, CUDA, and lite Docker images into a single unified image.
One tag (latest) works on all platforms: amd64 (NVIDIA CUDA) and arm64 (CPU).
GPU auto-detected at runtime. All ML models and packages baked in.

Key changes:
- Platform-conditional Dockerfile (nvidia/cuda on amd64, node on arm64)
- tini as PID 1 for proper signal handling
- Fix FILES_STORAGE_PATH data loss bug
- Fix RealESRGAN upscaler (was broken, always fell back to Lanczos)
- Fix PaddleOCR language codes and stdout corruption
- Simplified CI/CD (single build, single tag)
- Expanded model pre-download with verification
- Shutdown timeout, improved health endpoint
- Remove unused lama-cleaner
2026-04-10 13:21:06 +08:00
semantic-release-bot 7bc979f677 chore(release): 1.11.0 [skip ci]
# [1.11.0](https://github.com/stirling-image/stirling-image/compare/v1.10.0...v1.11.0) (2026-04-07)

### Features

* **docs:** auto-generate llms.txt via vitepress-plugin-llms ([6a362d6](https://github.com/stirling-image/stirling-image/commit/6a362d6443cd85ac58a46f5b5cf29f9b6ff3020c))
2026-04-07 16:53:54 +00:00
Siddharth Kumar Sah 6a362d6443 feat(docs): auto-generate llms.txt via vitepress-plugin-llms
Replace static llms.txt and llms-full.txt with auto-generated versions
that stay in sync with docs on every build. The plugin also generates
per-page .md files for individual page fetching by LLMs.
2026-04-08 00:53:26 +08:00
semantic-release-bot d4d421d3ff chore(release): 1.10.0 [skip ci]
# [1.10.0](https://github.com/stirling-image/stirling-image/compare/v1.9.0...v1.10.0) (2026-04-07)

### Features

* add content-aware resize API route and registration ([d464942](https://github.com/stirling-image/stirling-image/commit/d464942cd9a7c1fecc837a14211e3fc5030d5cee))
* add content-aware resize toggle to resize settings UI ([aace4ca](https://github.com/stirling-image/stirling-image/commit/aace4caf0c5b10059a31e9dff5476d11b34b4323))
* add seam carving AI bridge module ([d3b6462](https://github.com/stirling-image/stirling-image/commit/d3b646207d3312aea9e12cc9435649b039bc4ac8))
* add seam carving Python script with face protection ([1460ab7](https://github.com/stirling-image/stirling-image/commit/1460ab7a4ad8235714ebd72ab1f8092baa456032))
2026-04-07 16:11:15 +00:00
stirling-imageandGitHub 28d0dfb45d Merge pull request #28 from stirling-image/feat/content-aware-resize
feat: add content-aware resize (seam carving) to resize tool
2026-04-08 00:10:50 +08:00
Siddharth Kumar Sah aace4caf0c feat: add content-aware resize toggle to resize settings UI 2026-04-07 23:33:34 +08:00
Siddharth Kumar Sah d464942cd9 feat: add content-aware resize API route and registration 2026-04-07 23:29:21 +08:00
semantic-release-bot 14deda12b8 chore(release): 1.9.0 [skip ci]
# [1.9.0](https://github.com/stirling-image/stirling-image/compare/v1.8.1...v1.9.0) (2026-04-07)

### Features

* add stitch API route handler ([1716468](https://github.com/stirling-image/stirling-image/commit/171646886f678b0f98140d378e675443bc7c737f))
* add stitch settings UI component ([330bfcf](https://github.com/stirling-image/stirling-image/commit/330bfcf162deeb30fb573702b554d304500eebde))
* register stitch component in web tool registry ([7ec5d86](https://github.com/stirling-image/stirling-image/commit/7ec5d86d9123696e84ebeae603ec09ce4c1477d3))
* register stitch route in API tool registry ([66520cd](https://github.com/stirling-image/stirling-image/commit/66520cdd0ee49bbecffdb3e248c03d2763aa5d08))
* register stitch tool in shared constants and i18n ([fbbbe70](https://github.com/stirling-image/stirling-image/commit/fbbbe70a35a6cd3cbc389503cff3333b85392871))
2026-04-07 14:21:16 +00:00
Siddharth Kumar Sah 7ec5d86d91 feat: register stitch component in web tool registry 2026-04-07 21:55:49 +08:00
Siddharth Kumar Sah 330bfcf162 feat: add stitch settings UI component 2026-04-07 21:54:55 +08:00
Siddharth Kumar Sah 66520cdd0e feat: register stitch route in API tool registry 2026-04-07 21:52:28 +08:00
Siddharth Kumar Sah 171646886f feat: add stitch API route handler 2026-04-07 21:51:24 +08:00
semantic-release-bot c598230331 chore(release): 1.8.1 [skip ci]
## [1.8.1](https://github.com/stirling-image/stirling-image/compare/v1.8.0...v1.8.1) (2026-04-07)

### Bug Fixes

* add variant diagnostics to health endpoint and lite mode banner ([3be388e](https://github.com/stirling-image/stirling-image/commit/3be388e12f8bc6a35d30b1b94e2772f9e005bccd))
2026-04-07 10:35:05 +00:00
Siddharth Kumar Sah 3be388e12f fix: add variant diagnostics to health endpoint and lite mode banner
Users running lite mode had no way to tell why AI tools were greyed out.
Now the public health endpoint reports the variant, and a visible banner
appears in the tool panel when running in lite mode.
2026-04-07 18:34:00 +08:00
semantic-release-bot cd2db4afdd chore(release): 1.8.0 [skip ci]
# [1.8.0](https://github.com/stirling-image/stirling-image/compare/v1.7.7...v1.8.0) (2026-04-06)

### Bug Fixes

* filter unsafe round-trip keys server-side in editMetadata ([a430e91](https://github.com/stirling-image/stirling-image/commit/a430e913245f6c83194cc1e47c34a327d80840d5))

### Features

* add edit-metadata API route with inspect and edit endpoints ([5284d5e](https://github.com/stirling-image/stirling-image/commit/5284d5ece5dd393bf346f29d4d95b506f0c87c94))
* add edit-metadata UI component with granular strip support ([492eeb0](https://github.com/stirling-image/stirling-image/commit/492eeb0f962b50db598b5ac50cc9c2ceea9ce605))
* add EditMetadataOptions type and exif-reader dep to image-engine ([723c794](https://github.com/stirling-image/stirling-image/commit/723c79491ecbfc9795ba6bbdacc8e47caa903719))
* extract shared metadata parsing utilities into image-engine ([7fba05e](https://github.com/stirling-image/stirling-image/commit/7fba05e1dccb4fd370848bf6b20276a9edffbd86))
* implement editMetadata operation in image-engine ([939bb04](https://github.com/stirling-image/stirling-image/commit/939bb049413202a4df37d1affa3765cd9a41e9e2))
* register edit-metadata in shared constants and i18n ([6ac366b](https://github.com/stirling-image/stirling-image/commit/6ac366b1556b285c6764927267fcb3b885b90fe9))
2026-04-06 14:09:07 +00:00
stirling-imageandGitHub b748b8e3b5 Merge pull request #22 from stirling-image/feat/edit-metadata
feat: add Edit Metadata tool
2026-04-06 22:08:43 +08:00
semantic-release-bot b387d2d17a chore(release): 1.7.7 [skip ci]
## [1.7.7](https://github.com/stirling-image/stirling-image/compare/v1.7.6...v1.7.7) (2026-04-06)

### Bug Fixes

* improve AI tool reliability for face detection and background removal ([#25](https://github.com/stirling-image/stirling-image/issues/25)) ([2eb77fe](https://github.com/stirling-image/stirling-image/commit/2eb77fe0f2a2340e69cb927ef7abd32eaa0400be))
2026-04-06 14:01:20 +00:00
2eb77fe0f2 fix: improve AI tool reliability for face detection and background removal (#25)
- Replace OpenCV Haar Cascades with MediaPipe for face detection, using
  short-range model first with full-range fallback for better accuracy
- Add auto-orient to remove-background route for EXIF-rotated photos
- Change default background removal model from u2net to birefnet-general-lite
- Fix flaky test by setting SQLite busy_timeout before journal_mode pragma

Co-authored-by: Siddharth Kumar Sah <siddharth123sk@gmail.com>
2026-04-06 22:00:48 +08:00
semantic-release-bot 3c4562c9ce chore(release): 1.7.6 [skip ci]
## [1.7.6](https://github.com/stirling-image/stirling-image/compare/v1.7.5...v1.7.6) (2026-04-06)

### Bug Fixes

* batch SSE progress and non-AI processing UX ([#24](https://github.com/stirling-image/stirling-image/issues/24)) ([dc70cdb](https://github.com/stirling-image/stirling-image/commit/dc70cdbdd589601446c2794fe85019c5e8252714))
2026-04-06 13:25:24 +00:00
dc70cdbdd5 fix: batch SSE progress and non-AI processing UX (#24)
Batch progress was broken because JobProgress events lacked a `type`
field. The frontend checks `data.type === "batch"` to distinguish batch
from single-file SSE events, so batch progress was silently discarded
and multi-file processing appeared stuck at 15%.

Also improves the processing UX for non-AI (Sharp-based) tools: the
progress bar now pulses during the server processing phase and shows
a "This may take a moment" hint after 10 seconds.

Co-authored-by: Siddharth Kumar Sah <siddharth123sk@gmail.com>
2026-04-06 21:25:00 +08:00
semantic-release-bot 3018137548 chore(release): 1.7.5 [skip ci]
## [1.7.5](https://github.com/stirling-image/stirling-image/compare/v1.7.4...v1.7.5) (2026-04-06)

### Bug Fixes

* add server-side logging to AI tool routes ([#23](https://github.com/stirling-image/stirling-image/issues/23)) ([75c7f13](https://github.com/stirling-image/stirling-image/commit/75c7f135feda6af190f1dd1f92dcf27d17229c31))
2026-04-06 13:00:53 +00:00
75c7f135fe fix: add server-side logging to AI tool routes (#23)
AI routes (remove-background, erase-object, ocr, blur-faces, upscale)
were silently swallowing errors - failures returned HTTP 422 to the
client but never appeared in server logs. This made it impossible for
self-hosters to diagnose issues like 504 timeouts from reverse proxies.

Adds request.log.info() at processing start (tool name, image size, key
settings) and request.log.error() in catch blocks, matching the existing
tool-factory pattern.

Co-authored-by: Siddharth Kumar Sah <siddharth123sk@gmail.com>
2026-04-06 21:00:29 +08:00
Siddharth Kumar Sah 492eeb0f96 feat: add edit-metadata UI component with granular strip support 2026-04-06 19:34:00 +08:00
Siddharth Kumar Sah d8bb2f1d61 refactor: extract shared metadata UI components from strip-metadata 2026-04-06 19:30:47 +08:00
Siddharth Kumar Sah 5284d5ece5 feat: add edit-metadata API route with inspect and edit endpoints 2026-04-06 19:27:33 +08:00
Siddharth Kumar Sah 1312858cf1 refactor: use shared metadata parsing in strip-metadata route 2026-04-06 19:24:05 +08:00
semantic-release-bot 48c803acfa chore(release): 1.7.4 [skip ci]
## [1.7.4](https://github.com/stirling-image/stirling-image/compare/v1.7.3...v1.7.4) (2026-04-06)

### Bug Fixes

* batch file ordering and format preservation for image tools ([#20](https://github.com/stirling-image/stirling-image/issues/20)) ([5d85562](https://github.com/stirling-image/stirling-image/commit/5d8556254f0684de7c3a1a177a28f8d1e0818cd3)), closes [#13](https://github.com/stirling-image/stirling-image/issues/13) [#14](https://github.com/stirling-image/stirling-image/issues/14)
2026-04-06 04:54:19 +00:00
5d8556254f fix: batch file ordering and format preservation for image tools (#20)
* feat: add resolveOutputFormat utility for input format preservation

* fix: preserve file order in batch processing with X-File-Results header

Collect all results before streaming the ZIP to guarantee upload order.
Replace X-File-Order with index-based X-File-Results header that maps
each upload index to its processed filename, handling failures and
duplicate filenames correctly.

Closes #13

* fix: use X-File-Results for index-based batch file matching

The frontend now matches processed files to entries by upload index
instead of fragile name/position matching.

* feat: preserve input format in smart-crop with quality control

Smart crop now outputs in the same format as the input (JPG in, JPG out)
instead of always converting to PNG. Adds an optional quality setting
(default 95) for lossy formats.

Closes #14

* feat: add output quality slider to smart crop settings UI

* feat: preserve input format in crop tool

* feat: preserve input format in color adjustment tools

Applies to brightness-contrast, saturation, color-channels, and
color-effects tool routes.

* refactor: avoid double encode in smart-crop content mode

For the simple trim path (no pad-to-square), chain .toFormat() on the
trim pipeline directly instead of creating a second Sharp instance.
This eliminates a redundant intermediate encode that degraded quality
for lossy formats. Also use trimmed.info dimensions instead of a
separate metadata() call for the pad-to-square path.

---------

Co-authored-by: Siddharth Kumar Sah <siddharth123sk@gmail.com>
2026-04-06 12:53:53 +08:00
Siddharth Kumar Sah fe80287cb4 docs: replace localhost links with generic path references in API docs
Clickable localhost:1349 links are misleading on the GitHub Pages site
since users may not have Stirling Image running locally. Use plain path
references instead so it is clear these live on their own instance.
2026-04-06 11:33:50 +08:00
semantic-release-bot 2eb74f242e chore(release): 1.7.3 [skip ci]
## [1.7.3](https://github.com/stirling-image/stirling-image/compare/v1.7.2...v1.7.3) (2026-04-06)

### Bug Fixes

* **docs:** correct broken llms.txt links on REST API page ([b46d250](https://github.com/stirling-image/stirling-image/commit/b46d2504e17d06b075964e063de19529a42bc363))
2026-04-06 03:30:11 +00:00
Siddharth Kumar Sah b46d2504e1 fix(docs): correct broken llms.txt links on REST API page
The links used /Stirling-Image/ (wrong casing) which VitePress then
prefixed with the base /stirling-image/, producing a double-prefixed
404 path. Remove the manual base so VitePress prepends it automatically.
2026-04-06 11:27:17 +08:00
semantic-release-bot 42525db6dc chore(release): 1.7.2 [skip ci]
## [1.7.2](https://github.com/stirling-image/stirling-image/compare/v1.7.1...v1.7.2) (2026-04-05)

### Bug Fixes

* use torch.cuda for GPU detection instead of onnxruntime providers ([8d2f401](https://github.com/stirling-image/stirling-image/commit/8d2f40151277c1e00a9ca20a6956e37d2c204d48))
2026-04-05 14:24:35 +00:00
semantic-release-bot e8572358e9 chore(release): 1.7.1 [skip ci]
## [1.7.1](https://github.com/stirling-image/stirling-image/compare/v1.7.0...v1.7.1) (2026-04-05)

### Bug Fixes

* prevent false GPU detection when CUDA image runs without GPU ([a291d1f](https://github.com/stirling-image/stirling-image/commit/a291d1fe0ba6100f717441f346a6df77df7e8fdd))
2026-04-05 14:04:25 +00:00
semantic-release-bot 609fd57de8 chore(release): 1.7.0 [skip ci]
# [1.7.0](https://github.com/stirling-image/stirling-image/compare/v1.6.0...v1.7.0) (2026-04-05)

### Bug Fixes

* **web:** skip empty Authorization header for forward-auth proxy compatibility ([d0c69d6](https://github.com/stirling-image/stirling-image/commit/d0c69d6a4670ce6ffa397d8b4432687ed9b4d395)), closes [#6](https://github.com/stirling-image/stirling-image/issues/6)

### Features

* add GPU/CUDA acceleration support (:cuda Docker tag) ([29a382e](https://github.com/stirling-image/stirling-image/commit/29a382e9e0eb1ce8a7d08e68c41443495a52d3f8))
2026-04-05 12:36:40 +00:00
Siddharth Kumar Sah f1ae974de9 docs: add CUDA tag to README, getting-started, deployment, benchmarks
- README: add CUDA docker run example alongside full and lite
- Getting started: add GPU acceleration tip with speedup numbers
- Deployment: add CUDA row to variants table
- Docker tags: expand benchmarks with warm + cold start tables
2026-04-05 20:35:24 +08:00
Siddharth Kumar Sah 9381564269 docs: add CUDA/GPU documentation and benchmarks
- Add :cuda tag to Docker Tags docs with setup, benchmarks, compose example
- Add GPU acceleration tip to AI engine docs
- Include benchmark table from RTX 4070 testing
2026-04-05 20:04:04 +08:00
Siddharth Kumar Sah 29a382e9e0 feat: add GPU/CUDA acceleration support (:cuda Docker tag)
Add a :cuda Docker image tag that auto-detects NVIDIA GPU at runtime
and falls back gracefully to CPU. Same pattern as Immich.

- New gpu.py shared utility for cached CUDA detection
- Background removal (rembg): pass CUDAExecutionProvider to ONNX Runtime
- Upscaling (Real-ESRGAN): use CUDA device + FP16 when GPU available
- OCR (PaddleOCR): enable use_gpu when CUDA detected
- Dispatcher reports GPU status at startup via readiness signal
- Admin health endpoint exposes GPU availability
- Dockerfile uses ARG GPU=false with conditional NVIDIA CUDA base image
- docker-compose.gpu.yml override for GPU users
- CI/CD workflows build and publish :cuda tag (amd64 only)

Three tags: :latest (CPU), :lite (no AI), :cuda (GPU with CPU fallback)
2026-04-05 19:12:45 +08:00
Siddharth Kumar SahandJulian Nadeau d0c69d6a46 fix(web): skip empty Authorization header for forward-auth proxy compatibility
Centralize duplicated getToken() + Bearer header logic into a single
formatHeaders() helper in lib/api.ts. When no token exists, the
Authorization header is omitted entirely instead of sending an empty
Bearer token, which breaks forward-auth proxies like Authelia behind
Caddy.

Changes:
- Add formatHeaders() with try-catch around localStorage access
- Replace 20+ duplicated getToken() definitions across tool components
- Migrate all call sites including file-details, settings, change-password
- Update tests to verify header omission on empty token

Based on the fix proposed by @jules2689 in #6, with improvements:
file placement (lib/api.ts vs components), localStorage error handling,
simplified truthiness check, and complete call-site coverage.

Co-Authored-By: Julian Nadeau <julian@jnadeau.ca>
2026-04-05 18:41:06 +08:00
Siddharth Kumar Sah f21579c7a3 docs: fix license (MIT -> AGPLv3), add lite refs to llms.txt and ai.md
Both llms.txt and llms-full.txt incorrectly said MIT. Also added lite
variant mention to the description and a warning callout on the AI
engine docs page noting AI tools are unavailable in the lite image.
2026-04-05 08:03:29 +08:00
Siddharth Kumar Sah be45d3ca80 docs: add lite image references across all documentation
README Quick Start now shows both :latest and :lite commands.
Getting Started adds a tip callout about the lite image.
Deployment page lists both variants with a comparison table and
updates the CI/CD description to mention both are built.
Developer guide adds the lite build command.
2026-04-05 08:01:18 +08:00
semantic-release-bot 30f36e6a5c chore(release): 1.6.0 [skip ci]
# [1.6.0](https://github.com/stirling-image/stirling-image/compare/v1.5.3...v1.6.0) (2026-04-04)

### Features

* lightweight Docker image without AI/ML tools (:lite tag) ([449a2fc](https://github.com/stirling-image/stirling-image/commit/449a2fc319e97cddfa71c29556e2d433dde78d6d)), closes [#1](https://github.com/stirling-image/stirling-image/issues/1)
2026-04-04 16:23:46 +00:00
stirling-imageandGitHub 449a2fc319 feat: lightweight Docker image without AI/ML tools (:lite tag)
Closes #1
2026-04-05 00:23:21 +08:00
semantic-release-bot 51f10abb35 chore(release): 1.5.3 [skip ci]
## [1.5.3](https://github.com/stirling-image/stirling-image/compare/v1.5.2...v1.5.3) (2026-04-04)

### Bug Fixes

* use heif-convert for HEIC decoding on Linux ([98553ed](https://github.com/stirling-image/stirling-image/commit/98553ed6743e11ff9af8e6fc718ce550d33a7f54))
2026-04-04 13:55:46 +00:00
Siddharth Kumar Sah 98553ed674 fix: use heif-convert for HEIC decoding on Linux
Linux libheif packages provide heif-convert instead of heif-dec (which
is macOS-only). The decoder now tries heif-convert first, then falls
back to heif-dec. Both accept the same argument syntax.
2026-04-04 21:55:19 +08:00
semantic-release-bot d2381af9cd chore(release): 1.5.2 [skip ci]
## [1.5.2](https://github.com/stirling-image/stirling-image/compare/v1.5.1...v1.5.2) (2026-04-04)

### Bug Fixes

* install HEVC codec plugins for CI HEIC tests ([8991cde](https://github.com/stirling-image/stirling-image/commit/8991cde0aba91ee50383eaf14ca0a80fcf45da55))
2026-04-04 13:51:05 +00:00
semantic-release-bot 169fb41d57 chore(release): 1.5.1 [skip ci]
## [1.5.1](https://github.com/stirling-image/stirling-image/compare/v1.5.0...v1.5.1) (2026-04-04)

### Bug Fixes

* install libheif-examples in CI for HEIC tests ([f07454d](https://github.com/stirling-image/stirling-image/commit/f07454d349cc5029636aa95bac7d67f505133424))
2026-04-04 13:41:45 +00:00
semantic-release-bot cafe52d55d chore(release): 1.5.0 [skip ci]
# [1.5.0](https://github.com/stirling-image/stirling-image/compare/v1.4.0...v1.5.0) (2026-04-04)

### Features

* add HEIC/HEIF format support for input and output ([6717c17](https://github.com/stirling-image/stirling-image/commit/6717c17a26262f1e45037b4cb454df9400c5930e))
2026-04-04 13:34:28 +00:00
Siddharth Kumar Sah 6717c17a26 feat: add HEIC/HEIF format support for input and output
Add bidirectional HEIC support using system libheif CLI tools (heif-enc/heif-dec)
for HEVC encoding/decoding, since Sharp's bundled libheif only supports AV1.

- HEIC input: all tools now accept iPhone HEIC photos via heif-dec pre-processing
- HEIC output: convert tool produces true HEIC (HEVC) via heif-enc
- Docker: adds libheif-examples package for heif-enc/heif-dec CLI tools
- Tests: full conversion matrix (7x7), unit tests, and Playwright e2e tests
- Docs: updated OpenAPI spec, image-engine docs, getting-started, llms-full.txt
2026-04-04 21:33:48 +08:00
semantic-release-bot 84283c16bd chore(release): 1.4.0 [skip ci]
# [1.4.0](https://github.com/stirling-image/stirling-image/compare/v1.3.1...v1.4.0) (2026-04-04)

### Features

* add "Crop to Content" mode to smart crop tool ([93ad7cd](https://github.com/stirling-image/stirling-image/commit/93ad7cdfc170717a980ba12a2d90e8e3a9109989)), closes [#7](https://github.com/stirling-image/stirling-image/issues/7)
2026-04-04 11:50:22 +00:00