phase 1 & 2 first
This commit is contained in:
126
spec/prd.md
Normal file
126
spec/prd.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# PRD: WatermarkWizard - AI-Powered Intelligent Image Processor
|
||||
|
||||
---
|
||||
|
||||
## 1. Project Vision
|
||||
WatermarkWizard is a high-performance desktop application built with **Tauri + Vue3**. It solves the problem of "watermark collision" by using smart algorithms to place new watermarks in non-obstructed areas. It also leverages local AI Inpainting to remove existing text-based watermarks.
|
||||
|
||||
---
|
||||
|
||||
## 2. Technical Stack & Constraints
|
||||
- **Frontend**: Vue 3 (Composition API), Vite, Pinia, TypeScript, Tailwind CSS.
|
||||
- **Backend**: Rust (Tauri 2.0), `image` crate, `rayon` (Parallelism), `ort` (ONNX Runtime).
|
||||
- **Package Manager**: `pnpm`.
|
||||
- **Target OS**: Windows, macOS (Universal execution, local-first).
|
||||
|
||||
---
|
||||
|
||||
## 3. Key Technical Solutions
|
||||
|
||||
### 3.1 High-Performance Local Image Preview
|
||||
To display local images without the overhead of Base64 encoding, the system utilizes the **Tauri Asset Protocol**.
|
||||
|
||||
**Security Configuration (`tauri.conf.json`):**
|
||||
```json
|
||||
{
|
||||
"tauri": {
|
||||
"security": {
|
||||
"csp": "default-src 'self'; img-src 'self' asset: [https://asset.localhost](https://asset.localhost)",
|
||||
"assetProtocol": {
|
||||
"enable": true,
|
||||
"scope": ["**"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
**Frontend Implementation:**
|
||||
Using `@tauri-apps/api/core`, we convert absolute system paths into browser-safe URLs:
|
||||
|
||||
```typescript
|
||||
import { convertFileSrc } from '@tauri-apps/api/core';
|
||||
const previewUrl = convertFileSrc('/path/to/image.jpg');
|
||||
|
||||
```
|
||||
|
||||
### 3.2 Smart Placement: "Zone Complexity Analysis" (ZCA)
|
||||
|
||||
To avoid overlapping existing logos or AI software watermarks, the system implements a **Standard Deviation of Luma** algorithm.
|
||||
|
||||
**The Algorithm Logic:**
|
||||
|
||||
1. **Segmentation**: Divide the bottom 20% of the image into three zones: **Left**, **Center**, and **Right**.
|
||||
2. **Luma Calculation**: Convert pixels to grayscale () using:
|
||||
|
||||
3. **Variance Assessment**: Calculate the Standard Deviation () for each zone:
|
||||
|
||||
|
||||
4. **Decision**: The zone with the **lowest ** (the most uniform area) is selected as the optimal anchor.
|
||||
|
||||
---
|
||||
|
||||
## 4. User Interface & Interaction Design
|
||||
|
||||
### 4.1 "Hero-Strip" Layout
|
||||
|
||||
Designed for professional workflows, mimicking high-end photo editing software.
|
||||
|
||||
#### A. Hero View (Main Editor)
|
||||
|
||||
* **Large Dynamic Preview**: Displays the currently selected image with a CSS-based watermark overlay.
|
||||
* **Real-time Interaction**: Users can drag the watermark within the Hero View. The position is stored as a **Percentage Coordinate** () to ensure resolution independence during export.
|
||||
* **Quick Switch**: Lateral floating buttons and arrow key support for rapid navigation.
|
||||
|
||||
#### B. Thumbnail Strip (Gallery)
|
||||
|
||||
* **Horizontal Virtual List**: Powered by `vue-virtual-scroller` to handle 5,000+ images at 60fps.
|
||||
* **Lazy Loading**: High-res images are only fetched for the Hero View; the gallery uses lightweight cached thumbnails generated by the Rust backend.
|
||||
|
||||
---
|
||||
|
||||
## 5. Functional Requirements
|
||||
|
||||
### 5.1 Intelligent Batch Watermarking
|
||||
|
||||
* **Requirement**: Apply a consistent watermark across diverse image sets without manual positioning for every file.
|
||||
* **Smart Logic**: Default to the ZCA-calculated position. If the user manually moves a watermark on one image, provide a "Sync to All" option to override the algorithm for the entire batch.
|
||||
|
||||
### 5.2 AI-Powered Watermark Removal
|
||||
|
||||
* **Requirement**: Eliminate existing text watermarks without "blurring" artifacts.
|
||||
* **Logic**:
|
||||
1. **Text Detection**: OCR (via ONNX) generates bounding boxes for characters.
|
||||
2. **Local Inpainting**: The **LaMa (Large Mask Inpainting)** model brain-fills the background textures based on surrounding context.
|
||||
|
||||
|
||||
* **Manual Refinement**: A brush tool in the Hero View allows users to "paint" over stubborn artifacts for re-processing.
|
||||
|
||||
---
|
||||
|
||||
## 6. Performance & Security Optimization
|
||||
|
||||
* **Parallel Processing**: Image compositing is handled by `rayon`, distributing tasks across all available CPU threads.
|
||||
* **Zero-Cloud Policy**: All AI models (OCR and Inpainting) run locally via `ort` (ONNX Runtime), ensuring user privacy and offline capability.
|
||||
* **Thumbnail Pre-gen**: Upon folder selection, Rust triggers a background thread to generate 300px thumbnails in the system's temp directory.
|
||||
|
||||
---
|
||||
|
||||
## 7. API & Command Architecture (Rust)
|
||||
|
||||
| Command | Payload | Description |
|
||||
| --- | --- | --- |
|
||||
| `scan_dir` | `path: String` | Recursively scans folder and generates initial metadata/thumbnails. |
|
||||
| `get_zca_suggestion` | `path: String` | Performs Zone Complexity Analysis on a specific file. |
|
||||
| `run_inpainting` | `img: Path, mask: Mask` | Executes the LaMa ONNX model on a masked region. |
|
||||
| `export_batch` | `tasks: Vec<Task>` | High-speed parallel export using Rust `image` crate. |
|
||||
|
||||
---
|
||||
|
||||
## 8. Development Roadmap
|
||||
|
||||
1. **Phase 1**: Core architecture setup (Tauri + Asset Protocol + Pinia Store).
|
||||
2. **Phase 2**: Implementation of ZCA Algorithm in Rust and the Hero-Strip UI.
|
||||
3. **Phase 3**: Integration of ONNX Runtime for LaMa Inpainting.
|
||||
4. **Phase 4**: Parallel batch export and performance profiling.
|
||||
Reference in New Issue
Block a user