AI-Native Commercial Photography Platform
The headline
One commercial shoot starts at $500 and waits for a photographer; this pipeline charges by the image, cents apiece on your own API rate, and a single capture comes back compliant for four delivery platforms at once.
$500 is the going market price for one commercial shoot, not our own measurement. The other side of the comparison is a unit price multiplied by a count: image API price × number of images, or GPU electricity + depreciation ÷ images if you self-host. Either way the figure comes off your bill, not ours. One capture then yields four platform specs: UberEats 5:4, DoorDash 16:9, Grubhub 1:1, TikTok 9:16.
What you are buying
ChefShot turns a phone snapshot into a menu image that can go straight onto a delivery listing: on-device iOS capture feeding an AISwarm multi-agent vision pipeline, built in-house, emitting the compliant size for each platform from one shot.
What this replaces
- A ghost kitchen, one owner working the line alone. The menu needs a new burger and he needs one photograph that can go up on the delivery listing. A commercial shoot starts at $500 and is not on demand: he waits for the photographer’s schedule, then for the retouching. For a single store that money does not spread, and the wait does not fit a launch date.
- So he shoots it himself, in a working kitchen — grease on the pass, stainless behind it, cold white light turning the patty grey. The photo goes up and conversion drops, and sizing or styling that misses the platform spec risks the listing being taken down. A general image model is no answer either: a Midjourney-class model puts bacon on a beef burger, and an ingredient that is not in the dish is a customer complaint and a platform violation record. A non-technical owner cannot drive prompt engineering well enough to stop it.
- The real wall is the wait. Generation is a request that runs for tens of seconds, and the native iOS networking stack drops a connection like that with -1005. Code written as “call the API once” leaves the user watching a spinner, and the whole wait is thrown away.
Architecture
One horizontal line: capture on the device, then the AISwarm, then the cloud. The NON_FOOD intercept sits between the two agents, with a dashed branch down to refund_credit_logic, and the SwiftData library at the end loops back to the phone — which is why the gallery still opens with the network off.
Guardrails
- Long-connection reliability, rewritten against iOS -1005. Generation is a long-wait request and the native iOS networking stack times it out with -1005, so the network layer was rebuilt: a dedicated URLSession instance, httpShouldUsePipelining = false, and exponential-backoff retries. The tens-of-seconds wait no longer drops the line.
- Anti-hallucination as a commercial constraint. The prompt engine hardcodes two locks, [CRITICAL IDENTITY LOCK] and [GEOMETRIC & ANATOMY LOCK]. Agent B may work on the light and shadow of the plate; it may not invent an ingredient that is not in the dish.
- Credits are refunded by state machine, not by support ticket. When Agent A intercepts NON_FOOD or the network wobbles, the Supabase stored procedure refund_credit_logic returns the credit automatically, and the client fires its degraded UI in the same breath.
What you end up holding
- iOS native app — a local-first SwiftUI / SwiftData client with StoreKit 2 payments and Sign In with Apple. These are the product’s own assets, not a handover to a client.
- High-concurrency API gateway — FastAPI service endpoints deployed on Vercel.
- Database and object storage configuration — the full Supabase schema, its RPC functions including refund_credit_logic, and the Vercel Blob permission model.
Stack
- Orchestration
- AISwarm multi-agent pipeline (Agent A · Qwen-VL-Plus visual review / Agent B · FLUX.1-Kontext-dev light reconstruction) · FastAPI streaming gateway
- Data
- Supabase (PostgreSQL + RPC stored procedure refund_credit_logic) · Vercel Blob · SwiftData local vector store
- Presentation
- iOS · SwiftUI · AVFoundation (AVCaptureSession, CMMotionManager) · Apple Vision · CoreImage · StoreKit 2 · Sign In with Apple
The figures, with their arithmetic
- A commercial shoot starts at $500
- The going market rate for one commercial photography session — an external price, not our own measurement. One shoot also waits for the photographer’s slot, and a single-location store cannot spread that cost across anything.
- Marginal cost per finished image: cents to the teens of cents
- Metered: image API unit price × number of images. Self-hosted: GPU electricity + depreciation ÷ images. Either way the figure follows your own bill, not ours. What changes is the unit of sale — one shoot becomes one image.
- Four platform specs, compliant without a crop
- A structured fact rather than a measurement: UberEats 5:4, DoorDash 16:9, Grubhub 1:1, TikTok 9:16, emitted against presets. No manual cropping at the end of the job.
- Segmentation on device — the original never leaves the phone
- Implementation fact: iOS Vision does the subject cutout and mask extraction on the device, before anything is uploaded. Privacy and speed fall out of the same decision.
- The -1005 connection drop, rewritten
- Implementation fact: a dedicated URLSession, httpShouldUsePipelining = false, and exponential backoff. The tens-of-seconds wait for a generation no longer ends in a dropped connection.
The same shape, three other problems
This is the part that matters if the featured use case is not yours: the same architecture pointed at three unrelated situations, none of them a variation on the case above, and none of them requiring a rebuild. These are transfer directions rather than delivered engagements — the system above is what we have run, and the three below are what its shape solves next. We label the difference rather than blur it.
E-commerce and DTC product display
walk around a piece of jewellery or cosmetics with a phone, strip the cluttered background on the device, and assign the prompt per material — metal reflection, glass transmission — to produce the commercial hero image.
Cross-border used-car marketplaces
shoot the vehicle in a garage, and the pipeline identifies and tags the model, swaps in a minimal showroom background, and masks the bystanders reflected in the window glass.
Real estate and interior styling
photograph an unfinished shell, and the multimodal engine reads the room structure and renders the full set with traced light and shadow.
Have a system that needs building?
Write down the situation. You get a written, specific response: no calendar, no discovery call, no fifteen minutes of introductions.
Status
Live on the App Store, and the only one of our products that is publicly released. Everything behind it is in-house: we built it for ourselves, and we do not claim it runs production for any client.
Live on the App Store. Our own product, not a client engagement.