Inspiration
Realtors still show houses with a folder of photos and a PDF floor plan. Buyers squint at the pictures and try to figure out if the kitchen is actually big or just shot with a wide lens. Producing anything better — a real walkthrough video, a 3D tour, professional narration — means hiring people, renting equipment, waiting days, and spending thousands per listing.
We kept thinking about how absurd that is when everyone already has a drone and an iPhone. The footage exists. The problem is everything that happens after you capture it.
What It Does
You upload drone photos of the exterior. The pipeline reconstructs them into a 3D model of the building — compressed small enough to load in a browser on any device, no app required. For context: formats like Matterport lock your scans into proprietary players and charge monthly storage fees for files that can run into the gigabytes. The GLB we produce with Draco compression is a fraction of that size and opens anywhere Three.js runs.
Then you add the rooms and drop in interior photos — shot on your phone, nothing fancy. From that Keep It Real builds two things:
A virtual tour where a buyer actually clicks room to room through the real layout of the house. Not a slideshow. Not a video that plays itself. Something you navigate.
An AI walkthrough video — narrated, captioned, with the camera moving through the interior footage — that looks like something a production crew made. Except it came from Gemini writing the script, ElevenLabs reading it, and Higgsfield generating the camera movement. The whole thing costs a fraction of what a videographer charges and takes minutes instead of days.
How We Built It
Drone photos go into NodeODM which does the photogrammetry and spits
out a GLB. Three.js loads it in the browser, the user draws a box
around the building to crop out the street and yard, and
@gltf-transform compresses the result with Draco before anything
gets stored or served.
The floor plan tells the app how the rooms connect. Shared walls become doorways, so the tour moves through the house in a sequence that actually makes sense instead of teleporting between rooms.
Gemini Vision looks at the interior photos and the room layout and writes the narration — what a realtor would actually say walking someone through that specific house. ElevenLabs voices it and returns word-level timing data we use to sync the audio to the cuts. Higgsfield takes the interior stills and generates short video clips with real camera movement through each space. FFmpeg stitches everything together with captions into a final MP4.
For the demo it all runs from one button. Example house, pre-generated assets, no API keys needed to see the full thing working.
Challenges
The room graph was messier than expected. Figuring out which walls are shared between rooms sounds simple until you hit floor plans with corners that almost touch, walls with thickness, or layouts with weird dead ends. Getting the traversal order to feel like how a person would actually walk through a house took a few iterations.
Syncing ElevenLabs timing to Higgsfield clips was its own puzzle — each clip runs a different length and narration drifts if you're not careful about how you sequence the FFmpeg assembly.
What We Learned
Most of what makes a real estate listing feel expensive is just production: camera movement, a good voice, a script that knows the space. The technology to generate all of that automatically exists right now. The gap between a produced listing and an AI-generated one is a lot smaller than the industry thinks.
Also: Draco-compressed GLB is genuinely underrated for browser 3D. A model that would be unusable raw becomes fast and interactive at a fraction of the storage cost. That matters a lot when you're trying to ship something a buyer can open on their phone.
What's Next
Live narration synced to the virtual tour, real 360 interior photo support, and eventually deriving the floor plan directly from the drone model so you don't have to upload one separately. Fly the drone, walk the rooms with your phone, listing builds itself.

Log in or sign up for Devpost to join the conversation.