Hi, we're team ShootAgent. We built a suite of agentic tools that turns a house's photos into a finished listing and Instagram reels, and handles the compliance, all in natural language.

Inspiration
We wanted an inside opinion on what eats up a real estate agent's day, so we called a listing agent at a brokerage here in New Jersey. Every listing is a lot of back and forth with photographers and videographers, and virtually staging one empty house could cost her "up to several hundred to $1,000". They've tried AI for it, and she told us it's still "problematic".
An AI that redraws a room can change the house, and a listing has to show the real one. NJMLS allows virtually staged photos only when they are accurate and labelled, and prohibits "Virtually Altered" ones. So the model that draws cannot be the one that decides.
What it does
So we sped the whole thing up. You edit a photo just by asking. Select the armchair, ask for sage green, and it changes only that. Ask it to swap the dark rug for a jute one.

The part we're proudest of is the verification loop. One AI makes the edit. A second AI is the judge: it compares the before and the after, and if it's not good enough, it tells the first one what's wrong and makes it try again. After three tries it gives up and keeps your original. And plain code checks, deterministically, that nothing outside the edited region changed.

It also works on a whole shoot from one prompt. Say "get rid of all the trash cans", and the agent goes through every photo in the listing, works out which ones have one, and fixes them in parallel. Only what you asked for goes. In the first photo below, the customer wanted the wall outlet kept, and it stayed.

Attach a picture and ask for its colour on the walls, or for the picture itself on the TV.

Then it builds the listing. It starts from CoStar's data: the record, the MLS photos, Vexcel's aerial with the parcel outline, and the Matterport tour. ShootAgent captions every photo, writes the description, and checks the numbers and amenities against the record. A headline that claimed a heated pool was refused, because CoStar lists no pool and the aerial saw none. It writes the disclosure New Jersey's MLS requires, and packages the listing for Zillow.

Then the creative side, our reel studio. It takes the same photos and uses AI to cut an Instagram reel on the beat, with the hook and captions written for you. You change it by chatting, like "open on the kitchen", so you can make reels for every listing, not just the big ones.
And it runs at scale. A brokerage has a whole book of listings, so we ran a batch of 16, each with its own agent. They finished in 14 minutes 6 seconds for $1.64, about ten cents a listing, and the fact check refused 12 claims along the way. For a brokerage, that means listings go up faster, for a fraction of the cost, and every photo is still an honest picture of the house.

How we built it
Claude Sonnet 5.5 runs the agent through typed tools, and code and pinned models make the pixels. Grounding DINO and SAM 2.1, open models we use as published, find objects and draw masks. gpt-image-2 redraws inside the mask, and code composites the result back so the rest of the photo keeps its original pixels.
Most of the checks are plain code, so only the judge costs tokens.

Staging locks the room. Windows, doors, the fireplace and fixtures cannot change, and the floor in front of a door stays clear.

Each house gets one agent run at a time, and different houses run side by side. The queue behind that is about 70 lines of threading code, so we modelled it in TLA+ and had a model checker try every timing: 574,628 states, and in none of them did two runs edit one house at once. We broke the scheduler four ways on purpose, and the checker caught all four.

We built ShootAgent with coding agents run from T3 Code: a lead agent hands work to workers, each on its own branch. The product copies that shape. A batch engine fans listings out to a bounded pool, one full agent run per listing.

What we built at HackPrinceton, and what came before
ShootAgent's photo-edit engine existed before the event: masks from Grounding DINO and SAM 2.1, edits confined to a mask, the check-and-retry loop, the photo QC pass and the reel renderer.
Sam Gu and Vouk Praun-Petrovic built these at HackPrinceton: the CoStar and Vexcel import and the record fact check, locked-structure staging, scene-object picking, the New Jersey disclosure, the Listing and Social app, the chat reel editor with MCP, the Zillow package, the Agency batch view, and the TLA+ model of the scheduler.
Challenges we ran into
Whole-room staging is the hardest edit, and it has not passed yet. On the demo listing all three attempts passed the pixel checks and failed the judge on realism, so ShootAgent kept the original photo. Editing one object at a time, like the rug and the armchair, does pass.
Detection takes minutes a photo on a laptop CPU, so the demo computes masks ahead of time and replays recorded runs for its standard prompts. Six listings at once ran our 24 GB laptop out of memory and disk, so a batch now runs two at a time.
Accomplishments that we're proud of
It refuses its own work. A staging attempt that changed no locked pixel still failed for a shifted floor colour, and the listing kept its original photo. A false headline was refused with the fact that refuted it beside it. And 16 listings finished in 14 minutes for $1.64.
What we learned
The MLS rulebook was our most precise spec; its labels map one to one onto our edit types. One phone call moved our weekend from photo QC to staging.
What's next
On Monday we ask the brokerage's marketing director whether we may run on their listings. Then a GPU for live detection, a staging pass that clears the judge, and fixes for the three cancellation races the TLA+ model found.
