SnapOtter
05720f350a
Revert "feat: replace AI matting with chroma-based checkerboard detection"
...
This reverts commit f1a4c94375 .
2026-05-13 17:20:33 +08:00
SnapOtter
f1a4c94375
feat: replace AI matting with chroma-based checkerboard detection
...
The transparency-fixer now directly detects the baked-in checkerboard
pattern using per-pixel chroma analysis instead of BiRefNet AI matting.
Achromatic pixels in the gray range are classified as background
(transparent), chromatic pixels as foreground (opaque), with smooth
transitions at anti-aliased edges.
- No longer requires Python sidecar or background-removal bundle
- Watermark removal uses Sharp median(5) filter pre-processing
- Moved tool from "ai" to "utilities" category
- Removed from PYTHON_SIDECAR_TOOLS and background-removal enablesTools
- Near-instant processing (pure Sharp, no model inference)
2026-05-13 17:16:02 +08:00
SnapOtter
6f30dbc09e
feat(web): remove mode selector, add colorize strength slider
2026-05-13 17:06:45 +08:00
SnapOtter
1581fa933f
feat: add i18n strings for transparency-fixer watermark removal
2026-05-13 16:15:13 +08:00
SnapOtter
347b8ad530
feat: register content-aware-crop in shared package
2026-05-11 21:08:30 +08:00
SnapOtter
172c0fa772
fix: update tool count to 51, refresh hero copy and login page
...
- Update stale tool counts (48/49/50) to 51 across all apps, docs, and tests
- Add Meme Generator to landing page bento grid (was missing)
- Add 12 SEO-friendly rotating phrases to hero typing cursor
- Change landing hero subtitle to "Every image tool you need."
- Replace outdated login page copy with branded hero + rotating phrases
2026-05-10 22:18:11 +08:00
SnapOtter
78ca9720e7
fix: sync all workspace package versions to 1.16.0
2026-05-10 20:19:02 +08:00
SnapOtter
ee871dc8ea
feat: add Deep Enhance toggle to image enhancement UI
...
Toggle sends deepEnhance: true in settings to enable AI-powered
noise/artifact cleanup via SCUNet after the Sharp pipeline.
2026-05-09 11:31:36 +08:00
SnapOtter
05cb7c940f
fix: deduplicate tool icons and add missing icon mappings
...
7 icons were shared by multiple tools, now each tool has a unique icon:
- favicon: Globe -> AppWindow
- smart-crop: Focus -> Crosshair
- noise-removal: Sparkles -> AudioLines
- beautify: Sparkles -> ImagePlus
- red-eye-removal: Eye -> ScanEye
- color-palette: Palette -> Droplets
- transparency-fixer: Wand2 -> ShieldCheck
- pdf-to-image: FileOutput -> BookImage
2 icons were missing from the ICON_MAP (falling back to generic FileImage):
- Scaling (content-aware-resize)
- Laugh (meme-generator)
2026-05-09 00:08:24 +08:00
SnapOtter
aa773addb4
merge: resolve conflict with main branch in tool-registry.tsx
2026-05-08 18:55:28 +08:00
SnapOtter
e118717337
merge: resolve conflict with main branch in README.md
2026-05-08 17:32:16 +08:00
SnapOtter
3d9324b82a
chore: update tool count to 50 across all references
2026-05-08 16:33:12 +08:00
SnapOtter
136a4a0752
Merge branch 'feat/format-support-expansion'
...
# Conflicts:
# README.md
# apps/web/src/components/layout/app-layout.tsx
2026-05-08 16:21:11 +08:00
SnapOtter
8f10b62898
feat(beautify): add tool definition and i18n strings
2026-05-08 15:58:10 +08:00
SnapOtter
2be001161b
feat(meme-generator): add tool definition and i18n strings
2026-05-08 15:38:31 +08:00
SnapOtter
0aeddbd994
feat: add color-blindness tool definition and i18n strings
2026-05-08 15:15:39 +08:00
SnapOtter
16af9c573a
feat: remove app name and logo customization feature
...
Users can no longer customize the app name or logo. The branding API
endpoints, permission, frontend UI, env vars (APP_NAME, MAX_LOGO_SIZE_KB),
and all related tests are removed. Includes a migration to clean up
branding data from existing databases.
2026-05-07 19:41:30 +08:00
SnapOtter
979a833978
fix: resolve analytics data gaps and resize validation failures
...
- Fix resize 20% failure rate: add Zod refine requiring at least one
dimension, enforce integer/max constraints, clamp percentage scaling
to minimum 1px, and guard against missing metadata in withoutEnlargement
- Fix PostHog init race condition: move consent check before async import
so frontend events (search, pageview) are no longer silently dropped
- Fix identify() passing nested $set/$set_once wrappers instead of flat
properties, so version person property now appears on PostHog profiles
- Add error_code and error_message to failed tool_used analytics events
for debugging tool failures from PostHog
2026-05-06 23:21:45 +08:00
SnapOtter
9eae8369bb
feat: wire editor route, sidebar, mobile nav, and i18n
2026-05-06 23:14:30 +08:00
SnapOtter
84e62e6132
refactor: rename tool display name to "PNG Transparency Fixer"
2026-05-06 18:53:37 +08:00
SnapOtter
eb3d0828cb
docs: add transparency-fixer endpoint documentation
2026-05-05 23:24:22 +08:00
SnapOtter
d5a808dbc7
feat: register transparency-fixer in shared constants, features, and i18n
2026-05-05 22:58:30 +08:00
SnapOtter
fe86c5ac9c
fix: update APP_VERSION constant to 1.16.0
...
The health endpoint was reporting 1.15.11 because APP_VERSION in
shared/constants.ts was not updated with the version bump.
2026-05-01 21:13:20 +08:00
SnapOtter
e36b74538d
feat(i18n): add target file size strings for image-to-pdf
2026-04-27 21:57:11 +08:00
SnapOtter
8bc8b18f90
fix: version constant and CPU torch install for Docker release
...
- Bump APP_VERSION to 1.15.11 (was hardcoded at 1.15.9, causing
health endpoint to report wrong version in Docker images)
- Fix cpu_fallback_packages() splitting --index-url into separate
pip install arguments, breaking torch install on CPU-only amd64
2026-04-25 08:49:31 +08:00
SnapOtter
8633dba431
fix: sync API docs, register content-aware-resize, normalize tool counts
...
- Fix 23 OpenAPI schema discrepancies across 16+ tools (wrong ranges,
missing fields, incorrect schemas for gif-tools/collage/ocr)
- Add content-aware-resize to canonical TOOLS array and landing BentoGrid
- Normalize tool count to 47 across README, docs, landing, i18n, OpenAPI
- Remove dead "automation" ToolCategory variant
- Add BMP and JPEG XL format decoding via ImageMagick
- Add libopenexr-dev to Docker runtime image
- Update e2e test selectors for current pipeline builder UI
2026-04-24 23:27:08 +08:00
SnapOtter
0309e0f680
chore: deploy to Cloudflare Pages and update branding
...
- Add Cloudflare Pages deployment for landing page (snapotter.com) and
docs (docs.snapotter.com)
- Create deploy-landing.yml and update deploy-docs.yml workflows
- Update CI to ignore apps/landing/** paths
- Fix logo transparency (remove white background) across all apps
- Recreate social-preview.png with SnapOtter branding
- Update all docs URLs from GitHub Pages to docs.snapotter.com
- Update VitePress config: light theme default, fix llms.txt paths
- Add .vitepress/cache/ and .env.* to gitignore
2026-04-24 18:06:29 +08:00
ashim-hq
8c5945362a
refactor: simplify analytics consent page for higher opt-in
...
Remove two-column bullet lists, vendor names, and fear-priming "NEVER"
list. Replace with a single benefit-led paragraph and privacy note.
2026-04-23 22:08:27 +08:00
ashim-hq
03df555e10
feat: add shared analytics types, events, consent logic, and i18n strings
2026-04-22 18:58:16 +08:00
Ashim and GitHub
5a45bcbc8f
feat: production-grade RBAC with editor role, custom roles, API key scoping, and audit log ( #89 )
...
* feat(rbac): add editor role, 3 new permissions, ownership helper
* feat(rbac): add audit_log table, apiKeys.permissions column, editor role to schema
* feat(rbac): wire requirePermission into all routes, add editor role support
* refactor(rbac): replace ad-hoc role checks with permission-based ownership
* feat(rbac): add audit log DB writes + query endpoint
Dual-write audit events to stdout (existing) and SQLite audit_log table.
Add GET /api/v1/audit-log with pagination, action filter, and date range
filtering, gated behind audit:read permission.
* feat(rbac): add API key permission scoping with ceiling enforcement
* feat(rbac): add escalation prevention and last-admin protection
* feat(rbac): add editor role to UI, API key permission scoping in settings
* test(rbac): add full permission matrix integration test
* test(rbac): add editor role E2E tests
* feat(rbac): add custom roles with CRUD API and DB-backed permission lookup
* feat(rbac): add API key expiration
* feat(rbac): add roles management UI and API key expiration to settings
* feat(rbac): add audit log UI to settings
* fix: remove any cast in API key permission validation
* test(rbac): add unit tests for username validation rules
* test(rbac): add unit tests for effective permissions and ownership
* test(rbac): add comprehensive route permission matrix (all routes × all roles)
* test(rbac): add auth route edge case tests (login failures, session expiry, password side effects)
* test(rbac): add escalation prevention tests (register, update, self-demote, last-admin)
* test(rbac): add ownership enforcement tests (files, pipelines, editor access, cross-user isolation)
* test(rbac): add API key edge cases (name validation, delete behavior, key revocation)
* test(rbac): add audit log edge cases (all events, pagination clamping, structure)
* test(rbac): add custom roles edge case tests (validation, CRUD, functional permissions)
* test(rbac): add comprehensive E2E tests (roles UI, audit log, custom role, API key scoping)
2026-04-22 18:10:04 +08:00
ashim-hq
ee8e9861a7
feat: docker unlimited defaults + i18n strings for admin UI
...
- docker-compose: log rotation 10m×3 → 50m×5 for power users
- docker-compose: add shm_size 2gb for AI workloads
- i18n: add strings for Limits & Resources admin panel
2026-04-20 21:52:07 +08:00
ashim-hq
37277e5c09
fix: resolve ONNX CUDA fallback, Docker e2e infrastructure, and all test failures
...
- Add safe_onnx_session() to gpu.py with graceful CUDA EP → CPU fallback
- Replace bare ort.InferenceSession() calls across colorize, restore, inpaint, remove_bg
- Add libcublas-12-6 to production Dockerfile for ONNX Runtime CUDA EP
- Add skipIfFeatureNotInstalled guards to remove-bg, blur-faces, smart-crop, ocr, noise-removal e2e specs
- Add AI tool install prompt detection in tools-all.spec.ts
- Add smart-crop to PYTHON_SIDECAR_TOOLS so frontend shows install prompt correctly
- Create Dockerfile.test.dockerignore to include tests/ in test image builds
- Add libheif-examples and exiftool to Dockerfile.test for HEIC and metadata tests
- Regenerate visual regression baselines for Docker/Linux and skip on non-Docker platforms
2026-04-20 20:53:54 +08:00
ashim-hq
f67a03bb36
fix: resolve all audit findings — e2e coverage, feature system hardening, visual baselines
...
- Add 8 new E2E specs for AI tools (upscale, enhance-faces, colorize,
restore-photo, erase-object, smart-crop, passport-photo, red-eye-removal)
closing all HIGH/MEDIUM coverage gaps from the test matrix audit
- Fix ensureAiDirs() crash on non-Docker environments by gating on
isDockerEnvironment() — prevents ENOENT when /data doesn't exist
- Bump torch 2.6.0→2.7.0 and torchvision 0.21.0→0.22.0 in feature
manifest for broader Python version compatibility
- Add Python 3.14 version guard warning in install_feature.py
- Remove duplicate torchvision shims from upscale.py and enhance_faces.py
(dispatcher.py already handles this at startup)
- Remove orphaned tools.batch i18n key and dead pipeline-builder filter
- Regenerate 4 visual regression baselines for current UI state
- Add data-testid to passport-photo generate button for E2E testability
2026-04-20 18:47:59 +08:00
ashim-hq
10bdc24a4a
feat: on-demand AI feature install with progress indicators
2026-04-19 19:52:14 +08:00
ashim-hq
e906e41ff3
feat: add shared feature bundle definitions and tool-to-bundle mapping
2026-04-18 02:24:40 +08:00
ashim-hq
ae411f2d72
chore(release): 1.15.9 [skip ci]
2026-04-17 23:26:26 +08:00
semantic-release-bot
95af281584
chore(release): 1.15.8 [skip ci]
...
## [1.15.8](https://github.com/ashim-hq/ashim/compare/v1.15.7...v1.15.8 ) (2026-04-17)
### Bug Fixes
* copy Node.js from official image instead of apt-get install ([536125e ](https://github.com/ashim-hq/ashim/commit/536125ec9fbc5758bdd3e8f0f4c44253de2231c7 ))
2026-04-17 07:36:40 +00:00
semantic-release-bot
caa2160ef8
chore(release): 1.15.7 [skip ci]
...
## [1.15.7](https://github.com/ashim-hq/ashim/compare/v1.15.6...v1.15.7 ) (2026-04-17)
### Bug Fixes
* add retry with backoff for apt-get update on CUDA base image ([3d6db5a ](https://github.com/ashim-hq/ashim/commit/3d6db5a32d3f9292d5476e9bd80c1f06624fa316 ))
2026-04-17 07:04:40 +00:00
semantic-release-bot
23dae8d152
chore(release): 1.15.6 [skip ci]
...
## [1.15.6](https://github.com/ashim-hq/ashim/compare/v1.15.5...v1.15.6 ) (2026-04-17)
### Performance Improvements
* parallelize model downloads and switch to registry cache ([79c4ed6 ](https://github.com/ashim-hq/ashim/commit/79c4ed6a359b008dedeb154a55e2764ee0e3d9fa ))
2026-04-17 06:55:08 +00:00
semantic-release-bot
2fd0c00564
chore(release): 1.15.5 [skip ci]
...
## [1.15.5](https://github.com/ashim-hq/ashim/compare/v1.15.4...v1.15.5 ) (2026-04-17)
### Bug Fixes
* exclude e2e-docker tests from Vitest runner ([8df18c5 ](https://github.com/ashim-hq/ashim/commit/8df18c56a6c69e2a188cf0e7c97e692cd4c0e7ec ))
2026-04-17 06:41:05 +00:00
semantic-release-bot
3dc98374e2
chore(release): 1.15.4 [skip ci]
...
## [1.15.4](https://github.com/ashim-hq/ashim/compare/v1.15.3...v1.15.4 ) (2026-04-17)
### Bug Fixes
* verbose error handling, batch processing, and multi-file support ([3223960 ](https://github.com/ashim-hq/ashim/commit/32239600ae6ce30628e77e61a805ca0a167b5068 ))
* verbose errors, batch processing, multi-file support ([#1 ](https://github.com/ashim-hq/ashim/issues/1 )) ([8b87cf8 ](https://github.com/ashim-hq/ashim/commit/8b87cf888c6194e2af427a180607d7c53a1d15b9 ))
2026-04-17 06:21:10 +00:00
semantic-release-bot
b76b9a1878
chore(release): 1.15.3 [skip ci]
...
## [1.15.3](https://github.com/ashim-hq/ashim/compare/v1.15.2...v1.15.3 ) (2026-04-16)
### Bug Fixes
* retry apt-get update on transient mirror sync errors (Acquire::Retries=3) ([cec7163 ](https://github.com/ashim-hq/ashim/commit/cec71632d0c868c3a413b813ff15baccc8fa8cdd ))
2026-04-16 19:46:27 +00:00
semantic-release-bot
59e6f2f28c
chore(release): 1.15.2 [skip ci]
...
## [1.15.2](https://github.com/ashim-hq/ashim/compare/v1.15.1...v1.15.2 ) (2026-04-16)
### Bug Fixes
* use GHCR_TOKEN with write:packages scope for GHCR login ([e14414f ](https://github.com/ashim-hq/ashim/commit/e14414f3061981b1454dc7d4504c64ec01db945e ))
2026-04-16 18:13:08 +00:00
semantic-release-bot
fd1eb9c781
chore(release): 1.15.1 [skip ci]
...
## [1.15.1](https://github.com/ashim-hq/ashim/compare/v1.15.0...v1.15.1 ) (2026-04-16)
### Bug Fixes
* **docker:** create /opt/models unconditionally so chown works in CI ([93ce289 ](https://github.com/ashim-hq/ashim/commit/93ce2891cc26afc93f01168d008927d3d356c1a9 ))
* **docker:** run frontend builder on BUILDPLATFORM to fix esbuild crash under QEMU ([6a3ad0d ](https://github.com/ashim-hq/ashim/commit/6a3ad0d496e291b30a3f719ca079c43ce7aab705 ))
* resolve runtime model path mismatch for non-root Docker user ([f28792a ](https://github.com/ashim-hq/ashim/commit/f28792a5ed78221f38cf2f3c80cae9f24cd7f5e3 ))
2026-04-16 15:46:06 +00:00
Siddharth Kumar Sah
9cd91edee1
chore(release): 1.15.0
...
Bump all workspace packages from 1.14.0 to 1.15.0.
2026-04-15 23:17:31 +08:00
Siddharth Kumar Sah
d4ac116c15
chore: remove broken /batch and /pipeline tool stubs
...
Both routes showed "Tool not found" — the UI was never implemented.
Pipeline functionality already lives at /automate (the Automate page).
Also removed the empty Automation category and unused Workflow/FolderInput
icons from icon-map.ts.
2026-04-15 18:52:36 +08:00
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
5be8be3dc3
feat: add Optimize for Web tool ( #68 )
...
* feat(image-engine): add OptimizeForWebOptions type
* feat(image-engine): add optimizeForWeb operation
* feat(shared): add optimize-for-web tool definition and i18n
* feat(api): add optimize-for-web route with preview endpoint
* feat(web): add optimize-for-web settings component with live preview
* feat(web): register optimize-for-web in tool registry
* fix(web): align toggle switch translate with codebase pattern
---------
Co-authored-by: stirling-image <stirling-image@users.noreply.github.com >
2026-04-14 16:16:04 +08:00
stirling-image
831ef3f2de
refactor(passport-photo): rebuild UI for online applications with file size control
2026-04-14 12:55:37 +08:00
stirling-image
3b8cec36e4
Merge branch 'feat/stitch-redesign'
...
# Conflicts:
# packages/shared/src/i18n/en.ts
# pnpm-lock.yaml
2026-04-14 12:35:34 +08:00