The problem
Photos are usually taken first and cropped later for wherever they end up, and by then the framing may not work. The time to decide is before the shot.
Next: What I didWhat I did
The app is built from small packages that can be tested on their own:
CompositionEngine is pure Swift, tested on Linux. It holds the framing logic without touching the camera.
Runs analysis at 10 Hz while you frame. PhotoWriter keeps the original and stores the crop as a reversible edit.
A MobileNetV3 + RoIAlign model trained on GAICD and CPC and exported to a Core ML package.
The product rules are strict: on-device only, no account, no backend, and a one-time purchase.
Next: The resultThe result
On the GAICD test split, 200 photos with about 90 human-rated crops each, the model nearly doubles the rank correlation of hand-written rules.
This is an offline benchmark, not latency or quality on a phone. Six training runs landed within noise of each other, so more of the same training would not help.
Next: What I'd do nextWhat I'd do next
Connect the model. The app ranks crops with the hand-written rules today. The trained scorer is exported but not wired in yet.
Measure it on a device. Latency and battery in a live viewfinder are the numbers that decide if the model ships.
