Files
SnapOtter/apps/docs/api/ai.md
T
SnapOtterandGitHub 17726ae59d docs: multi-modality rebrand, 2.0 architecture accuracy, and full OpenAPI coverage (#254)
* docs: rebrand from image-only to multi-modality across docs and metadata

SnapOtter expanded from image-only to 157 tools across 5 modalities
(image, video, audio, document/PDF, data). Update all product-level
copy, metadata, and i18n that still framed it as an image-only tool.

- README, package.json, root llms.txt: multi-modality framing, 157 tools
- OpenAPI info + tags, generated /llms.txt tagline (docs.ts)
- VitePress docs site: hero, getting-started, architecture, security,
  deployment, configuration, developer, supported-formats
- i18n: 10 product keys across all 21 locales (hero, app description,
  privacy notes, AI features, progress messages, getting-started)
- web/demo/landing meta + privacy copy, COMMUNITY_GUIDE, .env.example

Stale tool counts (53/50+/52/70+/35) corrected to 157 throughout.
Database/container deployment claims left unchanged (out of scope).

* docs: fix stale post-rebrand test assertions and README language list

- tests/e2e-docs/homepage.spec.ts: assert the current docs homepage (file toolkit, 157 tools, 5 modalities) instead of the old image-only strings
- tests/unit/api/docs-route.test.ts: sync the reproduced llms.txt tagline with docs.ts
- README.md: 21 languages with the correct list (add Swedish and Chinese Traditional, drop Czech which is not supported)

* docs: correct 2.0 architecture references (Postgres 17 + Redis 8, 3-container stack)

The docs and metadata still described the 1.x stack (SQLite, single container, p-queue). Update them to the current 2.0 reality.

- README: replace the broken single-container `docker run` quick-start with the real Docker Compose stack (app + Postgres 17 + Redis 8); fix the "no Redis, no Postgres" feature bullet
- package.json: description no longer claims a single container
- apps/docs: rewrite database.md for Postgres; configuration.md DB_PATH -> DATABASE_URL + REDIS_URL; architecture.md SQLite/p-queue/better-sqlite3 -> Postgres/BullMQ/pg and add media-engine + doc-engine; developer/security/deployment/docker-tags/getting-started/contributing compose examples now include postgres + redis; index.md + api/ai.md AI count 16 -> 19
- SECURITY.md: Drizzle (SQLite) -> (PostgreSQL)
- landing: enterprise/FeatureHighlights single-container wording; TrustSignals/ToolGrid 150+ -> 157 (dynamic); Pricing/FAQ 15 -> 19 AI tools

* docs(api): document all video, audio, document, and data tool endpoints in OpenAPI

The spec covered only image tools; the Scalar UI and the generated /llms.txt and /llms-full.txt inherited that gap. Add the 104 missing tool endpoints so the API docs match the code.

- Video: 29 endpoints (most long/async; auto-subtitles is AI)
- Audio: 17 (transcribe-audio is AI)
- Document/PDF: 36 (ocr-pdf is AI; conversions are long/async)
- Data: 10
- Image: 12 newer tools (background-replace, blur-background AI; histogram/lqip-placeholder/sprite-sheet custom responses; barcode-generate uses a JSON body)

Each schema is derived from the tool's Zod validator and executionHint (fast -> 200, long -> 202+SSE, AI adds 501 FeatureNotInstalledError, multi-file inputs as arrays), referencing the existing shared schemas. Tool path entries: 64 -> 168. Spec parses as valid YAML with no duplicate paths and only known $refs.
2026-06-16 18:04:52 +08:00

12 KiB
Raw Blame History

description
description
AI engine reference with all local ML tools. Background removal, upscaling, OCR, face detection, photo restoration, and more.

AI Engine Reference

The @snapotter/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.

19 AI tool routes. All models run locally - no internet required after initial model download.

Architecture

Node.js Tool Route
      │
      ▼
 @snapotter/ai bridge.ts
      │ (stdin/stdout JSON + stderr progress events)
      ▼
 Python dispatcher (persistent process)
      │
      ├─ remove_bg.py        (rembg / BiRefNet)
      ├─ upscale.py          (RealESRGAN)
      ├─ inpaint.py          (LaMa ONNX)
      ├─ ocr.py              (PaddleOCR / Tesseract)
      ├─ detect_faces.py     (MediaPipe)
      ├─ face_landmarks.py   (MediaPipe landmarks)
      ├─ enhance_faces.py    (GFPGAN / CodeFormer)
      ├─ colorize.py         (DDColor)
      ├─ noise_removal.py    (tiered denoising)
      ├─ red_eye_removal.py  (landmark + color analysis)
      ├─ restore.py          (scratch repair + enhancement + denoising)
      ├─ transparency_fix.py (BiRefNet HR-matting + defringe)
      └─ seam_carving        (Go caire binary - not Python)

Timeouts: 300 s default; OCR and BiRefNet background removal get 600 s.

Background Removal

Function: removeBackground
Tool route: remove-background
Model: rembg with BiRefNet (default) or U2-Net variants

Parameter Type Default Description
model string birefnet-general Model variant - see table below
alphaMattingForeground number (1255) 240 Foreground threshold for alpha matting
alphaMattingBackground number (1255) 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")

Available models:

Model ID Best for
birefnet-general General purpose (default)
birefnet-portrait People / portraits
birefnet-dis Dichotomous Image Segmentation
birefnet-hrsod High-resolution salient objects
birefnet-cod Camouflaged objects
u2net Fast general purpose
u2net_human_seg Human segmentation
isnet-general-use High quality general

Image Upscaling

Function: upscale
Tool route: upscale
Model: RealESRGAN (with Lanczos fallback on CPU-constrained systems)

Parameter Type Default Description
scale 2 | 4 4 Upscale factor
model string realesrgan-x4plus Model variant
faceEnhance boolean false Apply GFPGAN face enhancement pass
denoise number (01) 0.5 Denoising strength
format string - Output format override
quality number 95 Output quality (for JPEG/WebP)

OCR / Text Extraction

Function: extractText
Tool route: ocr
Models: Tesseract (fast), PaddleOCR PP-OCRv5 (balanced), PaddleOCR-VL 1.5 (best)

Parameter Type Default Description
quality fast | balanced | best balanced Processing tier
language string en Language code (ISO 639-1)
enhance boolean false Pre-process image to improve OCR accuracy

Returns structured results with bounding boxes, confidence scores, and extracted text blocks.

Face / PII Blur

Function: blurFaces
Tool route: blur-faces
Model: MediaPipe face detection

Parameter Type Default Description
blurRadius number 30 Gaussian blur radius
sensitivity number (01) 0.5 Detection confidence threshold

Face Enhancement

Function: enhanceFaces
Tool route: enhance-faces
Models: GFPGAN, CodeFormer

Parameter Type Default Description
model gfpgan | codeformer gfpgan Enhancement model
strength number (01) 0.7 Enhancement strength
sensitivity number (01) 0.5 Face detection threshold
centerFace boolean false Focus enhancement on center face only

AI Colorization

Function: colorize
Tool route: colorize
Model: DDColor (with OpenCV DNN fallback)

Converts black-and-white or grayscale photos to full color.

Parameter Type Default Description
intensity number (01) 0.85 Color saturation strength
model string ddcolor Model variant

Noise Removal

Function: noiseRemoval
Tool route: noise-removal

Three-tier denoising pipeline (fast: OpenCV bilateral filter; balanced: frequency-domain; best: deep learning model).

Parameter Type Default Description
quality fast | balanced | best balanced Processing tier
strength number (01) 0.5 Denoising strength
preserveDetail boolean true Edge-preserving mode
colorNoise boolean false Target color noise specifically

Red Eye Removal

Function: removeRedEye
Tool route: red-eye-removal

Detects face landmarks, locates eye regions, and corrects red-channel oversaturation.

Parameter Type Default Description
sensitivity number (01) 0.5 Red pixel detection threshold
strength number (01) 0.9 Correction strength

Photo Restoration

Function: restorePhoto
Tool route: restore-photo

Multi-step pipeline for old or damaged photos: scratch/tear detection and repair → face enhancement → denoising → optional colorization.

Parameter Type Default Description
mode auto | light | heavy auto Restoration intensity
scratchRemoval boolean true Detect and repair scratches, tears
faceEnhancement boolean true Apply face enhancement pass
fidelity number (01) 0.7 Face enhancement strength
denoise boolean true Apply denoising pass
denoiseStrength number (0100) 40 Denoising strength
colorize boolean false Colorize after restoration

Passport Photo

Function: Uses detectFaceLandmarks + removeBackground
Tool route: passport-photo
Model: MediaPipe face landmarks

Generates government-compliant ID photos. Supports 37 countries across 6 regions (Americas, Europe, Asia, Africa, Oceania, Middle East). Each spec includes physical dimensions, DPI, head-height ratio, eye-line position, and background color requirements.

Parameter Type Default Description
country string us ISO country code (see list in UI)
printLayout 4x6 | A4 | none none Output as print sheet or standalone
backgroundColor string country default Background fill color

Object Erasing (Inpainting)

Function: inpaint
Tool route: erase-object
Model: LaMa via ONNX Runtime

Parameter Type Required Description
maskData string Yes Base64-encoded PNG mask (white = erase)
maskThreshold number (0255) No Threshold for mask binarization

GPU-accelerated when an NVIDIA GPU is available.

Smart Crop

Function: Uses MediaPipe + Sharp attention/entropy
Tool route: smart-crop
Model: MediaPipe face detection

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

Face presets:

Preset Head ratio Best for
close-up 1.8× face Headshots
head-and-shoulders 2.8× face Profile photos
upper-body 4.5× face LinkedIn / formal
half-body 7.0× face Full upper body

Image Enhancement

Function: analyzeImage + applyCorrections
Tool route: image-enhancement
Engine: Analysis-based (Sharp histogram and statistics)

Analyzes the image and applies automatic corrections for exposure, contrast, white balance, saturation, sharpness, and noise. Supports scene-specific modes.

Parameter Type Default Description
mode auto | portrait | landscape | low-light | food | document auto Scene mode for tuning corrections
intensity number (0-100) 50 Overall correction strength
corrections.exposure boolean true Apply exposure correction
corrections.contrast boolean true Apply contrast correction
corrections.whiteBalance boolean true Apply white balance correction
corrections.saturation boolean true Apply saturation correction
corrections.sharpness boolean true Apply sharpness correction
corrections.denoise boolean true Apply denoising

An additional analysis endpoint is available at POST /api/v1/tools/image-enhancement/analyze which returns the detected corrections without applying them.

Content-Aware Resize (Seam Carving)

Function: seamCarve
Tool route: content-aware-resize
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
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
square boolean false Force square output

Max input edge before auto-downscaling: 1200 px.

PNG Transparency Fixer

Function: fixTransparency
Tool route: transparency-fixer
Model: BiRefNet HR-matting (2048x2048 resolution)

Fixes "fake transparent" PNGs where the background was removed but left behind fringing, halos, or semi-transparent artifacts. Uses BiRefNet's high-resolution matting model to produce a clean alpha channel, then applies configurable defringe processing to remove color contamination along edges.

OOM fallback chain: If BiRefNet HR-matting exceeds available memory, the tool automatically falls back to birefnet-general, then to u2net.

Feature bundle: Background Removal (shared with Remove Background and Passport Photo).

Parameter Type Default Description
defringe number (0-100) 30 Edge defringe strength to remove color contamination
outputFormat "png" | "webp" "png" Output image format
curl -X POST http://localhost:1349/api/v1/tools/transparency-fixer \
  -H "Authorization: Bearer <token>" \
  -F "file=@fake-transparent.png" \
  -F 'settings={"defringe":30,"outputFormat":"png"}'