Split processing into geometry phase (crop/resize) and adjustment phase.
Cache the post-geometry pixels keyed by image fingerprint + crop/resize config.
When only adjustments change, skip expensive decode/crop/resize operations.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- CropOverlay component with draggable/resizable region
- Maintains target device aspect ratio
- Rule of thirds grid overlay
- Dark mask outside crop area
- Updates ImagePreview to show overlay in manual mode
- Updates photonWorker to handle manual crop regions
- Also fixes top/bottom crop modes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Full pipeline processing off main thread
- Image decoding via createImageBitmap + OffscreenCanvas
- All adjustments and dithering algorithms
- Blob output with data URL conversion
Co-Authored-By: Claude <noreply@anthropic.com>