diff --git a/apps/docs/.vitepress/config.mts b/apps/docs/.vitepress/config.mts index 06f34d7b..d95c9620 100644 --- a/apps/docs/.vitepress/config.mts +++ b/apps/docs/.vitepress/config.mts @@ -3,7 +3,7 @@ import llmstxt from "vitepress-plugin-llms"; export default defineConfig({ title: "ashim", - description: "Documentation for ashim — A Self Hosted Image Manipulator. 45+ tools, local AI, pipelines, REST API.", + description: "Documentation for ashim - A Self Hosted Image Manipulator. 45+ tools, local AI, pipelines, REST API.", base: "/ashim/", srcDir: ".", outDir: "./.vitepress/dist", diff --git a/apps/docs/api/ai.md b/apps/docs/api/ai.md index bbee8293..50850854 100644 --- a/apps/docs/api/ai.md +++ b/apps/docs/api/ai.md @@ -2,7 +2,7 @@ The `@ashim/ai` package bridges Node.js to a **persistent Python sidecar** for all ML operations. The dispatcher process stays alive between requests for fast warm-start performance. GPU is auto-detected at startup and used when available. -13 AI tool routes. All models run locally — no internet required after initial model download. +13 AI tool routes. All models run locally - no internet required after initial model download. ## Architecture @@ -26,7 +26,7 @@ Node.js Tool Route ├─ noise_removal.py (tiered denoising) ├─ red_eye_removal.py (landmark + color analysis) ├─ restore.py (scratch repair + enhancement + denoising) - └─ seam_carving (Go caire binary — not Python) + └─ seam_carving (Go caire binary - not Python) ``` **Timeouts:** 300 s default; OCR and BiRefNet background removal get 600 s. @@ -39,11 +39,11 @@ Node.js Tool Route | Parameter | Type | Default | Description | |-----------|------|---------|-------------| -| `model` | string | `birefnet-general` | Model variant — see table below | +| `model` | string | `birefnet-general` | Model variant - see table below | | `alphaMattingForeground` | number (1–255) | 240 | Foreground threshold for alpha matting | | `alphaMattingBackground` | number (1–255) | 10 | Background threshold for alpha matting | | `returnMask` | boolean | false | Return the mask instead of the cutout | -| `backgroundColor` | string | — | Fill removed area (hex color or "transparent") | +| `backgroundColor` | string | - | Fill removed area (hex color or "transparent") | **Available models:** @@ -70,7 +70,7 @@ Node.js Tool Route | `model` | string | `realesrgan-x4plus` | Model variant | | `faceEnhance` | boolean | false | Apply GFPGAN face enhancement pass | | `denoise` | number (0–1) | 0.5 | Denoising strength | -| `format` | string | — | Output format override | +| `format` | string | - | Output format override | | `quality` | number | 95 | Output quality (for JPEG/WebP) | ## OCR / Text Extraction @@ -203,9 +203,9 @@ GPU-accelerated when an NVIDIA GPU is available. | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `mode` | `subject` \| `face` \| `trim` | `subject` | Crop strategy | -| `width` | number | — | Output width | -| `height` | number | — | Output height | -| `facePreset` | string | — | Preset framing when `mode=face` | +| `width` | number | - | Output width | +| `height` | number | - | Output height | +| `facePreset` | string | - | Preset framing when `mode=face` | **Face presets:** @@ -220,14 +220,14 @@ GPU-accelerated when an NVIDIA GPU is available. **Function:** `seamCarve` **Tool route:** `content-aware-resize` -**Engine:** Go `caire` binary (not Python — no GPU benefit) +**Engine:** Go `caire` binary (not Python - no GPU benefit) Intelligently resizes images by removing or adding low-energy seams, preserving important content. | Parameter | Type | Default | Description | |-----------|------|---------|-------------| -| `width` | number | — | Target width | -| `height` | number | — | Target height | +| `width` | number | - | Target width | +| `height` | number | - | Target height | | `protectFaces` | boolean | true | Protect detected face regions from seam removal | | `blurRadius` | number | 0 | Pre-blur to reduce noise sensitivity | | `sobelThreshold` | number | 10 | Edge sensitivity threshold | diff --git a/apps/docs/api/rest.md b/apps/docs/api/rest.md index 87884dc6..722a72fb 100644 --- a/apps/docs/api/rest.md +++ b/apps/docs/api/rest.md @@ -3,9 +3,9 @@ Interactive API docs with request/response examples are available at [http://localhost:1349/api/docs](http://localhost:1349/api/docs). Machine-readable specs: -- `/api/v1/openapi.yaml` — OpenAPI 3.1 spec -- `/llms.txt` — LLM-friendly summary -- `/llms-full.txt` — Complete LLM-friendly docs +- `/api/v1/openapi.yaml` - OpenAPI 3.1 spec +- `/llms.txt` - LLM-friendly summary +- `/llms-full.txt` - Complete LLM-friendly docs ## Authentication @@ -30,7 +30,7 @@ Sessions expire after 24 hours. ### API Keys ```bash -# Create a key (returns key once — store it) +# Create a key (returns key once - store it) curl -X POST http://localhost:1349/api/v1/api-keys \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ @@ -42,7 +42,7 @@ curl http://localhost:1349/api/v1/tools/resize \ -H "Authorization: Bearer si_" ``` -Keys are prefixed `si_` and stored as SHA-256 hashes — the raw key is shown once and never retrievable again. +Keys are prefixed `si_` and stored as SHA-256 hashes - the raw key is shown once and never retrievable again. ### Auth Endpoints @@ -64,10 +64,10 @@ Keys are prefixed `si_` and stored as SHA-256 hashes — the raw key is shown on |-----------|:-----:|:----:| | Use tools | ✓ | ✓ | | Own files/pipelines/API keys | ✓ | ✓ | -| See all users' files/pipelines/keys | ✓ | — | -| Write settings | ✓ | — | -| Manage users & teams | ✓ | — | -| Manage branding | ✓ | — | +| See all users' files/pipelines/keys | ✓ | - | +| Write settings | ✓ | - | +| Manage users & teams | ✓ | - | +| Manage branding | ✓ | - | ## Using Tools @@ -110,11 +110,11 @@ curl -X POST http://localhost:1349/api/v1/tools//batch \ | Tool ID | Name | Key settings | |---------|------|-------------| | `optimize-for-web` | Optimize for Web | `format` (auto/jpeg/webp/avif), `quality`, `maxWidthPx`, `stripMetadata` | -| `strip-metadata` | Strip Metadata | — | +| `strip-metadata` | Strip Metadata | - | | `edit-metadata` | Edit Metadata | `title`, `description`, `author`, `copyright`, `keywords`, `gps` (lat/lon), `dateTime` | | `bulk-rename` | Bulk Rename | `pattern` (supports `{n}`, `{date}`, `{original}`), `startIndex`, `padding` | | `image-to-pdf` | Image to PDF | `pageSize` (A4/Letter/…), `orientation`, `margin`, `fitMode` | -| `favicon` | Favicon Generator | `padding`, `backgroundColor`, `borderRadius` — generates all standard sizes | +| `favicon` | Favicon Generator | `padding`, `backgroundColor`, `borderRadius` - generates all standard sizes | ### Adjustments @@ -150,28 +150,28 @@ All AI tools run on your hardware (CPU or NVIDIA GPU). No internet required. | Tool ID | Name | Key settings | |---------|------|-------------| | `watermark-text` | Text Watermark | `text`, `font`, `fontSize`, `color`, `opacity`, `position`, `rotation`, `tile` | -| `watermark-image` | Image Watermark | `opacity`, `position`, `scale` — second file is the watermark | +| `watermark-image` | Image Watermark | `opacity`, `position`, `scale` - second file is the watermark | | `text-overlay` | Text Overlay | `text`, `font`, `fontSize`, `color`, `x`, `y`, `background`, `padding`, `borderRadius` | -| `compose` | Image Composition | `x`, `y`, `opacity`, `blend` — second file is layered on top | +| `compose` | Image Composition | `x`, `y`, `opacity`, `blend` - second file is layered on top | ### Utilities | Tool ID | Name | Key settings | |---------|------|-------------| -| `info` | Image Info | — (returns width, height, format, size, channels, hasAlpha, DPI, EXIF) | -| `compare` | Image Compare | `mode` (side-by-side/overlay/diff), `diffThreshold` — second file is the comparison target | -| `find-duplicates` | Find Duplicates | `threshold` (perceptual hash distance, default 8) — multi-file | +| `info` | Image Info | - (returns width, height, format, size, channels, hasAlpha, DPI, EXIF) | +| `compare` | Image Compare | `mode` (side-by-side/overlay/diff), `diffThreshold` - second file is the comparison target | +| `find-duplicates` | Find Duplicates | `threshold` (perceptual hash distance, default 8) - multi-file | | `color-palette` | Color Palette | `count` (dominant color count), `format` (hex/rgb) | | `qr-generate` | QR Code Generator | `data`, `size`, `margin`, `colorDark`, `colorLight`, `errorCorrectionLevel`, `dotStyle`, `cornerStyle`, `logo` (optional file) | -| `barcode-read` | Barcode Reader | — (auto-detects QR, EAN, Code128, DataMatrix, etc.) | +| `barcode-read` | Barcode Reader | - (auto-detects QR, EAN, Code128, DataMatrix, etc.) | | `image-to-base64` | Image to Base64 | `format` (data-uri/plain), `mimeType` | ### Layout & Composition | Tool ID | Name | Key settings | |---------|------|-------------| -| `collage` | Collage / Grid | `template` (25+ layouts), `gap`, `backgroundColor`, `borderRadius` — multi-file | -| `stitch` | Stitch / Combine | `direction` (horizontal/vertical/grid), `gap`, `backgroundColor`, `alignment` — multi-file | +| `collage` | Collage / Grid | `template` (25+ layouts), `gap`, `backgroundColor`, `borderRadius` - multi-file | +| `stitch` | Stitch / Combine | `direction` (horizontal/vertical/grid), `gap`, `backgroundColor`, `alignment` - multi-file | | `split` | Image Splitting | `mode` (grid/rows/cols), `rows`, `cols`, `tileWidth`, `tileHeight` | | `border` | Border & Frame | `width`, `color`, `style` (solid/gradient/pattern), `borderRadius`, `padding`, `shadow` | @@ -268,8 +268,8 @@ To auto-save a tool result to the library, include `fileId` in the settings payl | Method | Path | Access | Description | |--------|------|--------|-------------| -| `POST` | `/api/v1/api-keys` | Auth | Generate new key — shown once | -| `GET` | `/api/v1/api-keys` | Auth | List keys (name, id, lastUsedAt — not raw key) | +| `POST` | `/api/v1/api-keys` | Auth | Generate new key - shown once | +| `GET` | `/api/v1/api-keys` | Auth | List keys (name, id, lastUsedAt - not raw key) | | `DELETE` | `/api/v1/api-keys/:id` | Auth | Delete key | ## Teams diff --git a/apps/docs/guide/configuration.md b/apps/docs/guide/configuration.md index bc88869c..e8711ea3 100644 --- a/apps/docs/guide/configuration.md +++ b/apps/docs/guide/configuration.md @@ -19,7 +19,7 @@ All configuration is done through environment variables. Every variable has a se | `DEFAULT_USERNAME` | `admin` | Username for the initial admin account. Only used on first run. | | `DEFAULT_PASSWORD` | `admin` | Password for the initial admin account. Change this after first login. | | `MAX_USERS` | `5` | Maximum number of registered user accounts | -| `SKIP_MUST_CHANGE_PASSWORD` | — | Set to any non-empty value to bypass the forced password-change prompt on first login | +| `SKIP_MUST_CHANGE_PASSWORD` | - | Set to any non-empty value to bypass the forced password-change prompt on first login | ### Storage diff --git a/apps/docs/guide/getting-started.md b/apps/docs/guide/getting-started.md index c80be85b..cfef94ea 100644 --- a/apps/docs/guide/getting-started.md +++ b/apps/docs/guide/getting-started.md @@ -84,7 +84,7 @@ Chain tools into multi-step workflows and apply them to one image or a whole bat 1. Open **Pipelines** in the sidebar. 2. Add steps (any tool, any settings). -3. Run on a single file — or up to 200 files at once. +3. Run on a single file - or up to 200 files at once. 4. Save the pipeline for later reuse. Pipelines can have up to 20 steps. @@ -110,7 +110,7 @@ Generate API keys under **Settings → API Keys**. See the [REST API reference]( Enable multiple users with role-based access control: -- **Admin**: full access — manage users, teams, settings, all files/pipelines/API keys +- **Admin**: full access - manage users, teams, settings, all files/pipelines/API keys - **User**: use tools, manage own files/pipelines/API keys Create teams under **Settings → Teams** to group users. diff --git a/apps/docs/index.md b/apps/docs/index.md index 7164250b..137b7dc4 100644 --- a/apps/docs/index.md +++ b/apps/docs/index.md @@ -17,7 +17,7 @@ features: - title: 45+ Image Tools details: Resize, crop, compress, convert, watermark, color adjust, vectorize, create GIFs, build collages, generate passport photos, find duplicates, and more. - title: Local AI - details: 13 AI-powered tools — remove backgrounds, upscale, restore and colorize old photos, erase objects, blur faces, enhance faces, extract text (OCR). All on your hardware, no internet required. + details: 13 AI-powered tools - remove backgrounds, upscale, restore and colorize old photos, erase objects, blur faces, enhance faces, extract text (OCR). All on your hardware, no internet required. - title: Pipelines details: Chain tools into reusable workflows with up to 20 steps. Batch process up to 200 images at once with a single request. - title: REST API