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

### Bug Fixes

* complete RBAC implementation lost during merge ([cc8a272](https://github.com/stirling-image/stirling-image/commit/cc8a27239b02a63ca88abc3e363c8a46f89674e8))

### Features

* add backend permission map and requirePermission middleware ([1a99571](https://github.com/stirling-image/stirling-image/commit/1a995711535a1525e709cdd7bff75361f457e942))
* add permission checks and admin override to API key routes ([d776680](https://github.com/stirling-image/stirling-image/commit/d776680f2d2342e35b84821792d6c24ae7e0ffbc))
* add permission checks and admin override to pipeline routes ([59f40db](https://github.com/stirling-image/stirling-image/commit/59f40dbfd4a97f8691b5fbbf6d338063c389987b))
* add permission checks and ownership scoping to user-files routes ([86ba698](https://github.com/stirling-image/stirling-image/commit/86ba69825a1dd87c9f868d79cd806b7d594cce1b))
* add shared Permission and Role types ([2f594e9](https://github.com/stirling-image/stirling-image/commit/2f594e96057c72bf107f3012426e87af5f97eb94))
* add tools:use permission check to tool, batch, pipeline, and upload routes ([885ace5](https://github.com/stirling-image/stirling-image/commit/885ace54f09b3301989f8aa404c15f60e19c054d))
* extend useAuth hook with role and permissions from session ([e0ba8be](https://github.com/stirling-image/stirling-image/commit/e0ba8be7b3211299c8cde90b2d22e7796eee2206))
* filter settings tabs by user permissions, remove admin fallback ([bcbd24a](https://github.com/stirling-image/stirling-image/commit/bcbd24a2395b93b64dbbf638ba0138f9ec9ba9da))
* include permissions and teamName in login/session responses ([4943177](https://github.com/stirling-image/stirling-image/commit/49431772ec6a02eae8aced48da92ef87a6c89afb))
* replace requireAdmin with requirePermission on all routes ([af7f57d](https://github.com/stirling-image/stirling-image/commit/af7f57d52f49c8f8412876639076084c96eba284))
2026-04-10 13:26:01 +00:00
Siddharth Kumar Sah cc8a27239b fix: complete RBAC implementation lost during merge
Several RBAC features from feat/rbac-permissions were silently lost
during the merge into main. This restores and completes them:

- Add permissions and teamName to login/session API responses
- Export Permission and Role types from shared package
- Filter settings tabs by user permissions in frontend
- Extend useAuth hook with role, permissions, and hasPermission
- Restrict teams listing to admin only
- Add admin override for API keys, files, and pipelines listing
- Add ownership scoping to file access, download, and delete routes
- Register userFileRoutes in integration test server
- Mock auth import in unit permissions test to avoid SQLite lock
2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah bcbd24a239 feat: filter settings tabs by user permissions, remove admin fallback 2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah e0ba8be7b3 feat: extend useAuth hook with role and permissions from session 2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah 59f40dbfd4 feat: add permission checks and admin override to pipeline routes
Replace requireAuth with requirePermission("pipelines:own") on pipeline
save/list/delete routes. Admin users with pipelines:all can see and
delete all pipelines. Unauthorized delete returns 404 to avoid leaking
resource existence.
2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah 86ba69825a feat: add permission checks and ownership scoping to user-files routes
Replace getAuthUser (optional auth) with requirePermission("files:own") on all
user-files routes, enforcing mandatory authentication and ownership checks.
Admin users with files:all permission bypass ownership restrictions. Returns 404
(not 403) for ownership failures to avoid leaking resource existence.
2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah d776680f2d feat: add permission checks and admin override to API key routes
Replace requireAuth with requirePermission(apikeys:own). Admin users
with apikeys:all can see and delete any user's keys.
2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah af7f57d52f feat: replace requireAdmin with requirePermission on all routes
Migrate settings, teams, branding, and user management routes to use
the new permission-based authorization system. Remove requireAdmin
function entirely.
2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah 885ace54f0 feat: add tools:use permission check to tool, batch, pipeline, and upload routes 2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah 49431772ec feat: include permissions and teamName in login/session responses 2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah 1a99571153 feat: add backend permission map and requirePermission middleware
Create the RBAC permission module that maps roles to permissions and
provides a requirePermission middleware to replace requireAdmin. Update
the test server to use requirePermission for the admin health check.
2026-04-10 21:25:30 +08:00
Siddharth Kumar Sah 1778f7266b fix(a11y): add keyboard support to pdf-to-image upload dropzone 2026-04-10 20:56:13 +08:00
Siddharth Kumar Sah 5fd294c994 feat: register pdf-to-image in frontend tool registry 2026-04-10 20:56:13 +08:00
Siddharth Kumar Sah 44bbfba80d feat: add pdf-to-image frontend settings component 2026-04-10 20:56:13 +08:00
Siddharth Kumar Sah 30155c1c70 feat: add pdf-to-image backend route with info and processing endpoints 2026-04-10 20:56:13 +08:00
Siddharth Kumar Sah d650f301ca chore: add mupdf dependency for PDF-to-image tool 2026-04-10 20:56:13 +08:00
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