SnapOtter
a01a65e9ac
docs: complete API sync and documentation audit
...
Audit all 52 tools and 119 API operations against the OpenAPI spec.
Fix schema mismatches, add missing endpoints, and update all doc surfaces.
OpenAPI spec (apps/api/src/openapi.yaml):
- Add operationId to all 119 operations for SDK code generation
- Add descriptions to 17 operations that only had summaries
- Fix 9 bare error responses with proper content/schema blocks
- Fix wrong $ref on GET /api/v1/settings/{key} 404 (was UnauthorizedError)
- Fix 10 async AI tools using 200 instead of 202 Accepted
- Add missing JXL format to 9 tool enums (convert, collage, stitch, split,
svg-to-raster, pdf-to-image, optimize-for-web, erase-object, noise-removal)
- Add 3 missing endpoints: POST /api/v1/fetch-urls, GET /api/v1/config/locale,
POST /api/v1/tools/ai-canvas-expand
- Add missing meme-templates/fonts/{filename} endpoint
- Fix watermark-image and compose: settings not required (all have defaults)
- Fix compare similarity description (0-100 percentage, not 0-1)
- Fix find-duplicates: add nullable thumbnail, add skippedFiles response field
- Fix upscale format default ("auto" not "png"), add clientJobId fields
- Fix restore-photo: remove phantom mode param, fix denoiseStrength default,
add missing colorizeStrength
- Fix smart-crop: add 5 missing parameter defaults
- Add missing params: image-enhancement deepEnhance, transparency-fixer
removeWatermark, image-to-pdf collate, image-to-base64 jxl enum
- Fix files/{id}/thumbnail security (requires auth, was marked public)
- Annotate 7 empty description strings in pipeline/role schemas
Documentation surfaces:
- VitePress config: "50 tools" to "51 tools" (2 locations)
- README: add OIDC/SSO docs link
- getting-started.md: add Color Blindness Simulation to tool table
- database.md: fix hash descriptions (bcrypt/SHA-256 to scrypt)
2026-05-15 23:13:42 +08:00
SnapOtter
eacdb867ac
docs: add OIDC setup guide with provider examples
2026-05-13 19:17:14 +08:00
SnapOtter
caf351209b
fix: upgrade favicons to 48x48 for Google Search visibility
...
Google requires favicons to be a multiple of 48px. The previous 32x32
favicon.png was being ignored, causing the generic globe icon in search
results. Adds favicon.ico (multi-size), apple-touch-icon, and fixes
og:image to use absolute URLs.
2026-05-10 21:49:56 +08:00
SnapOtter
6f1c00711b
feat: add version badge to docs navigation bar
2026-05-10 20:15:44 +08:00
SnapOtter
e118717337
merge: resolve conflict with main branch in README.md
2026-05-08 17:32:16 +08:00
SnapOtter
466ef1efb1
docs(beautify): add API docs, OpenAPI spec, LLM docs, update README
...
Add beautify tool endpoint to OpenAPI spec with full parameter
documentation. Add tool to REST API docs Layout & Composition table.
Update tool count from 49 to 50 across README, docs homepage,
architecture docs, VitePress config, OpenAPI spec, and LLM docs
generator.
2026-05-08 16:31:43 +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
bcdc4bdf82
docs: add color-blindness tool to API docs and update tool counts
2026-05-08 15:23:22 +08:00
SnapOtter
bb6d26ffc6
docs: add comprehensive format support documentation
2026-05-08 00:26:56 +08:00
SnapOtter
eb3d0828cb
docs: add transparency-fixer endpoint documentation
2026-05-05 23:24:22 +08:00
SnapOtter
84f24b8736
chore: add Discord community links across README, docs, and landing page
...
- README: Discord badge in header + community section link
- Docs: GitHub and Discord social links in VitePress config
- Landing: Discord in navbar, footer, open-source section, pricing copy
2026-05-01 16:13:38 +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
d80b504f41
chore: update social preview and docs homepage layout
...
- Redesign social-preview.png with polished amber brand theme
- Fix docs homepage layout ordering (hero → docker command → features)
2026-04-24 18:49:23 +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
a57e84ab28
feat: rebrand docs site from ashim to SnapOtter
2026-04-24 14:46:23 +08:00
ashim-hq
2f09618897
fix: configure docs for custom domain docs.snapotter.com
...
Set base path to / and add CNAME for GitHub Pages custom domain.
2026-04-24 14:23:05 +08:00
ashim-hq
8aea77b4be
docs: remove hardcoded pipeline/batch limits, default to unlimited
...
Pipeline steps and batch size are now unlimited by default. The old
"20 steps" and "200 images" figures had no basis in the actual code
(MAX_BATCH_SIZE already defaulted to 0/unlimited). Both remain
configurable via MAX_PIPELINE_STEPS and MAX_BATCH_SIZE env vars.
Also includes updated hardware requirements and sidebar nav from
prior documentation audit.
2026-04-23 20:50:38 +08:00
ashim-hq
e7eea34080
fix: resolve basicsr/torchvision shim bug, lint warnings, and code formatting
...
The torchvision compatibility shim for basicsr 1.4.2 was missing the
parent-package binding and only proxied a single attribute, causing
upscale and enhance-faces to fail at import time. The fix adds a
__getattr__ proxy for all attributes, binds the shim to the parent
package, and installs it in the dispatcher at startup for defense-in-depth.
Also removes unused anyInstalling variable, redundant `as any` cast,
and applies Biome formatting fixes across the codebase.
2026-04-20 17:03:17 +08:00
ashim-hq
1de0dd12bf
docs: add --name ashim to all docker run commands
...
Ensures the container is named ashim in Docker Desktop on all
platforms instead of getting a random name.
2026-04-16 23:45:11 +08:00
ashim-hq
9d84dc262f
docs: add Contributing page, no-PR policy, link from sidebar
2026-04-16 16:40:53 +08:00
ashim-hq
c8dd454f74
docs: replace em dashes with hyphens throughout
2026-04-16 16:40:18 +08:00
ashim-hq
26068ad239
docs: fix AI tool count (13 not 14), update llms template to 45+ tools
2026-04-16 16:16:13 +08:00
ashim-hq
f4b4890070
docs: update homepage — A Self Hosted Image Manipulator, 45+ tools, 6 feature cards
2026-04-16 16:13:33 +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
a1e11dff74
feat(gif-tools): SOTA upgrade with 6 processing modes ( #52 )
...
* feat(find-duplicates): upgrade to 128-bit dHash with metadata and thumbnails
* feat(find-duplicates): add custom-results display mode and duplicate store
* feat(find-duplicates): add results overview grid and detail comparison view
* feat(find-duplicates): overhaul settings with sensitivity presets and download actions
* feat(find-duplicates): update i18n description
* chore: replace jsqr with zxing-wasm for barcode reading
* feat(barcode-read): rewrite backend with zxing-wasm for all barcode types
* feat(barcode-read): rewrite frontend with multi-file, results table, progress, export
- Multi-file sequential processing with per-file progress
- Structured results table with type badges and copy per-result
- Copy All and Export CSV functionality
- Thorough scan toggle (maps to tryHarder in zxing-wasm)
- Before/after view shows annotated image with bounding boxes
- Updated tool description in constants and i18n
* feat(stitch): update tool name and description for redesign
* feat(stitch): add grid layout, alignment, border, radius, quality, and new resize modes
* feat(stitch): redesign settings UI with grid, alignment, border, radius, quality
* test(stitch): add stitch to e2e tool navigation suite
* feat(vectorize): redesign with dual-engine backend and preset-driven UI
- Backend: potrace for B&W, VTracer (@neplex/vectorizer) for full-color vectorization
- Frontend: 5 presets (logo, illustration, photo, sketch, custom)
- Settings: color precision, gradient step, detail, smoothing, corner threshold, invert
- Updated OpenAPI spec and i18n description
* feat(border): redesign with presets, shadow, padding color, swatches
- Add 8 one-click presets (Clean White, Gallery Black, Shadow, Rounded, Polaroid, Vintage, Minimal, Cinematic)
- Implement proper shadow rendering with blur, offset X/Y, color, opacity
- Add padding color control (was hardcoded white)
- Add color swatches for quick color selection
- Wrap in form for Enter key submission
- Add smart validation (requires at least one effect active)
- Align frontend/backend slider ranges
- Organize UI with sections and collapsible shadow toggle
* feat(split): overhaul image splitting with live grid overlay and tile preview
- Add interactive-split display mode with SplitCanvas component
- Live SVG grid overlay on uploaded image showing split boundaries
- Two split modes: Grid (NxM) and Tile Size (px dimensions)
- 9 grid presets (2x1, 1x2, 2x2, 3x1, 1x3, 3x3, 2x3, 3x2, 4x4)
- Output format selection (original/PNG/JPG/WebP) with quality slider
- Post-split tile preview thumbnails with individual download
- Download All as ZIP button
- HEIC/HEIF preview with loading spinner
- Backend: tile-size mode, output format conversion, quality control
- Zustand store for split state management
* feat(split): rewrite backend and frontend settings
Backend: tile-size mode, output format conversion, quality control.
Frontend: split modes, presets, format selector, tile preview grid.
* feat(border): add live CSS preview and remove before/after slider
- Add imageWrapperStyle prop to ImageViewer for live border preview
- Add onImageStyle callback through tool-page to settings components
- Change border displayMode to no-comparison (no slider)
- BorderControls sends live CSS styles (border, padding, radius, shadow)
- Preview updates instantly as user adjusts sliders or clicks presets
* fix: repair i18n file corrupted by formatter during merge conflict resolution
* feat(border): enable live CSS preview in right pane as settings change
* fix(border): keep CSS preview visible after processing for WYSIWYG consistency
* chore(gif-tools): scaffold for SOTA upgrade
- Add animated GIF test fixture (3 frames, 100x100)
- Update tool description to reflect new capabilities
- Add fflate dependency to API for ZIP creation
* feat(gif-tools): rewrite backend with 6 processing modes
Modes: resize (with percentage), optimize (colors/dither/effort),
speed (delay manipulation), reverse (frame reorder), extract
(single/range/all with ZIP), rotate (90/180/270 + flip).
Adds /api/v1/tools/gif-tools/info metadata endpoint.
* test(gif-tools): add integration tests for all 6 modes
Tests metadata endpoint, resize (pixel + percentage), optimize,
speed, reverse, extract (single/range/all), and rotate (angle + flip).
Fix animated.gif fixture to be a real 3-frame animation (was a single
100x300 frame). Fix reverse and rotate modes to process frames
individually and reassemble via GIF binary concatenation, since
Sharp 0.33.x loses page-height metadata when reconstructing from raw
pixel data.
* feat(gif-tools): rewrite frontend with tabbed 6-mode UI
- useGifInfo hook for metadata (frame count, dimensions, duration)
- Info bar showing GIF properties
- 3x2 mode grid: Resize, Optimize, Speed, Reverse, Extract, Rotate
- Animation modes disabled for static images
- Loop control (infinite/once/custom)
- Batch processing support
* test(gif-tools): add to representative tools in e2e suite
---------
Co-authored-by: Siddharth Kumar Sah <siddharth123sk@gmail.com >
2026-04-13 16:23:07 +08:00
Siddharth Kumar Sah
958b10cb45
refactor: remove lite variant, fix release workflow
...
- Remove all lite/full variant logic from frontend, API, shared constants,
docs, and tests (single unified Docker image only)
- Replace single QEMU multi-arch Docker build with per-architecture native
builds (amd64 + arm64) and manifest merge to fix disk space exhaustion
- Add disk cleanup step and per-platform build cache scopes
- Switch release trigger from push to workflow_dispatch
- Add GitHub issue templates and PR template
2026-04-10 17:38:54 +08:00
Siddharth Kumar Sah
6a362d6443
feat(docs): auto-generate llms.txt via vitepress-plugin-llms
...
Replace static llms.txt and llms-full.txt with auto-generated versions
that stay in sync with docs on every build. The plugin also generates
per-page .md files for individual page fetching by LLMs.
2026-04-08 00:53:26 +08:00
stirling-image and GitHub
449a2fc319
feat: lightweight Docker image without AI/ML tools (:lite tag)
...
Closes #1
2026-04-05 00:23:21 +08:00
Siddharth Kumar Sah
47e53dc6cd
feat: move theme toggle and GitHub button to top-right navbar
...
Remove socialLinks config and three-dots menu. Add appearance toggle
and combined GitHub + Star button directly in the navbar via layout
slot. The button shows the Octocat icon, "Star" label, and live
stargazer count.
2026-04-03 23:20:23 +08:00
Siddharth Kumar Sah
47adfde5cb
feat: add GitHub stars button to docs navbar and fix footer license
...
Add a star button with live count from the GitHub API in the top-right
of the docs site. Fix footer from "MIT License" to "AGPLv3 License".
2026-04-03 23:14:37 +08:00
Siddharth Kumar Sah
50a52b43c1
chore: rebrand repo from siddharthksah to stirling-image org
...
Update all references across docs, workflows, UI components, and config
to point to the new GitHub org (stirling-image/stirling-image) and Docker
Hub account (stirlingimage/stirling-image) ahead of repo transfer.
2026-03-30 08:17:54 +08:00
Siddharth Kumar Sah
9f68960eda
docs: rewrite README, add CONTRIBUTING.md, developer and translation guides
...
Rewrite README to remove AI writing patterns (em dashes, promotional
language, vague claims). Make Quick Start section explicit about default
credentials and forced password change. Add Contributing section linking
to CONTRIBUTING.md, developer guide, and translation guide.
Create CONTRIBUTING.md with issue guidelines, PR workflow, commit
conventions, and development setup. Add developer guide (dev setup,
project structure, how to add a tool) and translation guide (how the
i18n system works, step-by-step for adding a language) to VitePress
docs. Register both new pages in the docs sidebar.
2026-03-28 12:14:24 +08:00
Siddharth Kumar Sah
98478e2719
feat(docs): add gem logo to GitHub Pages nav bar and home hero
2026-03-27 20:52:06 +08:00
Siddharth Kumar Sah
a4d4d36828
fix(docs): clean up footer llms.txt links
2026-03-27 17:10:58 +08:00
Siddharth Kumar Sah
c59e4a0668
feat(docs): add llms.txt links to GitHub Pages footer
...
Add llms.txt and llms-full.txt links in the footer with
"AI-friendly docs" label. Also add link rel="llms-txt" head tag
for automatic discovery by AI tools.
2026-03-27 16:41:44 +08:00
Siddharth Kumar Sah
5c4b2a59d3
fix(docs): ignore localhost dead links in VitePress build
...
The /api/docs tip box links to localhost which fails the dead link
check in CI.
2026-03-27 13:53:34 +08:00
Siddharth Kumar Sah
42ec0f2490
feat(docs): add gem favicon to VitePress site
2026-03-27 13:50:02 +08:00
Siddharth Kumar Sah
585d66f0c9
refactor: rename Tool.alpha to Tool.experimental
2026-03-26 01:10:51 +08:00
Siddharth Kumar Sah
6668615750
docs: add VitePress documentation site with GitHub Pages deployment
...
Rewrites all documentation with accurate project details (Fastify, port
1349, single-container Docker, all 33+ tools, full database schema).
Adds getting started guide and configuration reference. Updates help and
settings dialogs to link to the docs site.
2026-03-22 21:00:37 +08:00