docs: replace em dashes with hyphens throughout

This commit is contained in:
ashim-hq
2026-04-16 16:40:18 +08:00
parent de441df32e
commit c8dd454f74
6 changed files with 37 additions and 37 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ import llmstxt from "vitepress-plugin-llms";
export default defineConfig({ export default defineConfig({
title: "ashim", 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/", base: "/ashim/",
srcDir: ".", srcDir: ".",
outDir: "./.vitepress/dist", outDir: "./.vitepress/dist",
+11 -11
View File
@@ -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. 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 ## Architecture
@@ -26,7 +26,7 @@ Node.js Tool Route
├─ noise_removal.py (tiered denoising) ├─ noise_removal.py (tiered denoising)
├─ red_eye_removal.py (landmark + color analysis) ├─ red_eye_removal.py (landmark + color analysis)
├─ restore.py (scratch repair + enhancement + denoising) ├─ 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. **Timeouts:** 300 s default; OCR and BiRefNet background removal get 600 s.
@@ -39,11 +39,11 @@ Node.js Tool Route
| Parameter | Type | Default | Description | | Parameter | Type | Default | Description |
|-----------|------|---------|-------------| |-----------|------|---------|-------------|
| `model` | string | `birefnet-general` | Model variant see table below | | `model` | string | `birefnet-general` | Model variant - see table below |
| `alphaMattingForeground` | number (1255) | 240 | Foreground threshold for alpha matting | | `alphaMattingForeground` | number (1255) | 240 | Foreground threshold for alpha matting |
| `alphaMattingBackground` | number (1255) | 10 | Background threshold for alpha matting | | `alphaMattingBackground` | number (1255) | 10 | Background threshold for alpha matting |
| `returnMask` | boolean | false | Return the mask instead of the cutout | | `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:** **Available models:**
@@ -70,7 +70,7 @@ Node.js Tool Route
| `model` | string | `realesrgan-x4plus` | Model variant | | `model` | string | `realesrgan-x4plus` | Model variant |
| `faceEnhance` | boolean | false | Apply GFPGAN face enhancement pass | | `faceEnhance` | boolean | false | Apply GFPGAN face enhancement pass |
| `denoise` | number (01) | 0.5 | Denoising strength | | `denoise` | number (01) | 0.5 | Denoising strength |
| `format` | string | | Output format override | | `format` | string | - | Output format override |
| `quality` | number | 95 | Output quality (for JPEG/WebP) | | `quality` | number | 95 | Output quality (for JPEG/WebP) |
## OCR / Text Extraction ## OCR / Text Extraction
@@ -203,9 +203,9 @@ GPU-accelerated when an NVIDIA GPU is available.
| Parameter | Type | Default | Description | | Parameter | Type | Default | Description |
|-----------|------|---------|-------------| |-----------|------|---------|-------------|
| `mode` | `subject` \| `face` \| `trim` | `subject` | Crop strategy | | `mode` | `subject` \| `face` \| `trim` | `subject` | Crop strategy |
| `width` | number | | Output width | | `width` | number | - | Output width |
| `height` | number | | Output height | | `height` | number | - | Output height |
| `facePreset` | string | | Preset framing when `mode=face` | | `facePreset` | string | - | Preset framing when `mode=face` |
**Face presets:** **Face presets:**
@@ -220,14 +220,14 @@ GPU-accelerated when an NVIDIA GPU is available.
**Function:** `seamCarve` **Function:** `seamCarve`
**Tool route:** `content-aware-resize` **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. Intelligently resizes images by removing or adding low-energy seams, preserving important content.
| Parameter | Type | Default | Description | | Parameter | Type | Default | Description |
|-----------|------|---------|-------------| |-----------|------|---------|-------------|
| `width` | number | | Target width | | `width` | number | - | Target width |
| `height` | number | | Target height | | `height` | number | - | Target height |
| `protectFaces` | boolean | true | Protect detected face regions from seam removal | | `protectFaces` | boolean | true | Protect detected face regions from seam removal |
| `blurRadius` | number | 0 | Pre-blur to reduce noise sensitivity | | `blurRadius` | number | 0 | Pre-blur to reduce noise sensitivity |
| `sobelThreshold` | number | 10 | Edge sensitivity threshold | | `sobelThreshold` | number | 10 | Edge sensitivity threshold |
+21 -21
View File
@@ -3,9 +3,9 @@
Interactive API docs with request/response examples are available at [http://localhost:1349/api/docs](http://localhost:1349/api/docs). Interactive API docs with request/response examples are available at [http://localhost:1349/api/docs](http://localhost:1349/api/docs).
Machine-readable specs: Machine-readable specs:
- `/api/v1/openapi.yaml` OpenAPI 3.1 spec - `/api/v1/openapi.yaml` - OpenAPI 3.1 spec
- `/llms.txt` LLM-friendly summary - `/llms.txt` - LLM-friendly summary
- `/llms-full.txt` Complete LLM-friendly docs - `/llms-full.txt` - Complete LLM-friendly docs
## Authentication ## Authentication
@@ -30,7 +30,7 @@ Sessions expire after 24 hours.
### API Keys ### API Keys
```bash ```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 \ curl -X POST http://localhost:1349/api/v1/api-keys \
-H "Authorization: Bearer <session-token>" \ -H "Authorization: Bearer <session-token>" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
@@ -42,7 +42,7 @@ curl http://localhost:1349/api/v1/tools/resize \
-H "Authorization: Bearer si_<your-key>" -H "Authorization: Bearer si_<your-key>"
``` ```
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 ### Auth Endpoints
@@ -64,10 +64,10 @@ Keys are prefixed `si_` and stored as SHA-256 hashes — the raw key is shown on
|-----------|:-----:|:----:| |-----------|:-----:|:----:|
| Use tools | ✓ | ✓ | | Use tools | ✓ | ✓ |
| Own files/pipelines/API keys | ✓ | ✓ | | Own files/pipelines/API keys | ✓ | ✓ |
| See all users' files/pipelines/keys | ✓ | | | See all users' files/pipelines/keys | ✓ | - |
| Write settings | ✓ | | | Write settings | ✓ | - |
| Manage users & teams | ✓ | | | Manage users & teams | ✓ | - |
| Manage branding | ✓ | | | Manage branding | ✓ | - |
## Using Tools ## Using Tools
@@ -110,11 +110,11 @@ curl -X POST http://localhost:1349/api/v1/tools/<toolId>/batch \
| Tool ID | Name | Key settings | | Tool ID | Name | Key settings |
|---------|------|-------------| |---------|------|-------------|
| `optimize-for-web` | Optimize for Web | `format` (auto/jpeg/webp/avif), `quality`, `maxWidthPx`, `stripMetadata` | | `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` | | `edit-metadata` | Edit Metadata | `title`, `description`, `author`, `copyright`, `keywords`, `gps` (lat/lon), `dateTime` |
| `bulk-rename` | Bulk Rename | `pattern` (supports `{n}`, `{date}`, `{original}`), `startIndex`, `padding` | | `bulk-rename` | Bulk Rename | `pattern` (supports `{n}`, `{date}`, `{original}`), `startIndex`, `padding` |
| `image-to-pdf` | Image to PDF | `pageSize` (A4/Letter/…), `orientation`, `margin`, `fitMode` | | `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 ### Adjustments
@@ -150,28 +150,28 @@ All AI tools run on your hardware (CPU or NVIDIA GPU). No internet required.
| Tool ID | Name | Key settings | | Tool ID | Name | Key settings |
|---------|------|-------------| |---------|------|-------------|
| `watermark-text` | Text Watermark | `text`, `font`, `fontSize`, `color`, `opacity`, `position`, `rotation`, `tile` | | `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` | | `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 ### Utilities
| Tool ID | Name | Key settings | | Tool ID | Name | Key settings |
|---------|------|-------------| |---------|------|-------------|
| `info` | Image Info | (returns width, height, format, size, channels, hasAlpha, DPI, EXIF) | | `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 | | `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 | | `find-duplicates` | Find Duplicates | `threshold` (perceptual hash distance, default 8) - multi-file |
| `color-palette` | Color Palette | `count` (dominant color count), `format` (hex/rgb) | | `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) | | `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` | | `image-to-base64` | Image to Base64 | `format` (data-uri/plain), `mimeType` |
### Layout & Composition ### Layout & Composition
| Tool ID | Name | Key settings | | Tool ID | Name | Key settings |
|---------|------|-------------| |---------|------|-------------|
| `collage` | Collage / Grid | `template` (25+ layouts), `gap`, `backgroundColor`, `borderRadius` 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 | | `stitch` | Stitch / Combine | `direction` (horizontal/vertical/grid), `gap`, `backgroundColor`, `alignment` - multi-file |
| `split` | Image Splitting | `mode` (grid/rows/cols), `rows`, `cols`, `tileWidth`, `tileHeight` | | `split` | Image Splitting | `mode` (grid/rows/cols), `rows`, `cols`, `tileWidth`, `tileHeight` |
| `border` | Border & Frame | `width`, `color`, `style` (solid/gradient/pattern), `borderRadius`, `padding`, `shadow` | | `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 | | Method | Path | Access | Description |
|--------|------|--------|-------------| |--------|------|--------|-------------|
| `POST` | `/api/v1/api-keys` | Auth | Generate new key shown once | | `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) | | `GET` | `/api/v1/api-keys` | Auth | List keys (name, id, lastUsedAt - not raw key) |
| `DELETE` | `/api/v1/api-keys/:id` | Auth | Delete key | | `DELETE` | `/api/v1/api-keys/:id` | Auth | Delete key |
## Teams ## Teams
+1 -1
View File
@@ -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_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. | | `DEFAULT_PASSWORD` | `admin` | Password for the initial admin account. Change this after first login. |
| `MAX_USERS` | `5` | Maximum number of registered user accounts | | `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 ### Storage
+2 -2
View File
@@ -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. 1. Open **Pipelines** in the sidebar.
2. Add steps (any tool, any settings). 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. 4. Save the pipeline for later reuse.
Pipelines can have up to 20 steps. 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: 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 - **User**: use tools, manage own files/pipelines/API keys
Create teams under **Settings → Teams** to group users. Create teams under **Settings → Teams** to group users.
+1 -1
View File
@@ -17,7 +17,7 @@ features:
- title: 45+ Image Tools - title: 45+ Image Tools
details: Resize, crop, compress, convert, watermark, color adjust, vectorize, create GIFs, build collages, generate passport photos, find duplicates, and more. details: Resize, crop, compress, convert, watermark, color adjust, vectorize, create GIFs, build collages, generate passport photos, find duplicates, and more.
- title: Local AI - 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 - 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. 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 - title: REST API