# [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))
# [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))
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.
# 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))