Scenri · AI photo studio
Getting AI to change only what you asked
Overview
An open-source AI photo studio I designed, branded and built, directing coding agents
Scenri saves a brand’s products, people and places once, so every shot can name them in one line. It took nine weeks, from early August to early October.
Problem
Studios need the fiftieth picture of a product to match the first
A studio comes back to the same product, model and light for weeks. AI image tools forget all of it between sessions.
Image models only learned to hold a product or a face from reference photos in 2025, and asked to change one thing, they still redraw the rest.
Goals and constraints
Three rules every release had to follow
Scenri runs on your computer with no account or telemetry, and each brand is an open .brand file. The image model is yours, so connecting it is the only setup.
Product model
Save a product, a person and a place once, then write the shot in one line
Products come in from their photos. People and places are made in Scenri. The line names them, and the words around them describe the shot.

Made from
Red Bowler BagProduct, saved once
AmaraPerson, saved once
Laundry LinePlace, saved once
The line
Amara carrying the Red Bowler Bag at Laundry Line, full length, her face in frame, late morning light.
People and places
A person and a place, one question at a time
On 8 September I built the person studio from my Figma frames as a form. The next day I replaced it with this conversation, where most answers are a tap on a picture or a line in your own words. Places shipped in 0.15 on the same parts.
Writing a shot
$ for a product, @ for a person, / for a place, # for a colour
Each sign opens the brand’s things. A pick becomes a chip, and the whole line goes to the model as one prompt.
Refining a shot
Refining a shot used to redraw the whole picture
On 22 August an overnight test scored shots against the real product and person photos. Refining made them worse.
01 · Problem
Ask for one change, get a different picture
Usable shots fell from 63% to 22% after refining. Asked for a wider frame, the model also shrank the man from half the frame’s height to about 7% and relit the scene.
02 · Decision
I kept the untouched pixels in code and cut Compare
Asking the model to leave everything else alone didn’t work, so from 0.4 Scenri does it in code. Every pixel a refinement wasn’t asked to change comes back from the original, and on the test shot untouched pixels went from 1.8% to 86.0%.
Compare was the headline of 0.1. It put two versions side by side, with a heatmap of where the model had changed your product. I had stopped opening it myself, and in 0.8.3, 21 days after it shipped, I deleted it.


03 · Solution
Each refinement is a new version on a trail
You type one sentence on the shot. The result lands under the picture next to the original, and you can step back to any version.
How I built it
I ran three coding agents at once and made every call
I split the product into tasks and gave each agent its context. From 7 September every task ran in its own worktree, so Claude Code, Codex and Cursor worked in parallel without touching each other’s files.
They all worked to rules I wrote in AGENTS.md and the design rules, and the checks enforce them. A test fails on a wrong focus ring or a retired word, and a release can’t ship until its What’s New entry is written.
Every branch still came to me. Pull request #160 worked, but it relit products that had never looked pasted in, so on 4 September I closed it.
Brand
I designed the mark, the colours, the type and the website
Gold marks only credits, the keeper star and a ready update. On 26 September I took it off loading states and moved to the painted sky. Tests check the brand down to how the name is spelled.
Outcome
83 open-source releases in 64 days
Every release is on GitHub with its notes. It’s early, at 4 stars, and the launch taught me the most. Its one useful reply was “LoRA already exists”, so I rewrote the pitch around what Scenri keeps for a brand, not how it makes a picture.
Reflection
What I’d take to the next product
- 01
Score the pictures
The refine bug only showed up when I scored shots against real photos.
- 02
Count the pixels
A refined shot looked right and kept 1.8% of the original pixels.
- 03
Cut the headline
Compare was the headline of 0.1, and I cut it three weeks later.
- 04
One question at a time
The person form lasted a day. The conversation that replaced it stayed.
- 05
Own the merge
I ran agents in parallel, and every merge was my call.
- 06
Find users first
Every release reached almost no one, so next time strangers come first.








