Commit Graph
184 Commits
Author SHA1 Message Date
semantic-release-bot d4d4321b98 chore(release): 0.10.0 [skip ci]
# [0.10.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.9.0...v0.10.0) (2026-03-26)

### Bug Fixes

* **ocr:** update PaddleOCR for v3 API and add Tesseract fallback ([f71c3c8](https://github.com/siddharthksah/Stirling-Image/commit/f71c3c8c05bc7203d37a46743bebb62b79c8ac51))

### Features

* **erase-object:** replace mask upload with in-browser brush painting ([40656a0](https://github.com/siddharthksah/Stirling-Image/commit/40656a0452109c1d6ea2441b2735b0ffaf4f3867))
v0.10.0
2026-03-26 09:34:20 +00:00
Siddharth Kumar Sah f71c3c8c05 fix(ocr): update PaddleOCR for v3 API and add Tesseract fallback
Fix PaddleOCR crash by removing deprecated parameters (use_angle_cls,
show_log, cls) that were removed in PaddleOCR v3. Add graceful
fallback to Tesseract when PaddleOCR fails at runtime, so users
always get OCR results without errors.
2026-03-26 17:33:42 +08:00
Siddharth Kumar Sah 40656a0452 feat(erase-object): replace mask upload with in-browser brush painting
Replace the external mask file upload workflow with an interactive
canvas-based brush tool. Users now paint directly on the image to
mark areas for erasure. Adds EraserCanvas component with adjustable
brush size, undo/clear, and mask export. Switch Python inpainting
from broken lama-cleaner to OpenCV cv2.inpaint (Telea algorithm).
Add before/after comparison slider after processing.
2026-03-26 17:33:17 +08:00
semantic-release-bot 563892774d chore(release): 0.9.0 [skip ci]
# [0.9.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.8.2...v0.9.0) (2026-03-26)

### Bug Fixes

* **blur-faces:** switch from MediaPipe to OpenCV and auto-orient images ([f15102c](https://github.com/siddharthksah/Stirling-Image/commit/f15102c632d3fcbc5d33b33fd9cfdea5e4689eb6))
* **docker:** add build layer caching for faster Docker rebuilds ([14c630f](https://github.com/siddharthksah/Stirling-Image/commit/14c630ff23d973aa9d512ed87ede049ebd4b600f))
* **upscale:** auto-orient images before upscaling and improve UI ([8ee4d7b](https://github.com/siddharthksah/Stirling-Image/commit/8ee4d7b2fb3f88b2869ada8d6a6c5fb0df432e3b))

### Features

* **adjustments:** add real-time live preview for all color tools ([f357b18](https://github.com/siddharthksah/Stirling-Image/commit/f357b18ced8757da0a6c34f18541bb8875c2199a))
* **image-to-pdf:** add live PDF page preview with margin visualization ([ddde152](https://github.com/siddharthksah/Stirling-Image/commit/ddde152545456770ec4a97418968c2ad309a88e0))
* **rotate:** add editable angle input and fine-tune +/- buttons ([bf62820](https://github.com/siddharthksah/Stirling-Image/commit/bf6282006489a4cadcd849b476e97239e3624673))
v0.9.0
2026-03-26 08:02:46 +00:00
Siddharth Kumar Sah 0401900a69 chore(ui): remove technical jargon and update tool count
Remove approximate processing times from remove-bg quality options.
Update tool count from 37 to 33 across README, settings dialog, login
page, and i18n strings to reflect the accurate count.
2026-03-26 16:02:12 +08:00
Siddharth Kumar Sah f15102c632 fix(blur-faces): switch from MediaPipe to OpenCV and auto-orient images
Fix face detection failure caused by MediaPipe 0.10.33 removing the
mp.solutions API. Replace with OpenCV Haar cascade which works reliably
in headless Docker. Add autoOrient() call before detection to handle
EXIF-rotated phone photos. Remove technical jargon from UI.
2026-03-26 16:01:56 +08:00
Siddharth Kumar Sah 8ee4d7b2fb fix(upscale): auto-orient images before upscaling and improve UI
Fix rotated output by calling autoOrient() before passing images to
the Python upscaler, correcting EXIF orientation metadata. Replace
2x/4x buttons with 2x-8x slider plus quick-select buttons (2x, 3x,
4x, 6x, 8x). Remove technical jargon about Real-ESRGAN/Lanczos from
the UI and progress bar.
2026-03-26 16:01:40 +08:00
Siddharth Kumar Sah f357b18ced feat(adjustments): add real-time live preview for all color tools
Add CSS filter-based live preview for brightness, contrast, saturation,
color effects (grayscale/sepia/invert), and color channels (via SVG
feColorMatrix). The image in the right panel updates instantly as
sliders are adjusted. Adds cssFilter prop to ImageViewer, onPreviewFilter
callback to ColorSettings, and wires them through the tool page.
2026-03-26 16:01:18 +08:00
Siddharth Kumar Sah ddde152545 feat(image-to-pdf): add live PDF page preview with margin visualization
Add a miniature page preview in the settings panel that shows how the
image will look in the PDF. The preview updates in real-time as the
user changes page size, orientation, or margin. Uses the same scaling
logic as the backend to accurately represent image placement. Preview
tracks the currently selected image when multiple files are uploaded.
2026-03-26 16:01:00 +08:00
Siddharth Kumar Sah bf62820064 feat(rotate): add editable angle input and fine-tune +/- buttons
Replace the static angle display between Left/Right buttons with an
editable input field that accepts direct angle entry. Add - and +
buttons for 1-degree fine-tuned control. All controls update the
rotation state which triggers real-time CSS preview on the image.
2026-03-26 16:00:44 +08:00
Siddharth Kumar Sah 14c630ff23 fix(docker): add build layer caching for faster Docker rebuilds
Add --mount=type=cache for pnpm store, turbo cache, and pip cache in
Dockerfile. This significantly reduces rebuild times by reusing
previously downloaded dependencies across builds.
2026-03-26 16:00:28 +08:00
Siddharth Kumar Sah e8436683d9 chore: remove CLAUDE.md from repo and keep it local-only 2026-03-26 12:06:06 +08:00
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](https://github.com/siddharthksah/Stirling-Image/commit/8474b0ee52fe803c55247a082becc4334e83186f))
* **test:** exclude e2e tests from vitest and fix CI test suite ([91acab9](https://github.com/siddharthksah/Stirling-Image/commit/91acab9967e2b5dd7dbc7a98e667f785f3e7364e))
v0.8.2
2026-03-25 17:33:09 +00:00
Siddharth Kumar Sah 91acab9967 fix(test): exclude e2e tests from vitest and fix CI test suite
Playwright e2e tests were being collected by vitest in CI, causing
failures since Playwright isn't available in that context. Exclude
tests/e2e/** from vitest runs (e2e tests should run via pnpm test:e2e).
2026-03-26 01:32:48 +08:00
Siddharth Kumar Sah 8474b0ee52 fix(test): add missing PNG fixture files to repo
test-200x150.png and test-1x1.png were present locally but never
committed, causing CI failures on clean checkouts. Also added a
gitignore exception for tests/fixtures/*.png.
2026-03-26 01:32:48 +08:00
semantic-release-bot bf23e83ef4 chore(release): 0.8.1 [skip ci]
## [0.8.1](https://github.com/siddharthksah/Stirling-Image/compare/v0.8.0...v0.8.1) (2026-03-25)

### Bug Fixes

* resolve test failures from shared DB race conditions ([b474480](https://github.com/siddharthksah/Stirling-Image/commit/b474480698695cda2eaf2c9ae642ac3ffd15d007))
v0.8.1
2026-03-25 17:21:05 +00:00
Siddharth Kumar Sah b474480698 fix: resolve test failures from shared DB race conditions
- Make ensureDefaultAdmin idempotent with onConflictDoNothing (fixes
  UNIQUE constraint error when parallel test files share a DB)
- Move duplicate-username check before user-limit check so 409 takes
  priority over 403
- Bump MAX_USERS from 5 to 50 (tests create ~15 users across files)
2026-03-26 01:20:29 +08:00
semantic-release-bot 170395ae40 chore(release): 0.8.0 [skip ci]
# [0.8.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.7.0...v0.8.0) (2026-03-25)

### Bug Fixes

* **docker:** skip husky prepare script in production install ([200e7d1](https://github.com/siddharthksah/Stirling-Image/commit/200e7d10c1cbffeeeae95434b4ae8f2d6b69b8a0))
* prevent useAuth infinite loop causing rate limit storms ([3b4f522](https://github.com/siddharthksah/Stirling-Image/commit/3b4f522bf4d63109254edc22baca568fdfd7dd98))

### Features

* **api:** add logo upload/serve/delete routes with tests ([6a13065](https://github.com/siddharthksah/Stirling-Image/commit/6a1306570660d4962f89e741dfb684d2ed0e7f6c))
* **api:** add persistent file management helpers to frontend api module ([8a3a731](https://github.com/siddharthksah/Stirling-Image/commit/8a3a731267f4e3cd84a01a78d89975197ce2ebad))
* **api:** add teams CRUD routes and update auth team references ([ab370a7](https://github.com/siddharthksah/Stirling-Image/commit/ab370a74fefebc8735e337f9b42e48ab6625c5b4))
* **api:** add tool filtering and DB-backed cleanup settings ([acfff75](https://github.com/siddharthksah/Stirling-Image/commit/acfff754b54b5f9be474c6db6eb39b3cbf91fc21))
* **api:** add user files CRUD routes at /api/v1/files/* ([4e2aa58](https://github.com/siddharthksah/Stirling-Image/commit/4e2aa5876701ef56514957a30fe63c27c615cf05))
* **db:** add teams table and migration ([926b52d](https://github.com/siddharthksah/Stirling-Image/commit/926b52d33045dc1f15192bb65d4f005f6c82ce00))
* **db:** add userFiles table and migration ([dda37e9](https://github.com/siddharthksah/Stirling-Image/commit/dda37e90cc294140c236332563befae0a3b02852))
* **env:** add FILES_STORAGE_PATH config variable ([4927f57](https://github.com/siddharthksah/Stirling-Image/commit/4927f574badda883ad72ba05c30a8d9fae973ee6))
* **files:** add Files page with nav, list, details, upload, and routing ([788b8c8](https://github.com/siddharthksah/Stirling-Image/commit/788b8c8bad8cf6800137f4764f5a50ac80845f2f))
* **files:** add mobile layout for Files page ([c99f43f](https://github.com/siddharthksah/Stirling-Image/commit/c99f43fe60aac2a7babeb7cea39e140281936009))
* **files:** wire serverFileId for version tracking ([20f153d](https://github.com/siddharthksah/Stirling-Image/commit/20f153d611c9dec478ab89cd050c6c65b0e41287))
* **i18n:** add translation keys for settings phase 1 ([ffb676d](https://github.com/siddharthksah/Stirling-Image/commit/ffb676d648027804e653b868139f349b5a3c6c96))
* implement Files page with persistent storage and version tracking ([62fbb54](https://github.com/siddharthksah/Stirling-Image/commit/62fbb5484c669b74132b4ecd23576bf0ba5b50b2))
* **storage:** add file storage helpers module ([fbca20d](https://github.com/siddharthksah/Stirling-Image/commit/fbca20d78c213e0b7f00f6c59eae4af32123a587))
* **stores:** add Zustand store for Files page state management ([24644c1](https://github.com/siddharthksah/Stirling-Image/commit/24644c1c1052146a2b581ffc3a791a9276fab6a1))
* **tool-factory:** auto-save results to persistent file store when fileId provided ([bf6c30c](https://github.com/siddharthksah/Stirling-Image/commit/bf6c30c3c0d9beeaa24a7b7b998de9354ec7e353))
* **ui:** add teams, tools, feature flags, temp files, logo to settings dialog ([4b2621d](https://github.com/siddharthksah/Stirling-Image/commit/4b2621d9f2c5fcc930baf9ed1a6b555de77f0b93))
v0.8.0
2026-03-25 17:12:41 +00:00
Siddharth Kumar Sah 627ff8a82c chore: remove internal docs from repo, update public documentation
Remove docs/superpowers/, .claude/ config, and PRD.md from version
control (kept locally via .gitignore). Update README, CHANGELOG,
VitePress docs, and .env.example to reflect recent features: Files
page, teams, admin settings, persistent storage, and various API
improvements.
2026-03-26 01:11:40 +08:00
Siddharth Kumar Sah 3b4f522bf4 fix: prevent useAuth infinite loop causing rate limit storms
checkAuth was defined as a plain function and used as a useEffect
dependency, causing it to fire on every render. Moved it inside the
effect with an empty dependency array so it runs once on mount.
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 200e7d10c1 fix(docker): skip husky prepare script in production install
Remove the prepare script before pnpm install --prod since husky
is a devDependency and not available in production builds.
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 4b2621d9f2 feat(ui): add teams, tools, feature flags, temp files, logo to settings dialog
- Add Teams section with CRUD (create, rename, delete) and member count display
- Add Tools section with per-tool enable/disable toggles grouped by category
- Add logo upload/delete, experimental tools toggle, file management settings to System Settings
- Replace free-text team input with dropdown populated from teams API in People section
- Filter disabled/experimental tools in tool panel, pipeline builder, and fullscreen grid
- Display custom logo in mobile header and sidebar when configured
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah ffb676d648 feat(i18n): add translation keys for settings phase 1 2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 6a13065706 feat(api): add logo upload/serve/delete routes with tests
Add branding API at /api/v1/settings/logo supporting:
- POST: admin uploads PNG/SVG/JPEG (max 500KB), auto-converts to 128x128 PNG
- GET: public endpoint serves custom logo (404 if none)
- DELETE: admin removes custom logo

Includes 13 integration tests covering upload, conversion, size/type
validation, auth enforcement, resize, and idempotent deletion.
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah acfff754b5 feat(api): add tool filtering and DB-backed cleanup settings
Add feature flag support to skip disabled/experimental tools at startup
by reading disabledTools and enableExperimentalTools from the settings
table. Refactor cleanup.ts to read tempFileMaxAgeHours from DB settings
(with env var fallback) and respect the startupCleanup setting.
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 585d66f0c9 refactor: rename Tool.alpha to Tool.experimental 2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah ab370a74fe feat(api): add teams CRUD routes and update auth team references 2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 62fbb5484c feat: implement Files page with persistent storage and version tracking
Three-panel file manager (nav, list, details) modeled after Stirling-PDF.
- Backend: user_files table, /api/v1/files/* CRUD routes, file storage
  helpers, thumbnail generation via Sharp, recursive CTE version chains
- Frontend: FilesNav, FileList, FileDetails, FileUploadArea components,
  Zustand store, mobile layout with bottom sheet
- Integration: tool-factory auto-saves results as new versions when
  fileId is provided, "Open File" loads file into tool processing flow
- Search, bulk select/delete/download, version badges, tool chain tags
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 926b52d330 feat(db): add teams table and migration 2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah 2b792b62bf docs: add settings phase 1 implementation plan
16-task plan covering teams CRUD, tool disabling, feature flags,
temp file management, and custom branding/logo upload.
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah c99f43fe60 feat(files): add mobile layout for Files page
Replace static desktop-only layout with responsive version: mobile gets a
tab bar (Recent / Upload) and a bottom-sheet drawer for file details, while
desktop retains the existing three-column panel layout. FileDetails gains
updated mobile wrapper classes (removes border/width, uses flex gap).
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 20f153d611 feat(files): wire serverFileId for version tracking
Add serverFileId to FileEntry, pass fileId in tool processor formData when
a file originates from the Files page, and set serverFileId on the loaded
entry so subsequent tool runs create new file versions instead of duplicates.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah f2ef910a16 docs: add settings phase 1 design spec
Design for 5 new admin features inspired by Stirling-PDF:
teams management, tool disabling, feature flags, temp file
management, and custom branding/logo upload.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 788b8c8bad feat(files): add Files page with nav, list, details, upload, and routing
Creates the full Files page UI (Tasks 8 & 9): FilesNav, FileListItem,
FileList, FileDetails, FileUploadArea components, FilesPage layout, and
wires up the /files route plus sidebar/mobile-nav entries.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 24644c1c10 feat(stores): add Zustand store for Files page state management
Implements useFilesPageStore with file listing, upload, bulk delete,
selection, checkbox management, search, and tab switching actions.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 8a3a731267 feat(api): add persistent file management helpers to frontend api module
Adds UserFile/UserFileDetail types plus apiListFiles, apiGetFileDetails,
apiUploadUserFiles, apiDeleteUserFiles, getFileThumbnailUrl, and
getFileDownloadUrl to support the Files page.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah bf6c30c3c0 feat(tool-factory): auto-save results to persistent file store when fileId provided
Adds optional fileId multipart field; when present, inserts a new versioned
userFiles record after successful processing and returns savedFileId in the
response. Non-fatal — tool processing succeeds even if the save fails.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 4e2aa58767 feat(api): add user files CRUD routes at /api/v1/files/*
Implements all 7 routes for the persistent file library:
list with pagination/search, upload (multi-file), details with recursive
version chain CTE, download stream, on-the-fly Sharp thumbnail, bulk delete
of entire version chains, and save-result for tool output versioning.
Registered in index.ts after fileRoutes.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah fbca20d78c feat(storage): add file storage helpers module
Adds ensureStorageDir, saveFile, deleteStoredFile, and getStoredFilePath
utilities that manage the lifecycle of files on the local filesystem
under FILES_STORAGE_PATH.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 4927f574ba feat(env): add FILES_STORAGE_PATH config variable
Adds a FILES_STORAGE_PATH env variable (defaults to ./data/files) to
control where uploaded user files are persisted on disk.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah dda37e90cc feat(db): add userFiles table and migration
Introduces the user_files table to track uploaded files per user,
including metadata fields for dimensions, versioning, and tool chains.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah c8d2a3f439 docs: add Files page implementation plan
12 sequential tasks covering DB schema, API routes, file storage,
frontend components, tool integration, mobile layout, and E2E testing.
2026-03-26 01:10:50 +08:00
Siddharth Kumar Sah 2375572860 docs: add Files page design spec
Server-persisted file manager with version tracking, modeled after
Stirling-PDF. Covers DB schema, API routes, file storage, frontend
components, and tool processing integration.
2026-03-26 01:10:50 +08:00
semantic-release-bot 5d261398b1 chore(release): 0.7.0 [skip ci]
# [0.7.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.6.0...v0.7.0) (2026-03-24)

### Features

* harden auth, security headers, SVG sanitization, and pipeline ownership ([432cc92](https://github.com/siddharthksah/Stirling-Image/commit/432cc92471b73b73ab9d1be4a82a71d3ed3a88ad))
* **pipeline:** add inline settings configuration for automation steps ([adc7e1c](https://github.com/siddharthksah/Stirling-Image/commit/adc7e1c0370df1687b0660bdff279c90ac9d0871))
v0.7.0
2026-03-24 13:38:48 +00:00
Siddharth Kumar Sah adc7e1c037 feat(pipeline): add inline settings configuration for automation steps
Replace placeholder "default settings" message with actual form controls
when expanding pipeline steps. Each tool now shows its configurable fields
(dimensions, quality, colors, modes, etc.) directly in the pipeline builder.

Covers all 30+ tools with data-driven field definitions: number inputs,
select groups, checkboxes, color pickers, and conditional fields.
2026-03-24 21:38:16 +08:00
Siddharth Kumar Sah 432cc92471 feat: harden auth, security headers, SVG sanitization, and pipeline ownership
- Add password strength validation (8+ chars, uppercase, lowercase, number)
- Add username validation rules
- Optimize API key lookup with SHA-256 prefix (O(1) vs O(n) scan)
- Require password change on default admin first login
- Revoke API keys on password change
- Add session cleanup cron (hourly expired session purge)
- Add Permissions-Policy, HSTS, and CSP security headers in production
- Strengthen SVG sanitizer: block XInclude, foreignObject, processing
  instructions, javascript/data/file URI schemes
- Add userId ownership to pipelines with authorization checks
- Add keyPrefix column to api_keys table
- Update integration tests for new auth behavior
2026-03-24 21:38:06 +08:00
semantic-release-bot 75f38a9fe2 chore(release): 0.6.0 [skip ci]
# [0.6.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.5.2...v0.6.0) (2026-03-24)

### Features

* extract auto-orient utility and expand test coverage ([e5086ad](https://github.com/siddharthksah/Stirling-Image/commit/e5086ada6e2f4402973f203b726578dd42da4a32))
v0.6.0
2026-03-24 12:37:44 +00:00
Siddharth Kumar Sah e5086ada6e feat: extract auto-orient utility and expand test coverage
Extract EXIF auto-orientation logic into a shared auto-orient module
used by both single-tool and batch routes. This ensures camera photos
display correctly after processing regardless of entry point.

Also expands e2e and integration tests significantly.
2026-03-24 20:37:14 +08:00
semantic-release-bot 06eabdd045 chore(release): 0.5.2 [skip ci]
## [0.5.2](https://github.com/siddharthksah/Stirling-Image/compare/v0.5.1...v0.5.2) (2026-03-23)

### Bug Fixes

* restore APP_VERSION import used by health endpoint ([7dfa7a2](https://github.com/siddharthksah/Stirling-Image/commit/7dfa7a295de407f45832b68a2ef64acf2f21205f))
v0.5.2
2026-03-23 16:49:00 +00:00
Siddharth Kumar Sah 7dfa7a295d fix: restore APP_VERSION import used by health endpoint 2026-03-24 00:48:36 +08:00