FrameShift
Problem
Taking a good photo of someone you care about should be easy. But when a moment is worth capturing, whether your partner looks great, you're somewhere special, or you simply want a photo to remember it by, the results often don't match the moment.
The framing is off, the angle is awkward, and even after several attempts, the photos still don't feel right.
Solution
On-device ML is the future of AI. I built a camera coach that guides you while you shoot, with nothing sent to the cloud.
Pick a reference, set up the shot, follow the live instructions. You never have to guess if the picture is good.
SwiftUI · Vision · AVFoundation · Core Motion · iOS 17
How it works
Import a photo. On-device Vision builds a ShotSpec. The live camera overlays guides so you can match it. Capture saves to the gallery.
SwiftUI app on iOS 17, iPhone portrait, no backend, no SPM packages.
| Piece | What |
|---|---|
| UI | SwiftUI |
| Camera | AVFoundation |
| Reference + live subject | Vision (VisionAnalyzer, LiveVisionAnalyzer, PersonSegmenter) |
| Level / tilt | CoreMotion |
| Import | PhotosUI picker |
| Save | Photos, add-only |
| Looks | CoreImage |
| Persistence | FileManager JSON + JPEGs (ReferenceStore, CapturedStore) |
ReferencePhoto and ShotSpec live on disk. Specs cache until analyzerVersion bumps, then Vision runs again.
Not in the stack: accounts, network, Core ML models you ship, cloud AI.