mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
chore: remove dead code, add test infrastructure, update docs
- Delete 3 dead files: use-batch-processor.ts, use-i18n.ts, smart-crop.ts (AI package) - Remove dead getJobProgress function and unused runPythonScript wrapper - Remove 6 unused imports across API and web apps - Remove unused shared types (ImageFormat, AppConfig, ApiError, HealthResponse, JobProgress) and constants (SUPPORTED_INPUT_FORMATS/OUTPUT_FORMATS, DEFAULT_OUTPUT_FORMAT) - Remove unused store method (setOriginalBlobUrl) and clean AI package re-exports - Add test infrastructure: vitest config, unit/integration/e2e tests, fixtures, screenshots - Add Docker test infrastructure: Dockerfile.test, docker-compose.test.yml - Add download_models.py for pre-baking AI model weights in Docker - Add filename sanitization utility (apps/api/src/lib/filename.ts) - Update .gitignore to exclude coverage/, *.tsbuildinfo, .superpowers/, test artifacts - Update .dockerignore to exclude test/coverage/IDE artifacts from builds - Update docs: remove smart crop from AI docs (uses Sharp directly), update bridge docs
This commit is contained in:
+6
-16
@@ -71,25 +71,15 @@ Takes an image and a mask (white = area to erase, black = keep). Returns the inp
|
||||
|
||||
**Python script:** `packages/ai/python/inpaint.py`
|
||||
|
||||
## Smart crop
|
||||
|
||||
Content-aware cropping that identifies the most relevant region of an image.
|
||||
|
||||
| Parameter | Type | Description |
|
||||
|---|---|---|
|
||||
| `width` | number | Target crop width |
|
||||
| `height` | number | Target crop height |
|
||||
|
||||
Unlike regular cropping, smart crop analyzes the image content to decide where to place the crop window.
|
||||
|
||||
## How the bridge works
|
||||
|
||||
The TypeScript bridge (`packages/ai/src/bridge.ts`) does the following for each AI call:
|
||||
The TypeScript bridge (`packages/ai/src/bridge.ts`) exposes a single function, `runPythonWithProgress`, that does the following for each AI call:
|
||||
|
||||
1. Writes the input image to a temp file in the workspace directory.
|
||||
2. Spawns a Python subprocess with the appropriate script and arguments.
|
||||
3. Reads stdout for JSON output and stderr for error messages.
|
||||
4. Reads the output image from the filesystem.
|
||||
5. Cleans up temp files.
|
||||
3. Parses JSON progress lines from stderr (e.g. `{"progress": 50, "stage": "Processing..."}`) and forwards them via an `onProgress` callback for real-time SSE streaming.
|
||||
4. Reads stdout for JSON output.
|
||||
5. Reads the output image from the filesystem.
|
||||
6. Cleans up temp files.
|
||||
|
||||
If the Python process exits with a non-zero code or writes to stderr, the bridge throws an error with the stderr content. Timeouts are handled at the API route level.
|
||||
If the Python process exits with a non-zero code, the bridge extracts a user-friendly error from stderr/stdout and throws. Timeouts default to 5 minutes.
|
||||
|
||||
Reference in New Issue
Block a user