Bring the full EditmaskwithAI application into the repo under paintplus/ (429 files) so the service is self-contained — the installer copies the vendored source to ~/docker/paintplus/src instead of cloning at runtime. Rename to PaintPlus (service + branding; app logic untouched): - services/editmaskwithai.sh -> services/paintplus.sh (register_service paintplus, install_paintplus, ~/docker/paintplus, Caddy paintplus:8000, Authelia option preserved) - container names -> paintplus across docker-compose*.yml; dev network -> paintplus-network - browser <title> -> "PaintPlus - AI Image Editor"; README heading -> PaintPlus with upstream provenance note - README utilities table: editmaskwithai -> paintplus Backend/frontend code (help strings referencing the old container name, the ai_photo_edit.db filename) is intentionally left as-is to avoid touching application logic. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Nb2vJ8W7bHKx1JXVvpCraH
351 lines
7.8 KiB
Markdown
351 lines
7.8 KiB
Markdown
# Quick Start Guide
|
||
|
||
## How to Choose the Right AI Model
|
||
|
||
### For Body Parts (Hands, Faces, Bodies)
|
||
|
||
Use **Replicate with `realistic-vision`** model:
|
||
|
||
```env
|
||
AI_PROVIDER=replicate
|
||
REPLICATE_API_KEY=your-key-here
|
||
REPLICATE_MODEL=realistic-vision
|
||
```
|
||
|
||
**Why:** This model is specifically trained on human anatomy and handles difficult features like:
|
||
- ✅ Hands (even complex finger positions)
|
||
- ✅ Faces and expressions
|
||
- ✅ Skin textures
|
||
- ✅ Body proportions
|
||
|
||
**Cost:** ~$0.020/image
|
||
|
||
### For Removing Objects
|
||
|
||
Use **Replicate with `lama`** model:
|
||
|
||
```env
|
||
AI_PROVIDER=replicate
|
||
REPLICATE_MODEL=lama
|
||
```
|
||
|
||
**Why:** Designed specifically for inpainting and removal
|
||
**Cost:** ~$0.002/image (cheapest!)
|
||
|
||
### For General Edits (Landscapes, Objects, Creative)
|
||
|
||
Use **Replicate with `sdxl-inpaint`** model (default):
|
||
|
||
```env
|
||
AI_PROVIDER=replicate
|
||
REPLICATE_MODEL=sdxl-inpaint
|
||
```
|
||
|
||
**Cost:** ~$0.025/image
|
||
|
||
---
|
||
|
||
## Auto-Model Selection
|
||
|
||
The system automatically picks the best model based on your prompt:
|
||
|
||
| Your Prompt | Auto-Selected Model | Why |
|
||
|-------------|-------------------|-----|
|
||
| "Fix the hand" | realistic-vision | Detects "hand" keyword |
|
||
| "Remove person" | lama | Detects "remove" keyword |
|
||
| "Change sky to sunset" | sdxl-inpaint | General purpose default |
|
||
|
||
**You don't need to manually specify models** - the auto-selection is optimized for quality and cost!
|
||
|
||
---
|
||
|
||
## Patch Library: Save and Reuse Parts
|
||
|
||
### What is the Patch Library?
|
||
|
||
A library where you can save image patches (regions) and reuse them across different images.
|
||
|
||
**Use Cases:**
|
||
- Save a well-generated hand to reuse later
|
||
- Save a perfect face for multiple photos
|
||
- Build a collection of good body parts
|
||
- Save textures, objects, or backgrounds
|
||
- Reuse AI-generated elements that came out great
|
||
|
||
### How to Save a Patch
|
||
|
||
#### Option 1: Save AI-Generated Result
|
||
|
||
After an AI edit completes:
|
||
|
||
```bash
|
||
POST /patches/
|
||
{
|
||
"name": "Perfect Hand",
|
||
"description": "Well-formed left hand, palm up",
|
||
"source_type": "ai_generated",
|
||
"source_edit_id": 123,
|
||
"category": "hand",
|
||
"tags": "left, palm, realistic"
|
||
}
|
||
```
|
||
|
||
This saves the AI-generated output (`patch_out.png`) to your library.
|
||
|
||
#### Option 2: Save Manual Selection
|
||
|
||
Select any region from your current image:
|
||
|
||
```bash
|
||
POST /patches/
|
||
{
|
||
"name": "Good Face",
|
||
"description": "Frontal face with good lighting",
|
||
"source_type": "manual_selection",
|
||
"source_project_id": 456,
|
||
"bbox": {"x": 100, "y": 100, "width": 200, "height": 200},
|
||
"category": "face",
|
||
"tags": "front, smile, female"
|
||
}
|
||
```
|
||
|
||
This saves whatever is currently in that region of your image.
|
||
|
||
#### Option 3: Import from File
|
||
|
||
Upload an external image:
|
||
|
||
```bash
|
||
POST /patches/
|
||
FormData:
|
||
name: "Downloaded Hand"
|
||
source_type: "imported"
|
||
file: [uploaded PNG file]
|
||
category: "hand"
|
||
```
|
||
|
||
### How to Apply a Saved Patch
|
||
|
||
```bash
|
||
POST /patches/apply
|
||
{
|
||
"project_id": 789,
|
||
"patch_id": 123,
|
||
"bbox": {"x": 300, "y": 400, "width": 200, "height": 200},
|
||
"feather_px": 10
|
||
}
|
||
```
|
||
|
||
This places the saved patch at the specified location in your image.
|
||
|
||
### Browse Your Patch Library
|
||
|
||
```bash
|
||
# List all patches
|
||
GET /patches/
|
||
|
||
# Filter by category
|
||
GET /patches/?category=hand
|
||
|
||
# Filter by tags
|
||
GET /patches/?tags=realistic
|
||
|
||
# Get specific patch
|
||
GET /patches/123
|
||
|
||
# Get patch image
|
||
GET /patches/123/image
|
||
|
||
# Get patch thumbnail
|
||
GET /patches/123/image?thumbnail=true
|
||
```
|
||
|
||
### Organize Your Patches
|
||
|
||
**Categories:**
|
||
- `hand` - Hand images
|
||
- `face` - Facial features
|
||
- `body` - Body parts
|
||
- `object` - Objects and items
|
||
- `texture` - Textures and patterns
|
||
- `background` - Backgrounds and scenery
|
||
|
||
**Tags:** Comma-separated keywords for searching
|
||
- "left, palm, realistic"
|
||
- "front, smile, female"
|
||
- "five fingers, open hand"
|
||
|
||
---
|
||
|
||
## Complete Workflow Example
|
||
|
||
### Scenario: Fix hands in a portrait photo
|
||
|
||
**Step 1: Create project and upload image**
|
||
```bash
|
||
POST /projects/ {"name": "Portrait Edit"}
|
||
POST /projects/1/upload [upload photo]
|
||
```
|
||
|
||
**Step 2: Try to fix the hand with AI**
|
||
```bash
|
||
POST /edits/projects/1/fix
|
||
{
|
||
"prompt": "realistic human hand with five fingers, natural pose",
|
||
"mode": "B", # Use full image for context
|
||
"selection_type": "rectangle",
|
||
"bbox": {"x": 200, "y": 300, "width": 150, "height": 200},
|
||
"feather_px": 10
|
||
}
|
||
```
|
||
|
||
The system auto-selects `realistic-vision` model because prompt mentions "hand".
|
||
|
||
**Step 3: If result is good, save it for later**
|
||
```bash
|
||
POST /patches/
|
||
{
|
||
"name": "Good Left Hand",
|
||
"source_type": "ai_generated",
|
||
"source_edit_id": 1,
|
||
"category": "hand",
|
||
"tags": "left, natural, realistic, five fingers"
|
||
}
|
||
```
|
||
|
||
**Step 4: Use saved hand on another photo**
|
||
```bash
|
||
# On a different project
|
||
POST /patches/apply
|
||
{
|
||
"project_id": 2,
|
||
"patch_id": 1,
|
||
"bbox": {"x": 150, "y": 250, "width": 150, "height": 200},
|
||
"feather_px": 15
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Cost Comparison
|
||
|
||
### Example: Fixing 10 hands in different photos
|
||
|
||
**Option A: Generate each hand with AI**
|
||
- 10 edits × $0.020 = **$0.20**
|
||
|
||
**Option B: Generate one good hand, save it, reuse it**
|
||
- 1 AI generation: $0.020
|
||
- 9 patch applications: $0.00 (no AI cost)
|
||
- **Total: $0.020** (90% savings!)
|
||
|
||
### When to Use Saved Patches vs AI
|
||
|
||
**Use Saved Patches When:**
|
||
- You have a perfect result you want to reuse
|
||
- Same angle/lighting/style needed
|
||
- Want to maintain consistency across images
|
||
- Want to avoid AI generation costs
|
||
|
||
**Use AI Generation When:**
|
||
- Need unique/different result each time
|
||
- Different angle or perspective needed
|
||
- Want variation and creativity
|
||
- Patch doesn't fit the context
|
||
|
||
---
|
||
|
||
## Pro Tips
|
||
|
||
### Building a Good Patch Library
|
||
|
||
1. **Save your best AI results** - When AI generates something great, save it immediately
|
||
2. **Organize with categories** - Use consistent categories for easy finding
|
||
3. **Tag descriptively** - Include orientation (left/right), pose, lighting, etc.
|
||
4. **Create variations** - Save multiple versions of common needs (left hand, right hand, etc.)
|
||
5. **Build gradually** - Your library becomes more valuable over time
|
||
|
||
### Maximizing Quality
|
||
|
||
1. **For hands:** Always use `realistic-vision` model or save good results
|
||
2. **For faces:** Use Mode B (full image context) for better matching
|
||
3. **Use high feather values** (15-20px) when applying saved patches
|
||
4. **Test positioning** before finalizing - patches work best when lighting/angle matches
|
||
|
||
### Saving Money
|
||
|
||
1. **Build a patch library** of common needs
|
||
2. **Use `lama` for removals** instead of expensive models
|
||
3. **Let auto-selection work** - it picks the cheapest appropriate model
|
||
4. **Reuse successful patches** instead of regenerating
|
||
|
||
---
|
||
|
||
## API Quick Reference
|
||
|
||
```bash
|
||
# List available patches
|
||
GET /patches/
|
||
|
||
# Get patch details
|
||
GET /patches/{id}
|
||
|
||
# Get patch image
|
||
GET /patches/{id}/image
|
||
GET /patches/{id}/image?thumbnail=true
|
||
|
||
# Create patch from AI edit
|
||
POST /patches/
|
||
{
|
||
"name": "My Patch",
|
||
"source_type": "ai_generated",
|
||
"source_edit_id": 123,
|
||
"category": "hand"
|
||
}
|
||
|
||
# Create patch from manual selection
|
||
POST /patches/
|
||
{
|
||
"name": "My Patch",
|
||
"source_type": "manual_selection",
|
||
"source_project_id": 456,
|
||
"bbox": {"x": 100, "y": 100, "width": 200, "height": 200}
|
||
}
|
||
|
||
# Apply saved patch
|
||
POST /patches/apply
|
||
{
|
||
"project_id": 789,
|
||
"patch_id": 123,
|
||
"bbox": {"x": 300, "y": 400, "width": 200, "height": 200},
|
||
"feather_px": 10
|
||
}
|
||
|
||
# Delete patch
|
||
DELETE /patches/{id}
|
||
|
||
# Update patch metadata
|
||
PUT /patches/{id}
|
||
{
|
||
"name": "Updated Name",
|
||
"tags": "new, tags",
|
||
"category": "hand"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Summary
|
||
|
||
✅ **For hands/faces/bodies:** Use `realistic-vision` model
|
||
✅ **For removal:** Use `lama` model
|
||
✅ **For general edits:** Use `sdxl-inpaint` (default)
|
||
✅ **Auto-selection works great** - just write natural prompts
|
||
✅ **Save good AI results** to patch library for reuse
|
||
✅ **Save manual selections** from any image
|
||
✅ **Reuse patches across images** to save money and maintain consistency
|
||
|
||
**You now have the best of both worlds:**
|
||
- AI generation when you need something new
|
||
- Saved patches when you need consistency or want to save money
|