Release history
SnapOtter releases
Image manipulator and converter
All releases
43 shown
Routine maintenance release for SnapOtter.
Changelog
Full Changelog: https://github.com/snapotter-hq/SnapOtter/compare/v1.15.11...v1.16.0
Routine maintenance release for SnapOtter.
Changelog
Full Changelog: https://github.com/snapotter-hq/SnapOtter/compare/v1.15.10...v1.15.11
- Removed all artificial limits; the tool operates unlimited by default.
- Prevent admin escalation when AUTH_ENABLED=false (duplicate entry removed)
- Extended image format support (JXL, RAW, ICO, TGA, PSD, EXR, HDR)
- AVIF output format added across all tools
- Multi‑file selection for automation pipeline
Full changelog
What's Changed
- fix: state bleed on tool switch, AVIF compress, OCR segfault, long filenames by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/79
- feat: Unlimited by Default — remove all artificial limits by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/80
- feat: redesign Automate page — tool palette + pipeline canvas by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/81
- fix: Docker hardening, security, and V1 deployment readiness by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/82
- feat: extended image format support (JXL, RAW, ICO, TGA, PSD, EXR, HDR) by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/83
- fix: wire up Default Tool View save in General settings by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/84
- feat: add AVIF output format support across all tools by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/85
- fix: prevent admin escalation when AUTH_ENABLED=false by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/86
- fix: auto-fallback from CodeFormer to GFPGAN in face enhancement by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/87
- feat: allow multi-file selection for automation pipeline by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/88
- feat: production-grade RBAC with editor role, custom roles, API key scoping, and audit log by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/89
- feat: production-grade opt-in product analytics with PostHog and Sentry by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/91
- fix: prevent admin escalation when AUTH_ENABLED=false by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/92
- test: comprehensive test coverage expansion (+965 tests, 48/48 tools) by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/93
- feat: API sync and documentation audit by @ashim-hq in https://github.com/snapotter-hq/SnapOtter/pull/94
New Contributors
- @ashim-hq made their first contribution in https://github.com/snapotter-hq/SnapOtter/pull/79
Full Changelog: https://github.com/snapotter-hq/SnapOtter/compare/v1.15.9...v1.15.10
Routine maintenance release for SnapOtter.
Changelog
Full Changelog: https://github.com/snapotter-hq/SnapOtter/compare/v1.15.8...v1.15.9
Minor fixes and improvements.
Full changelog
Added retry with exponential backoff for `apt-get update` failures on the CUDA base image.
Full changelog
Minor fixes and improvements.
Full changelog
Fixed exclusion of e2e-docker tests from the Vitest runner.
Minor fixes and improvements.
Full changelog
Fixed file uploads above 100MB silently dropping.
Full changelog
Fixed GHCR login by requiring GHCR_TOKEN with write:packages scope.
Full changelog
Fixed Docker container build failures and model path mismatches for non‑root users.
Full changelog
- Unified Docker image with GPU auto‑detection
- Simplified CI to a single unified Docker build
- Compose consolidated to one file with log rotation
Full changelog
1.14.0 (2026-04-10)
Bug Fixes
- add FILES_STORAGE_PATH to Dockerfile ENV to prevent data loss (b575243)
- add shutdown timeout and improve health endpoint (986ad37)
- address code review findings before merge (caf65bc)
- correct PaddleOCR language codes for model download and OCR (e1ee571)
- force CPU mode in download_models.py for build-time compatibility (b4b59a7)
- handle paddlepaddle-gpu CUDA import at build time gracefully (0083a74)
- install cuda-compat stubs for build-time PaddlePaddle import (d31d665)
- load RealESRGAN pretrained weights for actual AI upscaling (fa9569c)
- revert to npx tsx in CMD for pnpm compatibility (e55253d)
- simplify smoke test to CPU-only imports for build-time compat (3481663)
- skip RealESRGAN import check on arm64 in smoke test (1e2ef52)
- split paddlepaddle-gpu and paddleocr installs, use --extra-index-url (74183e8)
- suppress ML library stdout noise in ocr.py and upscale.py (c0b419d)
- use PaddlePaddle GPU package index for CUDA wheels (dd9528f)
- use platform-specific mediapipe version for arm64 compatibility (7face19)
Features
- Removed `requireAdmin` guard; all routes now use `requirePermission` middleware.
- Backend permission map and requirePermission middleware
- Permission checks with admin override on API key, pipeline, and user-files routes
- Shared Permission and Role types across the codebase
Full changelog
1.13.0 (2026-04-10)
Bug Fixes
- complete RBAC implementation lost during merge (cc8a272)
Features
- add backend permission map and requirePermission middleware (1a99571)
- add permission checks and admin override to API key routes (d776680)
- add permission checks and admin override to pipeline routes (59f40db)
- add permission checks and ownership scoping to user-files routes (86ba698)
- add shared Permission and Role types (2f594e9)
- add tools:use permission check to tool, batch, pipeline, and upload routes (885ace5)
- extend useAuth hook with role and permissions from session (e0ba8be)
- filter settings tabs by user permissions, remove admin fallback (bcbd24a)
- include permissions and teamName in login/session responses (4943177)
- replace requireAdmin with requirePermission on all routes (af7f57d)
- Added PDF‑to‑image backend route with info and processing endpoints
- Added PDF‑to‑image frontend settings component
- Registered PDF‑to‑image tool in frontend registry, shared constants, and i18n
Full changelog
1.12.0 (2026-04-10)
Bug Fixes
- a11y: add keyboard support to pdf-to-image upload dropzone (1778f72)
- use specific selector in pdf-to-image e2e test (b2a2c89)
Features
- add pdf-to-image backend route with info and processing endpoints (30155c1)
- add pdf-to-image frontend settings component (44bbfba)
- register pdf-to-image in frontend tool registry (5fd294c)
- register pdf-to-image tool in shared constants and i18n (43324c1)
- unified Docker image with GPU auto-detection (#37) (b0083e2)
- Auto-generate llms.txt using vitepress-plugin-llms
Full changelog
- Added content‑aware resize API route and registration
- Added content‑aware resize toggle to resize settings UI
- Added seam carving AI bridge module
Full changelog
- Added stitch API route handler and settings UI component.
- Registered stitch component in web tool registry, stitch route in API tool registry, and stitch tool in shared constants and i18n.
Full changelog
Fixed file uploads above 100MB silently dropping.
Full changelog
- Added edit-metadata API route with inspect and edit endpoints
- Added edit-metadata UI component with granular strip support
Full changelog
1.8.0 (2026-04-06)
Bug Fixes
- filter unsafe round-trip keys server-side in editMetadata (32bde85)
Features
- add edit-metadata API route with inspect and edit endpoints (ff07b83)
- add edit-metadata UI component with granular strip support (dcd600d)
- add EditMetadataOptions type and exif-reader dep to image-engine (39bc5bc)
- extract shared metadata parsing utilities into image-engine (c075849)
- implement editMetadata operation in image-engine (f3be1ef)
- register edit-metadata in shared constants and i18n (4a424d7)
Improved AI tool reliability for face detection and background removal.
Full changelog
Minor fixes and improvements.
Full changelog
Fixed missing server‑side logging for AI tool routes.
Full changelog
Minor fixes and improvements.
Full changelog
Fixed GPU detection by using torch.cuda instead of ONNX Runtime providers.
Full changelog
Fixed false GPU detection in CUDA images running without a GPU.
Full changelog
- Added GPU/CUDA acceleration support (new :cuda Docker tag)
Full changelog
- lightweight Docker image (:lite tag) without AI/ML tools
Full changelog
Fixed HEIC decoding on Linux by using heif-convert.
Minor fixes and improvements.
Minor fixes and improvements.
- Support for HEIC and HEIF formats in both input and output
Full changelog
- "Crop to Content" mode in the smart crop tool
Full changelog
Default theme now set to light, overriding system preference.
Full changelog
- Replaced crypto.randomUUID with generateId in AI tool settings
- Replaced crypto.randomUUID with generateId in pipeline/automation
- Replaced crypto.randomUUID with generateId in use-tool-processor
- Added copyToClipboard() utility with execCommand fallback for clipboard operations
- Added generateId() utility to provide UUID generation compatible with non‑secure contexts
Full changelog
1.3.0 (2026-04-04)
Bug Fixes
- add XHR timeout to prevent UI spinning forever (0abacb2)
- disable worker pool to prevent Docker processing hang (e36cd0c)
- log volume permission errors instead of swallowing them (a3e6927)
- replace crypto.randomUUID with generateId in AI tool settings (ed91861)
- replace crypto.randomUUID with generateId in pipeline/automation (bcbf86c)
- replace crypto.randomUUID with generateId in use-tool-processor (07cc2d0)
- replace navigator.clipboard with copyToClipboard utility (1857aeb)
- resolve multiple API and e2e test bugs (00deafb)
- restore navigator.clipboard and execCommand mocks in tests (57e71b7)
Features
Fixed handling of volume permission issues for the bind‑mounted /data directory.
Full changelog
- Theme toggle and GitHub button relocated to the top‑right navbar
Full changelog
- GitHub stars button added to docs navbar
- Fixed footer license in documentation
Full changelog
Fixed allowing SVG files in the convert tool.
- Reject HTML tags in settings API to prevent stored XSS
- Authentication with default admin user (add authentication with default admin user)
- Forced password change on first login (add forced password change page on first login)
- Privacy policy page and CSP fixes (add privacy policy page and fix CSP blocking API docs)
Full changelog
1.0.0 (2026-03-30)
Bug Fixes
- a11y: add aria-hidden to decorative GemLogo SVG (ae185ce)
- add remove-background settings to pipeline step configurator (ae5ac81)
- add SSE progress endpoint to public paths (18c3da0)
- api: allow Scalar docs through auth and CSP (6023109)
- api: resolve team name lookup and show server error messages (609fc8b)
- api: use content instead of spec.content for Scalar v1.49 API (dfcb4d5)
- apply continuous progress bar to erase-object and OCR (196c553)
- blur-faces: switch from MediaPipe to OpenCV and auto-orient images (dc10f90)
- bridge.ts ENOENT check for Python venv fallback (92442cd)
- clear search when adding a step from the tool picker (ae2e63f)
- continuous progress bar (no 100%→0% reset) (b4abefe)
- crop: use percentCrop from onChange to fix inflated pixel values (f238820)
- deduplicate react in Vite to prevent zustand hook errors in monorepo (b3d6947)
- docker: add build layer caching for faster Docker rebuilds (03ba30d)
- docker: skip husky prepare script in production install (fdfb0a0)
- docs: clean up footer llms.txt links (e842cde)
- docs: ignore localhost dead links in VitePress build (78269d4)
- docs: remove hero logo from home page (64c0ec8)
- handle migration race condition in concurrent test workers (d576ab1)
- make port 1349 the UI port in all modes (20a2637)
- move health diagnostics behind admin auth (ee9a20f)
- ocr: update PaddleOCR for v3 API and add Tesseract fallback (e260a93)
- pipeline only shows compatible tools and displays errors (fe021c1)
- prevent pipeline step settings from resetting on collapse (d899ef1)
- prevent stale closure in pipeline step callbacks (c67f002)
- prevent useAuth infinite loop causing rate limit storms (9624dae)
- Python bridge fallback only on missing venv, not script errors (79e4116)
- reject HTML tags in settings API to prevent stored XSS (d5bd011)
- remove explicit pnpm version from CI to avoid conflict with packageManager (c0f5dad)
- remove Google Drive coming soon placeholder from files nav (e487fe0)
- resolve 3 critical UX bugs - home upload, auth, and form submit (97267c7)
- resolve pipeline step race condition and infinite re-render loop (e0177d4)
- resolve test failures from shared DB race conditions (1a7116d)
- resolve tsx not found in AI docs updater workflow (dfbef8d)
- resolve TypeScript Uint8Array type error with fflate (c1b06b3)
- restore APP_VERSION import used by health endpoint (2a74b60)
- setError(null) was overriding setProcessing(true) (2be94b7)
- show checkerboard behind transparent images in before/after slider (73741e6)
- simplify public health to static response, add 403 test (9c05da6)
- streamline CI/CD — remove broken AI docs updater, fix Docker publish (ad2c96d)
- surface hidden errors and add batch rejection tests (2f8e2ce)
- switch README Docker references from GHCR to Docker Hub (9e15679)
- sync stepsRef during render, not useEffect (0c86744)
- test: add missing PNG fixture files to repo (45c6b9d)
- test: exclude e2e tests from vitest and fix CI test suite (9d28485)
- tests: remove temp DB cleanup that races with other test files (498bfb3)
- trigger browser password save prompt on password change (6b279ad)
- ui: clean up settings, automate page, fullscreen logo, and README (b3c8ad4)
- unify project on port 1349, improve strip-metadata and UI components (4912ee3)
- upscale: auto-orient images before upscaling and improve UI (8a6e665)
- use BiRefNet-Lite as default model and fix JSON parsing (c8159d3)
- use two-pass validation in settings PUT to prevent partial writes (2dc39d3)
- use U2-Net as default model (fast, 2s) with BiRefNet as opt-in (7ebed9a)
- white screen crash when uploading photos with null GPS EXIF data (c913df9)
Features
- accept clientJobId in batch endpoint for SSE progress correlation (8ed57f4)
- add authentication with default admin user (2189628)
- add automatic workspace file cleanup cron (5af7437)
- add CSS transform props to ImageViewer for live rotate/flip preview (de3340f)
- add CSS transform props to ImageViewer for live rotate/flip preview (7627853)
- add Fastify API server with health check and env config (be73ce9)
- add forced password change page on first login (e0900a8)
- add format tools (SVG-to-raster, vectorize, GIF) and optimization (rename, favicon, image-to-PDF) (7b29b04)
- add generic tool page template with settings panel and dropzone (0f32ba1)
- add image-engine and ai stub packages (17ac7b8)
- add layout tools (collage, splitting, border/frame) (e46dbf6)
- add live preview callback to RotateSettings, rename button to Apply (17be50b)
- add live preview callback to RotateSettings, rename button to Apply (06844ec)
- add login page with split layout matching Stirling-PDF style (2b82f93)
- add multi-stage Docker build with Python ML dependencies (8d70123)
- add MultiImageViewer with arrow navigation and filmstrip (1fa8747)
- add password generator and browser save prompt on change-password page (d56c644)
- add Phase 4 AI tools with Python bridge and 6 new tools (21df50e)
- add privacy policy page and fix CSP blocking API docs (3e314f0)
- add processAllFiles batch method to tool processor hook (cd1e180)
- add replace-color tool and update tool page routing (d5d09e4)
- add semantic-release for automated versioning and help dialog (83a0272)
- add shared package with types, tool definitions, and constants (96ed415)
- add SideBySideComparison component for resize results (d037305)
- add SideBySideComparison component for resize results (2d0ba5a)
- add SQLite database with Drizzle ORM schema and migrations (88c41cf)
- add Stirling-PDF-style layout with sidebar, tool panel, dropzone, and theme toggle (90f10f4)
- add Swagger/OpenAPI documentation at /api/docs (0ef1a5a)
- add theme system with dark/light/system support and persistence (e35d249)
- add ThumbnailStrip filmstrip component (9caa613)
- add utility tools (image info, compare, duplicates, color palette, QR, barcode) (e17992e)
- add Vite + React SPA with Tailwind CSS and routing (9483ad7)
- add watermark, text overlay, and image composition tools (b2543d9)
- add worker threads, persistent Python sidecar, graceful shutdown, and architectural improvements (1274cc1)
- adjustments: add real-time live preview for all color tools (b5c924e)
- ai: add emit_progress() calls to all Python AI scripts (eb6f57d)
- ai: add onProgress callback to all AI wrapper functions (021c9f1)
- ai: rewrite bridge.ts to stream stderr progress via spawn (9d9c45a)
- api,web: add batch processing with ZIP download and SSE progress (f8aa5f7)
- api: add all remaining endpoints to OpenAPI spec (e7b38ba)
- api: add all tool endpoints to OpenAPI spec (753ba3e)
- api: add generic tool route factory for all image tools (43555c9)
- api: add llms.txt and llms-full.txt endpoints (12ba52a)
- api: add logo upload/serve/delete routes with tests (6063f4d)
- api: add multipart file upload, workspace management, and download routes (415de2a)
- api: add OpenAPI 3.1 spec skeleton with common schemas (b2189f5)
- api: add persistent file management helpers to frontend api module (ecbfcce)
- api: add pipeline execution, save, and list endpoints (d4f1148)
- api: add resize, crop, rotate, convert, compress, metadata, and color tool routes (4874701)
- api: add Scalar docs route and install dependency (6f2c319)
- api: add SingleFileProgress type and SSE update function (12b85d4)
- api: add teams CRUD routes and update auth team references (ec22e53)
- api: add tool filtering and DB-backed cleanup settings (07e7e8d)
- api: add user files CRUD routes at /api/v1/files/* (6a07007)
- api: register docs route in server and test helper (bc6b389)
- api: wire AI route handlers to SSE progress via clientJobId (a3f85da)
- branding: add faceted gem SVG logo assets (4bc9335)
- branding: add favicon and meta tags to index.html (2508fd0)
- branding: add OG social preview image (c6c5b92)
- branding: add PWA manifest and PNG logo assets (298567d)
- branding: show gem icon in app header as default logo (dd857fb)
- conditional result views — side-by-side for resize, live preview for rotate (f0d18be)
- conditional result views — side-by-side for resize, live preview for rotate (6682649)
- crop: add CropCanvas component with visual overlay, grid, and keyboard controls (018bbf4)
- crop: add react-image-crop dependency (b7ecd41)
- crop: redesign CropSettings with aspect presets, pixel inputs, and grid toggle (d75f458)
- crop: wire CropCanvas and CropSettings into tool-page with bidirectional state (ea7fb46)
- db: add teams table and migration (365783b)
- db: add userFiles table and migration (a2fdbd5)
- docs: add gem favicon to VitePress site (0918f93)
- docs: add gem logo to GitHub Pages nav bar and home hero (f0b8162)
- docs: add llms.txt and llms-full.txt to GitHub Pages (5f6959a)
- docs: add llms.txt links to GitHub Pages footer (b874445)
- env: add FILES_STORAGE_PATH config variable (3c737a6)
- erase-object: replace mask upload with in-browser brush painting (40e3081)
- extract auto-orient utility and expand test coverage (8622c4a)
- files: add Files page with nav, list, details, upload, and routing (3f127a4)
- files: add mobile layout for Files page (e864d1e)
- files: wire serverFileId for version tracking (8868d3e)
- harden auth, security headers, SVG sanitization, and pipeline ownership (beaad1d)
- i18n: add translation keys for settings phase 1 (c5ff80a)
- image-engine: add Sharp wrapper with 14 image operations (3e7f71c)
- image-to-pdf: add live PDF page preview with margin visualization (cd666ea)
- implement Files page with persistent storage and version tracking (f6183d2)
- initialize Turborepo monorepo with pnpm workspaces (db31cf6)
- integrate MultiImageViewer and multi-file UX into tool page (52aab1e)
- make AI tools pipeline-compatible and add search to tool picker (2d46b09)
- merge multi-image UX — batch processing, filmstrip navigation, resize/rotate redesign (9bfdb75)
- multi-arch Docker support, security hardening, and test improvements (748d2b7)
- multi-file metadata display with per-file caching (42b59f3)
- pipeline: add inline settings configuration for automation steps (827eae8)
- production Docker, Playwright tests, settings API, and bug fixes (027c515)
- replace model dropdown with intuitive subject/quality selector in remove-bg (bc26d60)
- rewrite file-store with FileEntry model for multi-image support (abbb3e4)
- rewrite resize settings with tab-based UI (presets, custom, scale) (b9f3ac0)
- rewrite resize settings with tab-based UI (presets, custom, scale) (3b39a8c)
- rotate: add editable angle input and fine-tune +/- buttons (e1f04c2)
- serve React SPA from Fastify in production mode (d4ae4d5)
- storage: add file storage helpers module (7c37213)
- stores: add Zustand store for Files page state management (fb487be)
- tool-factory: auto-save results to persistent file store when fileId provided (27d8629)
- ui: add teams, tools, feature flags, temp files, logo to settings dialog (fbce0dd)
- upgrade to BiRefNet SOTA background removal model (f53937b)
- web: add before/after image comparison slider component (64c8f90)
- web: add fullscreen tool grid view (86b716b)
- web: add i18n architecture with English translations (994cba7)
- web: add keyboard shortcuts for tool navigation (e06e44c)
- web: add mobile responsive layout with bottom navigation (ade6469)
- web: add pipeline builder UI with saved automations and templates (39a7bf2)
- web: add ProgressCard component (ed69488)
- web: add ProgressCard to non-AI tool settings (Group A) (17035e9)
- web: add settings dialog with general, security, API keys, and about sections (bca8e81)
- web: add Stirling-PDF-style file preview, review panel, and tool chaining UX (e12fc57)
- web: add tool settings UI for all core image tools (f9be6d6)
- web: migrate AI tool settings to ProgressCard (eed4fc2)
- web: redesign home page upload flow and add auth guard (915a8cc)
- web: rewrite useToolProcessor with XHR upload progress and SSE (305f50b)
- wire up batch processing across tool settings components (1d87091)