-
-
Picture of a product generated with my tool
-
Picture of a product generated with my tool
-
Picture of a product generated with my tool
-
Picture of a product generated with my tool
-
Picture of a product generated with my tool
-
Picture of a product generated with my tool
-
Picture of a product generated with my tool
Video for the products demo is uploaded in "Try it out" links because I was not allowed to post 2 links. Link 1 - Video of the whole website, platform and etc Link 2 - Generation of the product itself
Inspiration
Anyone selling products online runs into the same wall: good photos are expensive. A proper studio shoot means renting space, hiring a photographer, booking a slot, and waiting days for retouched files - for every product. For a catalog with hundreds of SKUs, that's not a one-time cost, it's a recurring tax.
The obvious "fix" - AI image generation - has a fatal flaw for commerce. Generic models happily reinvent your product: they shift the logo, change the cap color, smooth out a label, or hallucinate a shape that simply isn't real. A pretty image of the wrong product is worse than no image at all. You can't ship that to a store.
VITRINA started from one stubborn idea: what if the studio came to the product instead of the product going to the studio - without ever touching the product itself?
What it does
VITRINA takes a single product photo and generates studio-quality images at scale - clean backgrounds, professional lighting, lifestyle scenes - while keeping the product pixel-faithful to the original. Same logo, same color, same shape, same label. The scene changes; the product never does.
It's built to run as a catalog, not a toy. You don't babysit one image at a time - you queue a batch and walk away.
How I built it
The architecture is shaped around two non-negotiables: product fidelity and async generation at scale.
- Fidelity first. The product is treated as a locked reference, not a suggestion. The generation pipeline composites and relights around the original product rather than re-imagining it, so the output stays true to the source.
- Async by design. Generation is a queued, background job - never a blocking request. You submit work, the system processes it on its own schedule, and results stream back as they finish. This is what makes "a whole catalog" realistic instead of "one image while you wait."
- Frontend. An interactive HTML mockup to prove out the flow and UX before committing to the full stack.
Challenges I ran into
The hardest part isn't making a nice image - generic models do that easily. The hard part is making a nice image that is still exactly your product. Holding that line - keeping appearance untouched while changing everything around it - was the central engineering tension of the whole project.
The second challenge was scale. A demo that does one image is easy. A system that does a hundred without falling over needs async job handling, queuing, and graceful result delivery - designed in from the start, not bolted on later.
What I learned
That the real product here isn't "AI photos." It's trust. A store owner uploads a real thing and needs to believe the output is still that real thing. Every design decision came back to protecting that - fidelity over flashiness, every time.
What's next for VITRINA
Scaling the pipeline, expanding scene/background variety, and tightening the catalog workflow so a seller can go from one product shot to a full, consistent set of listings in a single pass.
Built With
- claude
- css
- fal.ai
- html
- javascript
- python
- supabase
- typescript