SnapOtter
6b037e3abc
feat: add html file upload mode to html-to-image tool
2026-06-06 21:45:39 +08:00
SnapOtter
f8cfa17bd6
feat: register html-to-image in frontend tool registry
2026-06-06 21:45:39 +08:00
SnapOtter
af1220cab1
feat: add frontend store and components for html-to-image tool
2026-06-06 21:45:38 +08:00
SnapOtter
fe0cbd32b2
fix: use correct i18n key path for noToolsFound in tool palette
2026-06-06 10:38:34 +08:00
SnapOtter
91c66eb4be
fix: resolve all QA report issues from 2026-06-05 sweep
...
Merges 77 QA issue fixes across routing, editor, i18n, pipeline,
and settings. Includes catch-all 404 page, keyboard shortcuts,
export filename, password validation, selection masking, brush flow,
eraser modes, feather control, pipeline persistence, RTL properties,
license info, and i18n for all 21 locales.
2026-06-06 10:37:36 +08:00
SnapOtter
643df59ca1
fix: add missing i18n keys to en.ts and all locale files
...
Ensures all 21 locale files have: pageNotFound, licenseLabel,
noStepsHeading, searchToolsPlaceholder, and expanded files section
with 20 keys. Updates passwordTooShort to match backend validation.
2026-06-06 10:37:23 +08:00
SnapOtter
d373ac83dc
feat: mobile-responsive settings dialog, homepage, nav, and toast
...
- Settings dialog: full-screen on mobile with horizontal pill nav,
card-based user/team tables, compact audit log, stacked SettingRow
- HomePage: stacked mobile layout with horizontal quick actions,
tablet-friendly panel widths (w-64 lg:w-80)
- Extract MobileBottomNav component with safe-area-inset padding
- Add MobileBottomNav to fullscreen grid page
- Larger touch targets on hamburger, sidebar close, bottom nav items
- Toast repositioned to top-center on mobile (avoids bottom nav overlap)
- PWA viewport-fit=cover for notch devices
- Fix useMediaQuery null guard for test environment compatibility
2026-06-05 23:18:55 +08:00
SnapOtter
190d5c84bf
fix: resolve remaining QA issues -- editor features, masking, persistence, Playwright tests
...
Phase 1 quick fixes:
- Add isInputFocused() guard to Cmd+A/D/T/J shortcuts (P1-7)
- Add Go Home button to tool-not-found page (P2-30)
- Fix hardcoded "Import from Library" string in file library modal (P2-28)
- Fix TeamEntry.id type from number to string to match API (P2-6)
- Add eye toggle to confirm password field (P2-10)
- Add Apply/Cancel buttons to Free Transform options bar (P2-14)
Phase 2 state fixes:
- Add sessionStorage persistence to pipeline store (P1-26)
- Fix Free Transform 0 dimensions by falling back to selection bounds (P1-6)
Phase 3 editor features:
- Constrain brush/eraser drawing within active selection bounds (P1-5)
- Add feather radius control to selection options (P2-21)
- Add flow control slider to brush options (P2-22)
- Add brush/block mode selector to eraser options (P2-23)
- Add estimated file size display to export dialog (P2-18)
Phase 4:
- Add Playwright e2e tests for key fixes (404 page, routing, pipeline persistence, export dialog)
2026-06-05 23:14:57 +08:00
SnapOtter
37f8ebcf66
Merge branch 'feat/remove-bg-improvements'
2026-06-05 23:05:33 +08:00
SnapOtter
80957f6e10
feat: improve remove background with edge smoothing, color decontamination, output formats
...
- Expose birefnet-hr-matting in UI (People/Ultra) and fix model defaults
(People/Max now uses birefnet-matting for true alpha matting)
- Add output format selector (PNG/WebP/AVIF) with lossless alpha support
- Add edge smoothing post-processing (Off/Light/Medium/Strong) via
morphological mask refinement to reduce gray halo artifacts
- Add color decontamination to remove background color spill from
semi-transparent edge pixels
- Thread new settings through full stack: frontend -> API schema ->
Python sidecar -> Sharp effects pipeline
- Add i18n keys for all 21 locales
- Add unit tests for new option serialization (3 tests)
- Add integration tests for new settings validation (4 tests)
2026-06-05 23:05:25 +08:00
SnapOtter
07e12754ba
fix: resolve QA report issues across routing, editor, i18n, and pipeline
...
- Add /tools/:toolId legacy redirect and catch-all 404 page (P1-12, P1-13)
- Add Shift+O dodge/burn/sponge cycle and Ctrl+Y redo shortcut (P1-3, P1-4)
- Fix Fit on Screen menu action to properly compute fit zoom (P1-8)
- Add filename input to editor export dialog (P1-2)
- Fix password validation mismatch: frontend now requires 8 chars (P1-11)
- Add license info to Settings About section (P1-9)
- Replace hardcoded strings in dropzone, files, pipeline with i18n keys (P1-17 to P1-25)
- Add 20+ missing i18n keys to all 21 locale files
- Translate Japanese editor.shapes and settings.aiFeatures sections (P1-19, P1-20)
- Fix RTL: use logical CSS properties in sidebar, files, app-layout (P2-24 to P2-26)
- Add single-file download button to pipeline results (P1-28)
- Fix compress step settings restoration on pipeline load (P1-27)
- Increase mobile nav touch targets to 44px minimum (P2-29)
2026-06-05 22:31:28 +08:00
SnapOtter
6a8d9dcd8d
feat: implement 6 research-backed mobile responsive features
...
- Bottom sheet for mobile tool settings (replaces top-collapsible panel)
- Pinch-to-zoom and wheel zoom on image viewer via @use-gesture/react
- Replace all vh units with dvh for dynamic viewport height
- Vertical before-after comparison on mobile devices
- Konva multi-touch pinch-to-zoom on editor canvas
- Container queries for adaptive tool settings + touch-friendly CSS
2026-06-05 22:30:43 +08:00
SnapOtter and GitHub
91e90b390e
fix: recover SSE connections on mobile tab visibility change ( #204 )
...
* fix: extend SSE result retention from 2 to 10 minutes for mobile recovery
* fix: check server health on tab visibility change for mobile recovery
* fix: recover feature install SSE on tab visibility change
* fix: reconnect SSE on tab visibility change in tool processor
* fix: reconnect SSE on tab visibility change in pipeline processor
* test: add visibility recovery tests for connection monitor
2026-06-05 22:28:24 +08:00
SnapOtter
807bd0cf85
fix: reconnect SSE on tab visibility change in pipeline processor
2026-06-05 21:51:34 +08:00
SnapOtter
4d8cc2dcf7
fix: reconnect SSE on tab visibility change in tool processor
2026-06-05 21:49:23 +08:00
SnapOtter
2b92109aee
fix: recover feature install SSE on tab visibility change
2026-06-05 21:45:32 +08:00
SnapOtter
fbc70272dd
fix: check server health on tab visibility change for mobile recovery
2026-06-05 21:45:27 +08:00
SnapOtter and GitHub
01421640b5
fix: resolve file library Open File bug, upload reliability, and SSE proxy timeouts ( #203 )
...
The Open File button in the Files section did nothing due to a race
condition where the home page reset the file store on mount before files
from handleOpenFile could render. Upload on the files page used fetch
with no timeout, progress, or retry, causing silent failures on mobile
and slow connections. SSE connections for job progress had no keepalive
pings, allowing reverse proxies to kill idle streams.
2026-06-05 19:01:40 +08:00
SnapOtter
bec3b1e289
feat: add shape fill/stroke transparency, RGBA color picker, and dash styles
...
Closes #193 . Shapes now support no-fill and no-stroke toggles for drawing
outlines or fill-only shapes. Adds RGBA color picker with opacity control,
stroke dash styles (solid/dashed/dotted), and i18n for all shape labels.
2026-06-05 16:40:57 +08:00
1616ad1a5a
chore(deps-dev): bump dev-deps group + fix vitest 3.2.6 mock resolution ( #197 )
...
* chore(deps-dev): bump the dev-deps group across 1 directory with 7 updates
Bumps the dev-deps group with 7 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome ) | `2.4.15` | `2.4.16` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8 ) | `3.2.4` | `3.2.6` |
| [turbo](https://github.com/vercel/turborepo ) | `2.9.14` | `2.9.16` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ) | `3.2.4` | `3.2.6` |
| [@types/opentype.js](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/opentype.js ) | `1.3.9` | `1.3.10` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `6.4.2` | `6.4.3` |
| [vitepress-plugin-llms](https://github.com/okineadev/vitepress-plugin-llms ) | `1.12.2` | `1.13.1` |
Updates `@biomejs/biome` from 2.4.15 to 2.4.16
- [Release notes](https://github.com/biomejs/biome/releases )
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md )
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.16/packages/@biomejs/biome )
Updates `@vitest/coverage-v8` from 3.2.4 to 3.2.6
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.6/packages/coverage-v8 )
Updates `turbo` from 2.9.14 to 2.9.16
- [Release notes](https://github.com/vercel/turborepo/releases )
- [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md )
- [Commits](https://github.com/vercel/turborepo/compare/v2.9.14...v2.9.16 )
Updates `vitest` from 3.2.4 to 3.2.6
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.6/packages/vitest )
Updates `@types/opentype.js` from 1.3.9 to 1.3.10
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/opentype.js )
Updates `vite` from 6.4.2 to 6.4.3
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.3/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v6.4.3/packages/vite )
Updates `vitepress-plugin-llms` from 1.12.2 to 1.13.1
- [Release notes](https://github.com/okineadev/vitepress-plugin-llms/releases )
- [Commits](https://github.com/okineadev/vitepress-plugin-llms/compare/v1.12.2...v1.13.1 )
---
updated-dependencies:
- dependency-name: "@biomejs/biome"
dependency-version: 2.4.16
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@vitest/coverage-v8"
dependency-version: 3.2.6
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: turbo
dependency-version: 2.9.16
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vitest
dependency-version: 3.2.6
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@types/opentype.js"
dependency-version: 1.3.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vite
dependency-version: 6.4.3
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vitepress-plugin-llms
dependency-version: 1.13.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
* fix(test): resolve vitest 3.2.6 mock path breakage for posthog-node and @sentry/node
Add posthog-node and @sentry/node to vitest resolve aliases (matching
the existing pattern for all other api-workspace packages) and switch
the analytics test mocks from fragile relative node_modules paths to
bare specifiers. Vitest 3.2.6 changed how it matches mock paths through
pnpm symlinks after vi.resetModules(), causing 9 analytics test failures.
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 22:22:40 +08:00
ed8cea7dc9
chore(deps): bump the production-deps group across 1 directory with 15 updates ( #195 )
...
Bumps the production-deps group with 15 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [@neplex/vectorizer](https://github.com/neplextech/vectorizer ) | `0.0.5` | `0.1.0` |
| [@scalar/fastify-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/fastify ) | `1.57.2` | `1.57.5` |
| [@sentry/node](https://github.com/getsentry/sentry-javascript ) | `10.53.1` | `10.55.0` |
| [js-yaml](https://github.com/nodeca/js-yaml ) | `4.1.1` | `4.2.0` |
| [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node ) | `5.34.3` | `5.35.9` |
| [tsx](https://github.com/privatenumber/tsx ) | `4.22.1` | `4.22.4` |
| [zxing-wasm](https://github.com/Sec-ant/zxing-wasm ) | `3.0.3` | `3.1.0` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react ) | `19.2.6` | `19.2.7` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom ) | `19.2.6` | `19.2.7` |
| [@sentry/react](https://github.com/getsentry/sentry-javascript ) | `10.53.1` | `10.55.0` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.374.0` | `1.377.0` |
| [react-colorful](https://github.com/omgovich/react-colorful ) | `5.6.1` | `5.7.0` |
| [react-konva](https://github.com/konvajs/react-konva ) | `19.2.3` | `19.2.4` |
| [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom ) | `7.15.1` | `7.16.0` |
| [zustand](https://github.com/pmndrs/zustand ) | `5.0.13` | `5.0.14` |
Updates `@neplex/vectorizer` from 0.0.5 to 0.1.0
- [Release notes](https://github.com/neplextech/vectorizer/releases )
- [Commits](https://github.com/neplextech/vectorizer/compare/v0.0.5...v0.1.0 )
Updates `@scalar/fastify-api-reference` from 1.57.2 to 1.57.5
- [Release notes](https://github.com/scalar/scalar/releases )
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/fastify/CHANGELOG.md )
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/fastify )
Updates `@sentry/node` from 10.53.1 to 10.55.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.53.1...10.55.0 )
Updates `js-yaml` from 4.1.1 to 4.2.0
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md )
- [Commits](https://github.com/nodeca/js-yaml/commits )
Updates `posthog-node` from 5.34.3 to 5.35.9
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.35.9/packages/node )
Updates `tsx` from 4.22.1 to 4.22.4
- [Release notes](https://github.com/privatenumber/tsx/releases )
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs )
- [Commits](https://github.com/privatenumber/tsx/compare/v4.22.1...v4.22.4 )
Updates `zxing-wasm` from 3.0.3 to 3.1.0
- [Release notes](https://github.com/Sec-ant/zxing-wasm/releases )
- [Changelog](https://github.com/Sec-ant/zxing-wasm/blob/main/CHANGELOG.md )
- [Commits](https://github.com/Sec-ant/zxing-wasm/compare/v3.0.3...v3.1.0 )
Updates `react` from 19.2.6 to 19.2.7
- [Release notes](https://github.com/facebook/react/releases )
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/facebook/react/commits/v19.2.7/packages/react )
Updates `react-dom` from 19.2.6 to 19.2.7
- [Release notes](https://github.com/facebook/react/releases )
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/facebook/react/commits/v19.2.7/packages/react-dom )
Updates `@sentry/react` from 10.53.1 to 10.55.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.53.1...10.55.0 )
Updates `posthog-js` from 1.374.0 to 1.377.0
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.374.0...posthog-js@1.377.0 )
Updates `react-colorful` from 5.6.1 to 5.7.0
- [Release notes](https://github.com/omgovich/react-colorful/releases )
- [Changelog](https://github.com/omgovich/react-colorful/blob/master/CHANGELOG.md )
- [Commits](https://github.com/omgovich/react-colorful/commits/5.7.0 )
Updates `react-konva` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/konvajs/react-konva/releases )
- [Commits](https://github.com/konvajs/react-konva/compare/v19.2.3...v19.2.4 )
Updates `react-router-dom` from 7.15.1 to 7.16.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.16.0/packages/react-router-dom )
Updates `zustand` from 5.0.13 to 5.0.14
- [Release notes](https://github.com/pmndrs/zustand/releases )
- [Commits](https://github.com/pmndrs/zustand/compare/v5.0.13...v5.0.14 )
---
updated-dependencies:
- dependency-name: "@neplex/vectorizer"
dependency-version: 0.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@scalar/fastify-api-reference"
dependency-version: 1.57.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: "@sentry/node"
dependency-version: 10.55.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: js-yaml
dependency-version: 4.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-node
dependency-version: 5.35.9
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: tsx
dependency-version: 4.22.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: zxing-wasm
dependency-version: 3.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react
dependency-version: 19.2.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-dom
dependency-version: 19.2.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: "@sentry/react"
dependency-version: 10.55.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-js
dependency-version: 1.377.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-colorful
dependency-version: 5.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-konva
dependency-version: 19.2.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-router-dom
dependency-version: 7.16.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: zustand
dependency-version: 5.0.14
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 21:49:06 +08:00
SnapOtter
59bbe2b5e0
fix: use crypto.getRandomValues() for password generation
...
Math.random() is not cryptographically secure. Replace with
crypto.getRandomValues() in both generatePassword() functions
to resolve CodeQL js/insecure-randomness alerts.
2026-05-20 16:04:57 +08:00
SnapOtter
dfbc4cfd59
chore(release): 1.17.1
...
Bump version across all workspaces, update changelog, release notes,
OpenAPI spec, bug report template, and OpenSSF badge answers.
2026-05-18 19:10:56 +08:00
SnapOtter and GitHub
8b85a8c386
fix: update all renamed Lucide icons and make icon test dynamic ( #150 )
...
- FileEdit -> FilePen (bulk-rename tool)
- Wand2 -> Wand (object eraser)
- Columns -> Columns2 (stitch tool)
- Add Expand to ICON_MAP (ai-canvas-expand)
- Make icon-map test derive icon lists from shared constants instead
of hardcoding names, preventing future breakage on icon renames
2026-05-18 17:09:14 +08:00
SnapOtter and GitHub
27bbdb6e8a
fix: update renamed Lucide icons (Wand2 -> Wand, Columns -> Columns2) ( #149 )
...
Lucide v0.577 dropped Wand2 and Columns from the icons object used
for dynamic lookup. Named exports still exist as aliases, but the
landing site and tools index use icons[name] which fails silently.
Updates shared constants and web app icon-map to use the current names.
2026-05-18 16:50:30 +08:00
0bfbe31fe0
chore(deps-dev): bump the dev-deps group with 13 updates ( #147 )
...
Bumps the dev-deps group with 13 updates:
| Package | From | To |
| --- | --- | --- |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome ) | `2.4.8` | `2.4.15` |
| [@playwright/test](https://github.com/microsoft/playwright ) | `1.58.2` | `1.60.0` |
| [@semantic-release/github](https://github.com/semantic-release/github ) | `12.0.6` | `12.0.8` |
| [@semantic-release/release-notes-generator](https://github.com/semantic-release/release-notes-generator ) | `14.1.0` | `14.1.1` |
| [jsdom](https://github.com/jsdom/jsdom ) | `29.0.1` | `29.1.1` |
| [turbo](https://github.com/vercel/turborepo ) | `2.8.20` | `2.9.14` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `22.19.15` | `22.19.19` |
| [@types/pdfkit](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/pdfkit ) | `0.17.5` | `0.17.6` |
| [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite ) | `4.2.2` | `4.3.0` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss ) | `4.2.2` | `4.3.0` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `6.4.1` | `6.4.2` |
| [vitepress-plugin-llms](https://github.com/okineadev/vitepress-plugin-llms ) | `1.12.0` | `1.12.2` |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss ) | `4.2.4` | `4.3.0` |
Updates `@biomejs/biome` from 2.4.8 to 2.4.15
- [Release notes](https://github.com/biomejs/biome/releases )
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md )
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.15/packages/@biomejs/biome )
Updates `@playwright/test` from 1.58.2 to 1.60.0
- [Release notes](https://github.com/microsoft/playwright/releases )
- [Commits](https://github.com/microsoft/playwright/compare/v1.58.2...v1.60.0 )
Updates `@semantic-release/github` from 12.0.6 to 12.0.8
- [Release notes](https://github.com/semantic-release/github/releases )
- [Commits](https://github.com/semantic-release/github/compare/v12.0.6...v12.0.8 )
Updates `@semantic-release/release-notes-generator` from 14.1.0 to 14.1.1
- [Release notes](https://github.com/semantic-release/release-notes-generator/releases )
- [Commits](https://github.com/semantic-release/release-notes-generator/compare/v14.1.0...v14.1.1 )
Updates `jsdom` from 29.0.1 to 29.1.1
- [Release notes](https://github.com/jsdom/jsdom/releases )
- [Commits](https://github.com/jsdom/jsdom/compare/v29.0.1...v29.1.1 )
Updates `turbo` from 2.8.20 to 2.9.14
- [Release notes](https://github.com/vercel/turborepo/releases )
- [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md )
- [Commits](https://github.com/vercel/turborepo/compare/v2.8.20...v2.9.14 )
Updates `@types/node` from 22.19.15 to 22.19.19
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `@types/pdfkit` from 0.17.5 to 0.17.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/pdfkit )
Updates `@tailwindcss/vite` from 4.2.2 to 4.3.0
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.0/packages/@tailwindcss-vite )
Updates `tailwindcss` from 4.2.2 to 4.3.0
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.0/packages/tailwindcss )
Updates `vite` from 6.4.1 to 6.4.2
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.2/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v6.4.2/packages/vite )
Updates `vitepress-plugin-llms` from 1.12.0 to 1.12.2
- [Release notes](https://github.com/okineadev/vitepress-plugin-llms/releases )
- [Commits](https://github.com/okineadev/vitepress-plugin-llms/compare/v1.12.0...v1.12.2 )
Updates `@tailwindcss/postcss` from 4.2.4 to 4.3.0
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.0/packages/@tailwindcss-postcss )
---
updated-dependencies:
- dependency-name: "@biomejs/biome"
dependency-version: 2.4.15
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@playwright/test"
dependency-version: 1.60.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
- dependency-name: "@semantic-release/github"
dependency-version: 12.0.8
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@semantic-release/release-notes-generator"
dependency-version: 14.1.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: jsdom
dependency-version: 29.1.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
- dependency-name: turbo
dependency-version: 2.9.14
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
- dependency-name: "@types/node"
dependency-version: 22.19.19
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@types/pdfkit"
dependency-version: 0.17.6
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@tailwindcss/vite"
dependency-version: 4.3.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
- dependency-name: tailwindcss
dependency-version: 4.3.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
- dependency-name: vite
dependency-version: 6.4.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vitepress-plugin-llms
dependency-version: 1.12.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@tailwindcss/postcss"
dependency-version: 4.3.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-18 16:41:09 +08:00
SnapOtter and GitHub
9941a1db03
feat: add 52 per-tool SEO landing pages and public changelog ( #145 )
...
* feat: add 52 per-tool SEO landing pages and public changelog
- Create individual landing pages for all 52 tools at /tools/{slug}
with search-intent title tags, unique FAQs (156 Q&As), per-tool
features, and rich schema markup (BreadcrumbList, WebApplication,
HowTo, FAQPage)
- Replace static sitemap.xml with dynamic generation including all
tool URLs
- Refactor bento grid to import from @snapotter/shared (eliminates
330 lines of duplicated tool data) and link cards to tool pages
- Add @snapotter/shared as workspace dependency to landing site
- Add public changelog page to docs site with curated release notes
from v1.8 through v1.17
- Update docs nav and sidebar with changelog link
* feat: enhance SEO and performance with updated metadata, robots.txt, and llms.txt
2026-05-18 16:39:54 +08:00
0dadca3b99
chore(deps): bump the production-deps group across 1 directory with 17 updates ( #144 )
...
Bumps the production-deps group with 17 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [@scalar/fastify-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/fastify ) | `1.49.5` | `1.57.2` |
| [@sentry/node](https://github.com/getsentry/sentry-javascript ) | `10.49.0` | `10.53.1` |
| [fflate](https://github.com/101arrowz/fflate ) | `0.8.2` | `0.8.3` |
| [p-queue](https://github.com/sindresorhus/p-queue ) | `9.1.0` | `9.3.0` |
| [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node ) | `5.29.5` | `5.34.2` |
| [sharp](https://github.com/lovell/sharp ) | `0.33.5` | `0.34.5` |
| [tsx](https://github.com/privatenumber/tsx ) | `4.21.0` | `4.22.1` |
| [zxing-wasm](https://github.com/Sec-ant/zxing-wasm ) | `3.0.2` | `3.0.3` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react ) | `19.2.4` | `19.2.6` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom ) | `19.2.4` | `19.2.6` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react ) | `0.469.0` | `0.577.0` |
| [@sentry/react](https://github.com/getsentry/sentry-javascript ) | `10.49.0` | `10.53.1` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.370.0` | `1.373.5` |
| [react-colorful](https://github.com/omgovich/react-colorful ) | `5.6.1` | `5.7.0` |
| [react-konva](https://github.com/konvajs/react-konva ) | `19.2.3` | `19.2.4` |
| [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom ) | `7.13.1` | `7.15.1` |
| [zustand](https://github.com/pmndrs/zustand ) | `5.0.12` | `5.0.13` |
Updates `@scalar/fastify-api-reference` from 1.49.5 to 1.57.2
- [Release notes](https://github.com/scalar/scalar/releases )
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/fastify/CHANGELOG.md )
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/fastify )
Updates `@sentry/node` from 10.49.0 to 10.53.1
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.49.0...10.53.1 )
Updates `fflate` from 0.8.2 to 0.8.3
- [Release notes](https://github.com/101arrowz/fflate/releases )
- [Changelog](https://github.com/101arrowz/fflate/blob/master/CHANGELOG.md )
- [Commits](https://github.com/101arrowz/fflate/compare/v0.8.2...v0.8.3 )
Updates `p-queue` from 9.1.0 to 9.3.0
- [Release notes](https://github.com/sindresorhus/p-queue/releases )
- [Commits](https://github.com/sindresorhus/p-queue/compare/v9.1.0...v9.3.0 )
Updates `posthog-node` from 5.29.5 to 5.34.2
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.34.2/packages/node )
Updates `sharp` from 0.33.5 to 0.34.5
- [Release notes](https://github.com/lovell/sharp/releases )
- [Commits](https://github.com/lovell/sharp/compare/v0.33.5...v0.34.5 )
Updates `tsx` from 4.21.0 to 4.22.1
- [Release notes](https://github.com/privatenumber/tsx/releases )
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs )
- [Commits](https://github.com/privatenumber/tsx/compare/v4.21.0...v4.22.1 )
Updates `zxing-wasm` from 3.0.2 to 3.0.3
- [Release notes](https://github.com/Sec-ant/zxing-wasm/releases )
- [Changelog](https://github.com/Sec-ant/zxing-wasm/blob/main/CHANGELOG.md )
- [Commits](https://github.com/Sec-ant/zxing-wasm/compare/v3.0.2...v3.0.3 )
Updates `react` from 19.2.4 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases )
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react )
Updates `react-dom` from 19.2.4 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases )
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react-dom )
Updates `lucide-react` from 0.469.0 to 0.577.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/0.577.0/packages/lucide-react )
Updates `@sentry/react` from 10.49.0 to 10.53.1
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.49.0...10.53.1 )
Updates `posthog-js` from 1.370.0 to 1.373.5
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.370.0...posthog-js@1.373.5 )
Updates `react-colorful` from 5.6.1 to 5.7.0
- [Release notes](https://github.com/omgovich/react-colorful/releases )
- [Changelog](https://github.com/omgovich/react-colorful/blob/master/CHANGELOG.md )
- [Commits](https://github.com/omgovich/react-colorful/commits/5.7.0 )
Updates `react-konva` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/konvajs/react-konva/releases )
- [Commits](https://github.com/konvajs/react-konva/compare/v19.2.3...v19.2.4 )
Updates `react-router-dom` from 7.13.1 to 7.15.1
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.15.1/packages/react-router-dom )
Updates `zustand` from 5.0.12 to 5.0.13
- [Release notes](https://github.com/pmndrs/zustand/releases )
- [Commits](https://github.com/pmndrs/zustand/compare/v5.0.12...v5.0.13 )
---
updated-dependencies:
- dependency-name: "@scalar/fastify-api-reference"
dependency-version: 1.57.2
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/node"
dependency-version: 10.53.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/react"
dependency-version: 10.53.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: fflate
dependency-version: 0.8.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: lucide-react
dependency-version: 0.577.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: p-queue
dependency-version: 9.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-js
dependency-version: 1.373.5
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-node
dependency-version: 5.34.2
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react
dependency-version: 19.2.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-colorful
dependency-version: 5.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-dom
dependency-version: 19.2.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-konva
dependency-version: 19.2.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-router-dom
dependency-version: 7.15.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: sharp
dependency-version: 0.34.5
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: tsx
dependency-version: 4.22.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: zustand
dependency-version: 5.0.13
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: zxing-wasm
dependency-version: 3.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-18 16:39:47 +08:00
SnapOtter
73842ded92
fix: remove duplicate privacy policy link from main content area
2026-05-18 10:19:51 +08:00
SnapOtter
6a2b19919d
feat: add background preview support to before-after slider
...
Render custom background layers (solid color, image, checkerboard) and
drop shadow in the after panel, constrained to the actual image content
area. Supports remove-bg tool preview effects.
2026-05-18 10:19:47 +08:00
SnapOtter
d978ae211b
fix: hide size comparison percentage on non-compression tools
...
Only show "X% smaller/larger" badges on compress and optimize-for-web
where file size reduction is the goal. All other tools no longer display
irrelevant size percentage data in the results pane.
2026-05-18 10:08:19 +08:00
SnapOtter
8ea4399739
feat: replace editor icon with custom PNG using CSS mask
2026-05-17 11:47:39 +08:00
SnapOtter
228f70d011
feat: add static demo site at demo.snapotter.com
...
- New apps/demo/ that reuses apps/web components with mocked API layer
- Full UI shell: login, change password, analytics consent, dashboard, all tool pages
- Stateful mock tracks session flow (password change, analytics consent)
- Demo banner with link to GitHub repo
- Processing attempts show info message with GitHub link
- Deployed to Cloudflare Pages as static site (no backend)
Also links demo across all surfaces:
- README: "Live Demo" badge
- Landing navbar: "Try Demo" CTA button (replaces "Book a Demo")
- Landing hero: "No sign-ups. No credit card." tagline
- Docs getting-started: "Try before installing" tip box
Other changes:
- Docs: move NVIDIA GPU section above GHCR, demote GHCR to collapsed details
- Fix before-after slider checkerboard background for transparency
- Fix remove-bg preview reset when no effects applied
2026-05-17 09:25:12 +08:00
SnapOtter
148118d969
feat: add generate strong password button to Add Members form
...
Add a "Generate strong password" button with Sparkles icon to the
Add Members form in Settings > People. Generated passwords are shown
in plain text with a copy button and an amber warning to copy before
creating the user. Also upgraded the button style on the change
password page to match. Translated copy/warning strings for all 21
locales.
Closes #139
2026-05-16 23:08:19 +08:00
SnapOtter
2951161414
fix: prevent dropdown clipping in settings People and Teams tables
...
Remove overflow-hidden from table wrappers that was clipping the
actions dropdown menu. Apply rounded corners directly to header and
last-row elements to preserve the visual appearance.
Closes #139
2026-05-16 22:45:51 +08:00
SnapOtter
fd69a60e48
feat: add "Hello from the otter side" easter eggs
...
Custom 404 pages for landing and docs sites, otter greeting on the
first-login sidebar, and a one-time welcome toast after password change.
2026-05-16 22:45:22 +08:00
SnapOtter
9b249a8662
fix: fetch library thumbnails with auth headers to show image previews
...
The <img src> tag cannot send Authorization headers, so thumbnail
requests returned 401 and browsers displayed the alt text (filename)
instead of the image. Replaced with AuthImage component that fetches
via fetch() with proper auth headers and renders blob URLs.
2026-05-16 15:00:32 +08:00
SnapOtter
3e06d68f4f
chore: bump version to 1.17.0 and update docs for release
...
- Bump all workspace package versions to 1.17.0
- Update APP_VERSION constant and OpenAPI spec
- Update AI tool count from 15 to 16 across docs and i18n
- Update tool table with AI Canvas Expand, Meme Generator, Beautify
- Add image editor, OIDC, and 20 languages to README features
- Add release notes for v1.17.0
- Add JSON-LD structured data and SEO improvements to landing/docs
2026-05-16 12:48:02 +08:00
SnapOtter
4906865275
fix: hide auth-dependent settings sections when auth is disabled
...
Security, People, Teams, and Roles sections are meaningless without
auth and could cause problems (e.g., creating orphan users that block
admin bootstrap on re-enable). Hide them via an authRequired flag on
nav items, checked alongside the existing requiredPermission filter.
2026-05-16 12:17:56 +08:00
SnapOtter
f86ef124c2
fix: grant admin role to anonymous user and add DEFAULT_TOOL_VIEW env var
...
When AUTH_ENABLED=false, the anonymous user was assigned the "user" role
which lacks settings:write permission, making all settings saves return
403. Since no admin exists when auth is disabled, settings were
permanently read-only. Promote the anonymous user to "admin" so the
single user has full control of the instance.
Also adds DEFAULT_TOOL_VIEW env var (sidebar|fullscreen) following the
existing DEFAULT_THEME pattern, seeded via ensureDefaultSettings() on
first boot.
Closes #135
2026-05-16 11:37:28 +08:00
SnapOtter
d38621d7b9
feat: add multi-language support for 20 locales
...
Add complete i18n infrastructure with 21 supported languages:
English, Simplified Chinese, Traditional Chinese, Japanese, Korean,
Spanish, French, Italian, Brazilian Portuguese, German, Dutch, Swedish,
Russian, Polish, Ukrainian, Arabic (RTL), Turkish, Hindi, Vietnamese,
Indonesian, and Thai.
- I18nProvider context with three-tier locale detection
(user preference > navigator.languages > instance default > English)
- ~1500 translation keys per locale with TypeScript-enforced completeness
- Dynamic code-splitting: only the active locale is loaded at runtime
- Language selectors in footer, login page, settings, and mobile sidebar
- Arabic RTL support with CSS logical properties across all components
- Tool names, descriptions, and categories translated via i18n helpers
- Public API endpoint GET /api/v1/config/locale for instance default
- Multi-script font stack (CJK, Arabic, Devanagari, Thai, Cyrillic)
- format() and plural() helpers for interpolation and pluralization
- API error translation mapping (translateApiError)
- 36 Playwright e2e tests verifying all 21 locales load correctly
- 25 unit tests for format, plural, locale detection, and completeness
- Updated translations.md docs and CLAUDE.md conventions
2026-05-15 17:02:49 +08:00
SnapOtter
42265af47b
feat(oidc): update settings dialog with OIDC user handling and logout flow
2026-05-13 19:06:22 +08:00
SnapOtter
44f42c6866
feat(oidc): add OIDC login button and auth hook updates
2026-05-13 19:04:06 +08:00
SnapOtter
beb94b698c
fix(web): redesign image editor icon for better clarity
...
Replace abstract curve-and-dots icon with a recognizable photo frame
and pencil design that reads clearly as an image editor at all sizes.
2026-05-13 18:18:20 +08:00
SnapOtter
c6a5d3f33e
refactor: remove content-aware-crop tool
...
Remove the content-aware-crop tool entirely -- API route, frontend
settings component, e2e and integration tests, and all registry
entries.
2026-05-13 17:55:01 +08:00
SnapOtter
443e9a4ffa
fix: replace broken LaMa watermark detection with median filter approach
...
The luminance anomaly detection + LaMa inpainting approach failed because
watermark signal on the matted foreground was too weak (10-15 units vs
threshold of 25). Median filter with kernel=5 effectively removes
semi-transparent watermark text while preserving the stamp structure.
Pipeline is now: median filter (if toggle on) -> BiRefNet matting -> defringe.
No longer requires object-eraser-colorize bundle for watermark removal.
2026-05-13 17:08:15 +08:00
SnapOtter
6f30dbc09e
feat(web): remove mode selector, add colorize strength slider
2026-05-13 17:06:45 +08:00
SnapOtter
54f3867086
feat: add Remove Watermark toggle UI with feature gating and e2e tests
2026-05-13 16:20:40 +08:00
SnapOtter
c3dc98834d
feat: add quality tier selector to AI canvas expand UI
2026-05-13 15:47:58 +08:00
SnapOtter
3760885342
fix: restore-photo colorize hang and AVIF decode failures
...
- Fix dispatcher pipe deadlock: drain stdout pipe in a background thread
to prevent blocking when ONNX runtime output exceeds 64KB pipe buffer
- Add 5-minute SSE stall timeout so the UI shows an error instead of
hanging forever when async AI processing stalls
- Guard CPU colorization: skip for images >2MP on CPU and when DDColor
model is not installed, with clear user-facing messages
- Add AVIF decode fallback via ImageMagick for bitstream variants that
Sharp's bundled libheif cannot decode (affects all tools)
2026-05-13 15:42:24 +08:00