Commit graph

86 commits

Author SHA1 Message Date
Siddharth Kumar Sah
85b1cfc10a chore: rename Stirling-Image to ashim across entire codebase
Complete rebrand from Stirling-Image to ashim following the project
move to https://github.com/ashim-hq/ashim.

Changes across 117 files:
- Package scope: @stirling-image/* → @ashim/*
- GitHub URLs: stirling-image/stirling-image → ashim-hq/ashim
- Docker Hub: stirlingimage/stirling-image → ashimhq/ashim
- GitHub Pages: stirling-image.github.io → ashim-hq.github.io
- All branding text: "Stirling Image" → "ashim"
- Docker service/volumes/user: stirling → ashim
- Database: stirling.db → ashim.db
- localStorage keys: stirling-token → ashim-token
- Environment variables: STIRLING_GPU → ASHIM_GPU
- Python cache dirs: .cache/stirling-image → .cache/ashim
- SVG filter IDs, test prefixes, and all other references
2026-04-14 20:55:42 +08:00
stirling-image
a1e11dff74
feat(gif-tools): SOTA upgrade with 6 processing modes (#52)
* feat(find-duplicates): upgrade to 128-bit dHash with metadata and thumbnails

* feat(find-duplicates): add custom-results display mode and duplicate store

* feat(find-duplicates): add results overview grid and detail comparison view

* feat(find-duplicates): overhaul settings with sensitivity presets and download actions

* feat(find-duplicates): update i18n description

* chore: replace jsqr with zxing-wasm for barcode reading

* feat(barcode-read): rewrite backend with zxing-wasm for all barcode types

* feat(barcode-read): rewrite frontend with multi-file, results table, progress, export

- Multi-file sequential processing with per-file progress
- Structured results table with type badges and copy per-result
- Copy All and Export CSV functionality
- Thorough scan toggle (maps to tryHarder in zxing-wasm)
- Before/after view shows annotated image with bounding boxes
- Updated tool description in constants and i18n

* feat(stitch): update tool name and description for redesign

* feat(stitch): add grid layout, alignment, border, radius, quality, and new resize modes

* feat(stitch): redesign settings UI with grid, alignment, border, radius, quality

* test(stitch): add stitch to e2e tool navigation suite

* feat(vectorize): redesign with dual-engine backend and preset-driven UI

- Backend: potrace for B&W, VTracer (@neplex/vectorizer) for full-color vectorization
- Frontend: 5 presets (logo, illustration, photo, sketch, custom)
- Settings: color precision, gradient step, detail, smoothing, corner threshold, invert
- Updated OpenAPI spec and i18n description

* feat(border): redesign with presets, shadow, padding color, swatches

- Add 8 one-click presets (Clean White, Gallery Black, Shadow, Rounded, Polaroid, Vintage, Minimal, Cinematic)
- Implement proper shadow rendering with blur, offset X/Y, color, opacity
- Add padding color control (was hardcoded white)
- Add color swatches for quick color selection
- Wrap in form for Enter key submission
- Add smart validation (requires at least one effect active)
- Align frontend/backend slider ranges
- Organize UI with sections and collapsible shadow toggle

* feat(split): overhaul image splitting with live grid overlay and tile preview

- Add interactive-split display mode with SplitCanvas component
- Live SVG grid overlay on uploaded image showing split boundaries
- Two split modes: Grid (NxM) and Tile Size (px dimensions)
- 9 grid presets (2x1, 1x2, 2x2, 3x1, 1x3, 3x3, 2x3, 3x2, 4x4)
- Output format selection (original/PNG/JPG/WebP) with quality slider
- Post-split tile preview thumbnails with individual download
- Download All as ZIP button
- HEIC/HEIF preview with loading spinner
- Backend: tile-size mode, output format conversion, quality control
- Zustand store for split state management

* feat(split): rewrite backend and frontend settings

Backend: tile-size mode, output format conversion, quality control.
Frontend: split modes, presets, format selector, tile preview grid.

* feat(border): add live CSS preview and remove before/after slider

- Add imageWrapperStyle prop to ImageViewer for live border preview
- Add onImageStyle callback through tool-page to settings components
- Change border displayMode to no-comparison (no slider)
- BorderControls sends live CSS styles (border, padding, radius, shadow)
- Preview updates instantly as user adjusts sliders or clicks presets

* fix: repair i18n file corrupted by formatter during merge conflict resolution

* feat(border): enable live CSS preview in right pane as settings change

* fix(border): keep CSS preview visible after processing for WYSIWYG consistency

* chore(gif-tools): scaffold for SOTA upgrade

- Add animated GIF test fixture (3 frames, 100x100)
- Update tool description to reflect new capabilities
- Add fflate dependency to API for ZIP creation

* feat(gif-tools): rewrite backend with 6 processing modes

Modes: resize (with percentage), optimize (colors/dither/effort),
speed (delay manipulation), reverse (frame reorder), extract
(single/range/all with ZIP), rotate (90/180/270 + flip).

Adds /api/v1/tools/gif-tools/info metadata endpoint.

* test(gif-tools): add integration tests for all 6 modes

Tests metadata endpoint, resize (pixel + percentage), optimize,
speed, reverse, extract (single/range/all), and rotate (angle + flip).

Fix animated.gif fixture to be a real 3-frame animation (was a single
100x300 frame). Fix reverse and rotate modes to process frames
individually and reassemble via GIF binary concatenation, since
Sharp 0.33.x loses page-height metadata when reconstructing from raw
pixel data.

* feat(gif-tools): rewrite frontend with tabbed 6-mode UI

- useGifInfo hook for metadata (frame count, dimensions, duration)
- Info bar showing GIF properties
- 3x2 mode grid: Resize, Optimize, Speed, Reverse, Extract, Rotate
- Animation modes disabled for static images
- Loop control (infinite/once/custom)
- Batch processing support

* test(gif-tools): add to representative tools in e2e suite

---------

Co-authored-by: Siddharth Kumar Sah <siddharth123sk@gmail.com>
2026-04-13 16:23:07 +08:00
semantic-release-bot
2ac7b6875b chore(release): 1.14.0 [skip ci]
# [1.14.0](https://github.com/stirling-image/stirling-image/compare/v1.13.0...v1.14.0) (2026-04-10)

### Bug Fixes

* add FILES_STORAGE_PATH to Dockerfile ENV to prevent data loss ([b575243](b575243e9a))
* add shutdown timeout and improve health endpoint ([986ad37](986ad37bb5))
* address code review findings before merge ([caf65bc](caf65bc469))
* correct PaddleOCR language codes for model download and OCR ([e1ee571](e1ee57103c))
* force CPU mode in download_models.py for build-time compatibility ([b4b59a7](b4b59a7500))
* handle paddlepaddle-gpu CUDA import at build time gracefully ([0083a74](0083a741a9))
* install cuda-compat stubs for build-time PaddlePaddle import ([d31d665](d31d66556e))
* load RealESRGAN pretrained weights for actual AI upscaling ([fa9569c](fa9569c920))
* revert to npx tsx in CMD for pnpm compatibility ([e55253d](e55253dee0))
* simplify smoke test to CPU-only imports for build-time compat ([3481663](3481663960))
* skip RealESRGAN import check on arm64 in smoke test ([1e2ef52](1e2ef52846))
* split paddlepaddle-gpu and paddleocr installs, use --extra-index-url ([74183e8](74183e8dc1))
* suppress ML library stdout noise in ocr.py and upscale.py ([c0b419d](c0b419de21))
* use PaddlePaddle GPU package index for CUDA wheels ([dd9528f](dd9528f53c))
* use platform-specific mediapipe version for arm64 compatibility ([7face19](7face19238))

### Features

* expand model pre-download with verification and smoke test ([a9e3b96](a9e3b96887))
* simplify CI to single unified Docker build ([b385a2e](b385a2eabb))
* simplify compose to single file, add log rotation ([84f7057](84f7057a49))
* unified Docker image with GPU auto-detection ([6c3eb3b](6c3eb3b876))
2026-04-10 14:13:37 +00:00
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](cc8a27239b))

### Features

* add backend permission map and requirePermission middleware ([1a99571](1a99571153))
* add permission checks and admin override to API key routes ([d776680](d776680f2d))
* add permission checks and admin override to pipeline routes ([59f40db](59f40dbfd4))
* add permission checks and ownership scoping to user-files routes ([86ba698](86ba69825a))
* add shared Permission and Role types ([2f594e9](2f594e9605))
* add tools:use permission check to tool, batch, pipeline, and upload routes ([885ace5](885ace54f0))
* extend useAuth hook with role and permissions from session ([e0ba8be](e0ba8be7b3))
* filter settings tabs by user permissions, remove admin fallback ([bcbd24a](bcbd24a239))
* include permissions and teamName in login/session responses ([4943177](49431772ec))
* replace requireAdmin with requirePermission on all routes ([af7f57d](af7f57d52f))
2026-04-10 13:26:01 +00: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](b0083e2b08))
2026-04-10 05:45:42 +00: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](6a362d6443))
2026-04-07 16:53:54 +00: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](d464942cd9))
* add content-aware resize toggle to resize settings UI ([aace4ca](aace4caf0c))
* add seam carving AI bridge module ([d3b6462](d3b646207d))
* add seam carving Python script with face protection ([1460ab7](1460ab7a4a))
2026-04-07 16:11:15 +00: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](171646886f))
* add stitch settings UI component ([330bfcf](330bfcf162))
* register stitch component in web tool registry ([7ec5d86](7ec5d86d91))
* register stitch route in API tool registry ([66520cd](66520cdd0e))
* register stitch tool in shared constants and i18n ([fbbbe70](fbbbe70a35))
2026-04-07 14:21:16 +00: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](3be388e12f))
2026-04-07 10:35:05 +00: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](a430e91324))

### Features

* add edit-metadata API route with inspect and edit endpoints ([5284d5e](5284d5ece5))
* add edit-metadata UI component with granular strip support ([492eeb0](492eeb0f96))
* add EditMetadataOptions type and exif-reader dep to image-engine ([723c794](723c79491e))
* extract shared metadata parsing utilities into image-engine ([7fba05e](7fba05e1dc))
* implement editMetadata operation in image-engine ([939bb04](939bb04941))
* register edit-metadata in shared constants and i18n ([6ac366b](6ac366b155))
2026-04-06 14:09:07 +00: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](2eb77fe0f2))
2026-04-06 14:01:20 +00: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](dc70cdbdd5))
2026-04-06 13:25:24 +00: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](75c7f135fe))
2026-04-06 13:00:53 +00: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](5d8556254f)), 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
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](b46d2504e1))
2026-04-06 03:30:11 +00: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](8d2f401512))
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](a291d1fe0b))
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](d0c69d6a46)), closes [#6](https://github.com/stirling-image/stirling-image/issues/6)

### Features

* add GPU/CUDA acceleration support (:cuda Docker tag) ([29a382e](29a382e9e0))
2026-04-05 12:36:40 +00: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](449a2fc319)), closes [#1](https://github.com/stirling-image/stirling-image/issues/1)
2026-04-04 16:23:46 +00: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](98553ed674))
2026-04-04 13:55:46 +00: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](8991cde0ab))
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](f07454d349))
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](6717c17a26))
2026-04-04 13:34:28 +00: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](93ad7cdfc1)), closes [#7](https://github.com/stirling-image/stirling-image/issues/7)
2026-04-04 11:50:22 +00:00
semantic-release-bot
dba3f65d8c chore(release): 1.3.1 [skip ci]
## [1.3.1](https://github.com/stirling-image/stirling-image/compare/v1.3.0...v1.3.1) (2026-04-04)

### Bug Fixes

* default theme to light instead of following system preference ([30908ed](30908ed058))
2026-04-04 11:42:34 +00:00
semantic-release-bot
bc2d9bcea1 chore(release): 1.3.0 [skip ci]
# [1.3.0](https://github.com/stirling-image/stirling-image/compare/v1.2.1...v1.3.0) (2026-04-04)

### Bug Fixes

* add XHR timeout to prevent UI spinning forever ([dae27f4](dae27f4d55))
* disable worker pool to prevent Docker processing hang ([5cd2b86](5cd2b864bd))
* log volume permission errors instead of swallowing them ([3642b7d](3642b7d3b2))
* replace crypto.randomUUID with generateId in AI tool settings ([659081c](659081c568))
* replace crypto.randomUUID with generateId in pipeline/automation ([b650dcd](b650dcd791))
* replace crypto.randomUUID with generateId in use-tool-processor ([7a5a753](7a5a753a2d))
* replace navigator.clipboard with copyToClipboard utility ([9f03543](9f0354388f))
* resolve multiple API and e2e test bugs ([9d62173](9d621734c3))
* restore navigator.clipboard and execCommand mocks in tests ([6b03a8b](6b03a8b8bd))

### Features

* add copyToClipboard() utility with execCommand fallback ([19ce303](19ce303123))
* add generateId() utility for non-secure context compatibility ([f61ab9f](f61ab9f85c))
2026-04-04 09:58:22 +00:00
semantic-release-bot
9f2dc00ec8 chore(release): 1.2.1 [skip ci]
## [1.2.1](https://github.com/stirling-image/stirling-image/compare/v1.2.0...v1.2.1) (2026-04-03)

### Bug Fixes

* handle volume permission issues for bind-mounted /data directory ([39afb2a](39afb2a403))
2026-04-03 16:17:11 +00:00
semantic-release-bot
7827a374b2 chore(release): 1.2.0 [skip ci]
# [1.2.0](https://github.com/stirling-image/stirling-image/compare/v1.1.0...v1.2.0) (2026-04-03)

### Features

* move theme toggle and GitHub button to top-right navbar ([47e53dc](47e53dc6cd))
2026-04-03 15:20:53 +00:00
semantic-release-bot
c9f7cf27ec chore(release): 1.1.0 [skip ci]
# [1.1.0](https://github.com/stirling-image/stirling-image/compare/v1.0.1...v1.1.0) (2026-04-03)

### Features

* add GitHub stars button to docs navbar and fix footer license ([47adfde](47adfde5cb))
2026-04-03 15:15:03 +00:00
Siddharth Kumar Sah
70b0ceed1c chore: switch to AGPLv3 dual-license
Replace MIT with AGPLv3 + commercial dual-license. Add copyright header
and dual-license notice to LICENSE, add CLA to CONTRIBUTING.md, update
README license section, and update all package.json license fields.
2026-04-03 23:07:58 +08:00
semantic-release-bot
acbe15def5 chore(release): 1.0.1 [skip ci]
## [1.0.1](https://github.com/stirling-image/stirling-image/compare/v1.0.0...v1.0.1) (2026-03-30)

### Bug Fixes

* allow SVG files in the convert tool ([4fa8dd0](4fa8dd0780))
2026-03-30 03:37:53 +00:00
semantic-release-bot
8d875fe6dc chore(release): 1.0.0 [skip ci]
# 1.0.0 (2026-03-30)

### Bug Fixes

* **a11y:** add aria-hidden to decorative GemLogo SVG ([d47548a](d47548a1d7))
* add remove-background settings to pipeline step configurator ([017a715](017a71562a))
* add SSE progress endpoint to public paths ([b3f590c](b3f590c8b3))
* **api:** allow Scalar docs through auth and CSP ([a46d500](a46d500012))
* **api:** resolve team name lookup and show server error messages ([620b8ad](620b8ad038))
* **api:** use content instead of spec.content for Scalar v1.49 API ([05854fd](05854fd61f))
* apply continuous progress bar to erase-object and OCR ([8db84a7](8db84a753c))
* **blur-faces:** switch from MediaPipe to OpenCV and auto-orient images ([f15102c](f15102c632))
* bridge.ts ENOENT check for Python venv fallback ([977b5f5](977b5f5ec0))
* clear search when adding a step from the tool picker ([7b1b019](7b1b019b77))
* continuous progress bar (no 100%→0% reset) ([28cd950](28cd950ede))
* **crop:** use percentCrop from onChange to fix inflated pixel values ([fbdbe09](fbdbe0949a))
* deduplicate react in Vite to prevent zustand hook errors in monorepo ([e8dfd2e](e8dfd2e628))
* **docker:** add build layer caching for faster Docker rebuilds ([14c630f](14c630ff23))
* **docker:** skip husky prepare script in production install ([200e7d1](200e7d10c1))
* **docs:** clean up footer llms.txt links ([a4d4d36](a4d4d36828))
* **docs:** ignore localhost dead links in VitePress build ([5c4b2a5](5c4b2a59d3))
* **docs:** remove hero logo from home page ([d3f6bac](d3f6bac62b))
* handle migration race condition in concurrent test workers ([ce51065](ce51065243))
* make port 1349 the UI port in all modes ([80bb0e2](80bb0e29a0))
* move health diagnostics behind admin auth ([818e587](818e5877a7))
* **ocr:** update PaddleOCR for v3 API and add Tesseract fallback ([f71c3c8](f71c3c8c05))
* pipeline only shows compatible tools and displays errors ([0410bf3](0410bf3461))
* prevent pipeline step settings from resetting on collapse ([9acbedf](9acbedf4b7))
* prevent stale closure in pipeline step callbacks ([8b20fef](8b20fef2d8))
* prevent useAuth infinite loop causing rate limit storms ([3b4f522](3b4f522bf4))
* Python bridge fallback only on missing venv, not script errors ([818d2ac](818d2acd94))
* reject HTML tags in settings API to prevent stored XSS ([8a62093](8a62093130))
* remove explicit pnpm version from CI to avoid conflict with packageManager ([8aa4c35](8aa4c35db0))
* remove Google Drive coming soon placeholder from files nav ([658954e](658954ea19))
* resolve 3 critical UX bugs - home upload, auth, and form submit ([de82900](de829003ad))
* resolve pipeline step race condition and infinite re-render loop ([aa1f87f](aa1f87fc91))
* resolve test failures from shared DB race conditions ([b474480](b474480698))
* resolve tsx not found in AI docs updater workflow ([b803b0e](b803b0e443))
* resolve TypeScript Uint8Array type error with fflate ([1d35db9](1d35db98bf))
* restore APP_VERSION import used by health endpoint ([7dfa7a2](7dfa7a295d))
* setError(null) was overriding setProcessing(true) ([b5cc452](b5cc452077))
* show checkerboard behind transparent images in before/after slider ([2e29501](2e29501ae6))
* simplify public health to static response, add 403 test ([4577d5c](4577d5c30e))
* streamline CI/CD — remove broken AI docs updater, fix Docker publish ([4f984c8](4f984c83ac))
* surface hidden errors and add batch rejection tests ([4a50428](4a504281a3))
* switch README Docker references from GHCR to Docker Hub ([fb84f5c](fb84f5ce8d))
* sync stepsRef during render, not useEffect ([748ac60](748ac607bc))
* **test:** add missing PNG fixture files to repo ([8474b0e](8474b0ee52))
* **test:** exclude e2e tests from vitest and fix CI test suite ([91acab9](91acab9967))
* **tests:** remove temp DB cleanup that races with other test files ([b08e006](b08e006512))
* trigger browser password save prompt on password change ([565b480](565b4805c7))
* **ui:** clean up settings, automate page, fullscreen logo, and README ([e3a8558](e3a8558134))
* unify project on port 1349, improve strip-metadata and UI components ([0e7348a](0e7348a0be))
* **upscale:** auto-orient images before upscaling and improve UI ([8ee4d7b](8ee4d7b2fb))
* use BiRefNet-Lite as default model and fix JSON parsing ([2bdc367](2bdc367767))
* use two-pass validation in settings PUT to prevent partial writes ([813fa6b](813fa6b7e8))
* use U2-Net as default model (fast, 2s) with BiRefNet as opt-in ([fb1d366](fb1d366d5f))
* white screen crash when uploading photos with null GPS EXIF data ([70c73d8](70c73d85c9))

### Features

* accept clientJobId in batch endpoint for SSE progress correlation ([2514078](2514078ea1))
* add authentication with default admin user ([3cb7123](3cb7123070))
* add automatic workspace file cleanup cron ([8bda220](8bda22033f))
* add CSS transform props to ImageViewer for live rotate/flip preview ([113bb75](113bb75733))
* add CSS transform props to ImageViewer for live rotate/flip preview ([267da78](267da78577))
* add Fastify API server with health check and env config ([1e7fb11](1e7fb11da0))
* add forced password change page on first login ([01cd1d9](01cd1d9f71))
* add format tools (SVG-to-raster, vectorize, GIF) and optimization (rename, favicon, image-to-PDF) ([b88d0d0](b88d0d0af8))
* add generic tool page template with settings panel and dropzone ([de3d544](de3d544ab6))
* add image-engine and ai stub packages ([19e4820](19e48203bb))
* add layout tools (collage, splitting, border/frame) ([b8aba17](b8aba1719c))
* add live preview callback to RotateSettings, rename button to Apply ([31a9439](31a943962d))
* add live preview callback to RotateSettings, rename button to Apply ([ec192e3](ec192e3d96))
* add login page with split layout matching Stirling-PDF style ([b7900ed](b7900ed4ef))
* add multi-stage Docker build with Python ML dependencies ([5c7d1e1](5c7d1e1f3d))
* add MultiImageViewer with arrow navigation and filmstrip ([815a8ed](815a8ed419))
* add password generator and browser save prompt on change-password page ([7c76c2a](7c76c2a2a0))
* add Phase 4 AI tools with Python bridge and 6 new tools ([5524939](5524939b6f))
* add privacy policy page and fix CSP blocking API docs ([7f17cb9](7f17cb98ce))
* add processAllFiles batch method to tool processor hook ([846a51a](846a51a9fd))
* add replace-color tool and update tool page routing ([9c55dd3](9c55dd32c4))
* add semantic-release for automated versioning and help dialog ([4807bd2](4807bd2726))
* add shared package with types, tool definitions, and constants ([f210de1](f210de1a13))
* add SideBySideComparison component for resize results ([28a8b10](28a8b10fa1))
* add SideBySideComparison component for resize results ([271cab6](271cab647b))
* add SQLite database with Drizzle ORM schema and migrations ([a24c6dd](a24c6dd014))
* add Stirling-PDF-style layout with sidebar, tool panel, dropzone, and theme toggle ([e920021](e920021da1))
* add Swagger/OpenAPI documentation at /api/docs ([4069f4d](4069f4db42))
* add theme system with dark/light/system support and persistence ([541e495](541e49576c))
* add ThumbnailStrip filmstrip component ([6521d70](6521d70238))
* add utility tools (image info, compare, duplicates, color palette, QR, barcode) ([0c3c64e](0c3c64eeac))
* add Vite + React SPA with Tailwind CSS and routing ([5fa012e](5fa012e44b))
* add watermark, text overlay, and image composition tools ([aeaf783](aeaf783ee4))
* add worker threads, persistent Python sidecar, graceful shutdown, and architectural improvements ([1cbdfa1](1cbdfa1590))
* **adjustments:** add real-time live preview for all color tools ([f357b18](f357b18ced))
* **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,web:** add batch processing with ZIP download and SSE progress ([ce64116](ce641168c1))
* **api:** add all remaining endpoints to OpenAPI spec ([9ed1090](9ed1090651))
* **api:** add all tool endpoints to OpenAPI spec ([2bf8689](2bf86894d0))
* **api:** add generic tool route factory for all image tools ([d53f673](d53f6733b8))
* **api:** add llms.txt and llms-full.txt endpoints ([cff1930](cff1930920))
* **api:** add logo upload/serve/delete routes with tests ([6a13065](6a13065706))
* **api:** add multipart file upload, workspace management, and download routes ([ece341e](ece341e8c4))
* **api:** add OpenAPI 3.1 spec skeleton with common schemas ([9488201](9488201806))
* **api:** add persistent file management helpers to frontend api module ([8a3a731](8a3a731267))
* **api:** add pipeline execution, save, and list endpoints ([263447a](263447a81e))
* **api:** add resize, crop, rotate, convert, compress, metadata, and color tool routes ([37112af](37112af779))
* **api:** add Scalar docs route and install dependency ([abb2916](abb2916233))
* **api:** add SingleFileProgress type and SSE update function ([7eddac5](7eddac5119))
* **api:** add teams CRUD routes and update auth team references ([ab370a7](ab370a74fe))
* **api:** add tool filtering and DB-backed cleanup settings ([acfff75](acfff754b5))
* **api:** add user files CRUD routes at /api/v1/files/* ([4e2aa58](4e2aa58767))
* **api:** register docs route in server and test helper ([849878e](849878e72f))
* **api:** wire AI route handlers to SSE progress via clientJobId ([27600a4](27600a4318))
* **branding:** add faceted gem SVG logo assets ([0214ac1](0214ac11b1))
* **branding:** add favicon and meta tags to index.html ([0364927](036492725e))
* **branding:** add OG social preview image ([dcd926c](dcd926c57e))
* **branding:** add PWA manifest and PNG logo assets ([26cc183](26cc18342f))
* **branding:** show gem icon in app header as default logo ([39dfb93](39dfb93679))
* conditional result views — side-by-side for resize, live preview for rotate ([989e8dc](989e8dc6e4))
* conditional result views — side-by-side for resize, live preview for rotate ([59a57f3](59a57f3a00))
* **crop:** add CropCanvas component with visual overlay, grid, and keyboard controls ([1a076be](1a076be9b2))
* **crop:** add react-image-crop dependency ([31d426f](31d426ff6f))
* **crop:** redesign CropSettings with aspect presets, pixel inputs, and grid toggle ([c2c256a](c2c256a180))
* **crop:** wire CropCanvas and CropSettings into tool-page with bidirectional state ([786a671](786a671c39))
* **db:** add teams table and migration ([926b52d](926b52d330))
* **db:** add userFiles table and migration ([dda37e9](dda37e90cc))
* **docs:** add gem favicon to VitePress site ([42ec0f2](42ec0f2490))
* **docs:** add gem logo to GitHub Pages nav bar and home hero ([98478e2](98478e2719))
* **docs:** add llms.txt and llms-full.txt to GitHub Pages ([e6dc7b0](e6dc7b0a18))
* **docs:** add llms.txt links to GitHub Pages footer ([c59e4a0](c59e4a0668))
* **env:** add FILES_STORAGE_PATH config variable ([4927f57](4927f574ba))
* **erase-object:** replace mask upload with in-browser brush painting ([40656a0](40656a0452))
* extract auto-orient utility and expand test coverage ([e5086ad](e5086ada6e))
* **files:** add Files page with nav, list, details, upload, and routing ([788b8c8](788b8c8bad))
* **files:** add mobile layout for Files page ([c99f43f](c99f43fe60))
* **files:** wire serverFileId for version tracking ([20f153d](20f153d611))
* harden auth, security headers, SVG sanitization, and pipeline ownership ([432cc92](432cc92471))
* **i18n:** add translation keys for settings phase 1 ([ffb676d](ffb676d648))
* **image-engine:** add Sharp wrapper with 14 image operations ([ccac5b8](ccac5b885c))
* **image-to-pdf:** add live PDF page preview with margin visualization ([ddde152](ddde152545))
* implement Files page with persistent storage and version tracking ([62fbb54](62fbb5484c))
* initialize Turborepo monorepo with pnpm workspaces ([58fbb38](58fbb38fd8))
* integrate MultiImageViewer and multi-file UX into tool page ([3796533](3796533822))
* make AI tools pipeline-compatible and add search to tool picker ([c48bfba](c48bfba879))
* merge multi-image UX — batch processing, filmstrip navigation, resize/rotate redesign ([80756d1](80756d1591))
* multi-arch Docker support, security hardening, and test improvements ([6cfa3b0](6cfa3b0c38))
* multi-file metadata display with per-file caching ([474b4a9](474b4a941e))
* **pipeline:** add inline settings configuration for automation steps ([adc7e1c](adc7e1c037))
* production Docker, Playwright tests, settings API, and bug fixes ([ce03aad](ce03aad10f))
* replace model dropdown with intuitive subject/quality selector in remove-bg ([9aa0371](9aa0371a14))
* rewrite file-store with FileEntry model for multi-image support ([8844b44](8844b44fff))
* rewrite resize settings with tab-based UI (presets, custom, scale) ([02ef3e6](02ef3e6468))
* rewrite resize settings with tab-based UI (presets, custom, scale) ([bc105fd](bc105fd261))
* **rotate:** add editable angle input and fine-tune +/- buttons ([bf62820](bf62820064))
* serve React SPA from Fastify in production mode ([1d8761a](1d8761a976))
* **storage:** add file storage helpers module ([fbca20d](fbca20d78c))
* **stores:** add Zustand store for Files page state management ([24644c1](24644c1c10))
* **tool-factory:** auto-save results to persistent file store when fileId provided ([bf6c30c](bf6c30c3c0))
* **ui:** add teams, tools, feature flags, temp files, logo to settings dialog ([4b2621d](4b2621d9f2))
* upgrade to BiRefNet SOTA background removal model ([77ee846](77ee8469d8))
* **web:** add before/after image comparison slider component ([1a22522](1a22522349))
* **web:** add fullscreen tool grid view ([6d67b10](6d67b106ca))
* **web:** add i18n architecture with English translations ([cd020c2](cd020c2342))
* **web:** add keyboard shortcuts for tool navigation ([939bc2e](939bc2e001))
* **web:** add mobile responsive layout with bottom navigation ([580208d](580208de83))
* **web:** add pipeline builder UI with saved automations and templates ([60541c1](60541c1765))
* **web:** add ProgressCard component ([01d5d66](01d5d66466))
* **web:** add ProgressCard to non-AI tool settings (Group A) ([5c64b30](5c64b306ea))
* **web:** add settings dialog with general, security, API keys, and about sections ([0cd3d71](0cd3d71a63))
* **web:** add Stirling-PDF-style file preview, review panel, and tool chaining UX ([ab0b034](ab0b0344b9))
* **web:** add tool settings UI for all core image tools ([8964bc5](8964bc5cd8))
* **web:** migrate AI tool settings to ProgressCard ([dbd3bf7](dbd3bf737e))
* **web:** redesign home page upload flow and add auth guard ([06c5ee5](06c5ee5996))
* **web:** rewrite useToolProcessor with XHR upload progress and SSE ([60945fd](60945fd3b3))
* wire up batch processing across tool settings components ([9e2c28f](9e2c28f191))
2026-03-30 00:28:23 +00:00
semantic-release-bot
8f98b745ff chore(release): 0.19.0 [skip ci]
# [0.19.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.18.0...v0.19.0) (2026-03-29)

### Features

* add privacy policy page and fix CSP blocking API docs ([7f17cb9](7f17cb98ce))
2026-03-29 15:57:41 +00:00
semantic-release-bot
d7a917b995 chore(release): 0.18.0 [skip ci]
# [0.18.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.7...v0.18.0) (2026-03-29)

### Features

* add worker threads, persistent Python sidecar, graceful shutdown, and architectural improvements ([1cbdfa1](1cbdfa1590))
2026-03-29 09:24:13 +00:00
Siddharth Kumar Sah
1cbdfa1590 feat: add worker threads, persistent Python sidecar, graceful shutdown, and architectural improvements
- Graceful shutdown: SIGTERM/SIGINT handlers drain HTTP, stop workers, close DB
- Thumbnail caching: disk-cached thumbnails with immutable Cache-Control headers
- Worker thread pool: Piscina offloads Sharp processing off the main event loop
- Persistent Python dispatcher: pre-imports ML libraries, eliminates cold-start latency
- Tool page registry: declarative tool-to-component mapping replaces 750-line switch
- File store cleanup: remove dead derived fields, stable files array reference
- Job persistence: progress written to SQLite jobs table, stale jobs recovered on startup
2026-03-29 17:23:41 +08:00
semantic-release-bot
7c71c7c483 chore(release): 0.17.7 [skip ci]
## [0.17.7](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.6...v0.17.7) (2026-03-28)

### Bug Fixes

* move health diagnostics behind admin auth ([818e587](818e5877a7))
* reject HTML tags in settings API to prevent stored XSS ([8a62093](8a62093130))
* simplify public health to static response, add 403 test ([4577d5c](4577d5c30e))
* switch README Docker references from GHCR to Docker Hub ([fb84f5c](fb84f5ce8d))
* use two-pass validation in settings PUT to prevent partial writes ([813fa6b](813fa6b7e8))
2026-03-28 11:08:45 +00:00
semantic-release-bot
daf942ba89 chore(release): 0.17.6 [skip ci]
## [0.17.6](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.5...v0.17.6) (2026-03-28)

### Bug Fixes

* resolve pipeline step race condition and infinite re-render loop ([aa1f87f](aa1f87fc91))
* show checkerboard behind transparent images in before/after slider ([2e29501](2e29501ae6))
2026-03-28 10:35:02 +00:00
semantic-release-bot
b4f0fed679 chore(release): 0.17.5 [skip ci]
## [0.17.5](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.4...v0.17.5) (2026-03-28)

### Bug Fixes

* sync stepsRef during render, not useEffect ([748ac60](748ac607bc))
2026-03-28 09:02:46 +00:00
semantic-release-bot
04d412873d chore(release): 0.17.4 [skip ci]
## [0.17.4](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.3...v0.17.4) (2026-03-28)

### Bug Fixes

* prevent stale closure in pipeline step callbacks ([8b20fef](8b20fef2d8))
2026-03-28 08:43:23 +00:00
semantic-release-bot
6edaaba935 chore(release): 0.17.3 [skip ci]
## [0.17.3](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.2...v0.17.3) (2026-03-28)

### Bug Fixes

* clear search when adding a step from the tool picker ([7b1b019](7b1b019b77))
2026-03-28 08:32:54 +00:00
semantic-release-bot
aea0974600 chore(release): 0.17.2 [skip ci]
## [0.17.2](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.1...v0.17.2) (2026-03-28)

### Bug Fixes

* prevent pipeline step settings from resetting on collapse ([9acbedf](9acbedf4b7))
2026-03-28 08:18:05 +00:00
semantic-release-bot
e5238f5661 chore(release): 0.17.1 [skip ci]
## [0.17.1](https://github.com/siddharthksah/Stirling-Image/compare/v0.17.0...v0.17.1) (2026-03-28)

### Bug Fixes

* add remove-background settings to pipeline step configurator ([017a715](017a71562a))
2026-03-28 07:32:56 +00:00
semantic-release-bot
d5add549af chore(release): 0.17.0 [skip ci]
# [0.17.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.16.4...v0.17.0) (2026-03-28)

### Features

* make AI tools pipeline-compatible and add search to tool picker ([c48bfba](c48bfba879))
2026-03-28 07:09:46 +00:00
semantic-release-bot
6d14e83dcb chore(release): 0.16.4 [skip ci]
## [0.16.4](https://github.com/siddharthksah/Stirling-Image/compare/v0.16.3...v0.16.4) (2026-03-28)

### Bug Fixes

* surface hidden errors and add batch rejection tests ([4a50428](4a504281a3))
2026-03-28 06:45:35 +00:00
semantic-release-bot
2622ae7bdf chore(release): 0.16.3 [skip ci]
## [0.16.3](https://github.com/siddharthksah/Stirling-Image/compare/v0.16.2...v0.16.3) (2026-03-28)

### Bug Fixes

* remove Google Drive coming soon placeholder from files nav ([658954e](658954ea19))
2026-03-28 06:40:48 +00:00
semantic-release-bot
51684c0cd2 chore(release): 0.16.2 [skip ci]
## [0.16.2](https://github.com/siddharthksah/Stirling-Image/compare/v0.16.1...v0.16.2) (2026-03-28)

### Bug Fixes

* pipeline only shows compatible tools and displays errors ([0410bf3](0410bf3461))
2026-03-28 06:39:17 +00:00
semantic-release-bot
1703dcbcfe chore(release): 0.16.1 [skip ci]
## [0.16.1](https://github.com/siddharthksah/Stirling-Image/compare/v0.16.0...v0.16.1) (2026-03-28)

### Bug Fixes

* trigger browser password save prompt on password change ([565b480](565b4805c7))
2026-03-28 06:24:41 +00:00
semantic-release-bot
006b7c4509 chore(release): 0.16.0 [skip ci]
# [0.16.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.15.0...v0.16.0) (2026-03-28)

### Features

* add password generator and browser save prompt on change-password page ([7c76c2a](7c76c2a2a0))
2026-03-28 06:13:13 +00:00
semantic-release-bot
21675623e7 chore(release): 0.15.0 [skip ci]
# [0.15.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.14.2...v0.15.0) (2026-03-28)

### Features

* add forced password change page on first login ([01cd1d9](01cd1d9f71))
2026-03-28 06:02:41 +00:00