Files
CheapRetouch/README.md

92 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CheapRetouch
A privacy-first iOS photo editor for removing unwanted elements from your photos — powered by on-device machine learning.
![Platform](https://img.shields.io/badge/Platform-iOS%2017.0+-blue)
![Swift](https://img.shields.io/badge/Swift-5.9-orange)
## Features
### 🧑 Person Removal
Tap on any person in your photo to instantly remove them. The app uses Apple's Vision framework to generate precise segmentation masks, then fills the removed area seamlessly.
### 📦 Object Removal
Remove unwanted foreground objects with a single tap. When automatic detection isn't possible, use the smart brush tool with edge-aware refinement for manual selection.
### ⚡ Wire & Line Removal
Easily remove power lines, cables, and other thin linear objects. The app detects contours and automatically selects wire-like shapes, or you can trace them manually with the line brush.
## How It Works
CheapRetouch combines Apple's Vision framework for intelligent object detection with an AI-powered inpainting engine:
### Object Detection (Vision Framework)
- **`VNGenerateForegroundInstanceMaskRequest`** — Generates pixel-accurate masks for people and salient foreground objects
- **`VNDetectContoursRequest`** — Detects edges and contours for wire/line detection
- **Tap-based selection** — Simply tap on what you want to remove
### AI-Powered Inpainting (LaMa Model)
The app uses **LaMa (Large Mask Inpainting)**, a state-of-the-art deep learning model optimized for removing objects from images:
- **Model**: `LaMaFP16_512.mlpackage` — A Core ML-optimized neural network running entirely on-device
- **Architecture**: Fourier convolutions that capture both local textures and global image structure
- **Processing**: Runs on the Neural Engine (ANE) for fast, efficient inference
- **Quality**: Produces natural-looking results even for large masked areas
**Technical Details:**
- Input resolution: 512×512 pixels (automatically crops and scales around masked regions)
- Quantization: FP16 for optimal balance of quality and performance
- Fallback: Metal-accelerated exemplar-based inpainting when needed
### Processing Pipeline
```
1. User taps object → Vision generates mask
2. Mask is dilated and feathered for smooth edges
3. Region is cropped and scaled to 512×512
4. LaMa model inpaints the masked area
5. Result is composited back into original image
```
## Privacy
🔒 **100% On-Device Processing**
- No photos leave your device
- No cloud services or network calls
- No analytics or telemetry
- Photo library access via secure PHPicker
## Technical Stack
| Component | Technology |
|-----------|------------|
| UI | SwiftUI + UIKit |
| Object Detection | Vision Framework |
| ML Inference | Core ML (Neural Engine) |
| GPU Processing | Metal |
| Image Pipeline | Core Image |
| Fallback Processing | Accelerate/vImage |
## Requirements
- iOS 17.0 or later
- iPhone or iPad with A14 chip or newer (for optimal Neural Engine performance)
## Performance
| Operation | Target Time | Device |
|-----------|-------------|--------|
| Preview inpaint | < 300ms | iPhone 12+ |
| Full resolution (12MP) | < 4 seconds | iPhone 12+ |
| Full resolution (48MP) | < 12 seconds | iPhone 15 Pro+ |
## Non-Destructive Editing
All edits are stored as an operation stack — your original photos are never modified. Full undo/redo support included.
## License
MIT License — see [LICENSE](LICENSE) for details.