
One warehouse photo becomes a whole storefront shoot
Upload a plain product photo, pick a scene and a quality tier, then get storefront-ready variants where only the light and background change, never the product.
Engine, presets, billing routes, i18n parity

- 1Same product, badge confirms it wasn't swapped
- 2Only the scene changed, the mug itself is untouched
Where AI does the work
Storefront generation
Every image model call runs through a provider abstraction over fal.ai, so archetype, shot set and quality tier turn a warehouse photo into several finished scenes without the app depending on one vendor.
Fidelity gate
A sharp-based check compares every generated variant back to the original upload; a shot where the product itself visibly changed is rejected and never billed, only rerun.
Whole-catalog batch
Batch mode runs the same generate-and-check pipeline per SKU across a full catalog upload, spending credits only on the shots that pass the fidelity gate.
Built with Claude Code in 10 weeks
New storefront scenes meant a studio booking for every SKU.
A warehouse photo turns into several fidelity-checked storefront shots.


Under the hood
01Context
A warehouse photo is not a storefront photo
A flat photo out of a warehouse box is fine for a picking list, not for a product page. Turning it into a real scene usually means a studio booking per SKU, and that cost repeats every time a catalog needs new scenes or a new market. VITRINA takes the warehouse photo as the only input and generates the storefront images around it.
02What we built
Archetype, quality tier, then a fidelity check
Upload a product photo, pick an archetype and a shot set from the built-in scene library, choose a quality tier and get back several storefront-ready variants. Every variant is checked against the original before it counts as delivered: the product itself never changes, only its surroundings do. A single product goes through the studio; a whole catalog goes through batch, generating a listing set per SKU instead of one photo at a time.
03How it works
Next.js on Supabase, a provider abstraction over the model
The app is Next.js 16 with Supabase for Postgres, Auth, Storage and Realtime. Every image model call goes through a provider abstraction so fal.ai isn't hardwired into the rest of the app; with no key set, a mock provider echoes the product back so the full upload-to-result flow works end to end while the real fidelity check still runs. 597 Vitest tests cover the generation engine, the scene presets, the billing routes and translation parity between Russian and English.
ANM SOLUTIONS / CONTACT US
Want something like this?
First 30-minute call is free. We scope it, you decide.


