OpenHouse 3D rebuilds a house as a 3D model from its real-estate listing photos, then renders a cinematic walkthrough video of it with headless Blender. You get photo-matched stills and a continuous fly-through/walk-through film. A comparison video plays the film above the original listing photos.
readme-demo-attachment.mp4
▶ Watch the side-by-side walkthrough (65 s, 3856 × 1980, 184 MB) · 1080p version (27 MB) · Project page
13695 Stanford Drive, Carmel, Indiana, rebuilt from its 32 listing photos. Left, Opus 5.5: the Stanford reconstruction in this repository, built with Claude Opus 5.5 using this toolkit. Right, Astra: an independent reconstruction of the same listing. Below each film are the original listing photo and the matching virtually staged render. The films are rendered from the 3D models; listing photos appear only in the comparison panels.
| Input | Output |
|---|---|
| The photos from a real-estate listing (exterior, aerial, rooms) | A procedural 3D model of the house, lot and street in Blender (.blend) |
| A few measured or published dimensions (optional) | Renders from each listing photo's own camera, for a photo-vs-render gallery |
| Your interpretation of rooms, levels and openings | A continuous cinematic walkthrough video (1080p24, Cycles, titles and music) |
| A synchronized comparison movie: the film above matching photo/render pairs |
Under the hood:
- Camera solving from photos. Point and line solvers recover each listing photo's camera. They handle perspective-corrected (shifted-lens) photos and drone aerials, and solve plan dimensions jointly across photos.
- Procedural architecture in
bpy. Walls with validated openings, lap siding and brick as real geometry, windows, doors, stairs, roofs with gutters, kitchens, baths and fixtures. - Virtual staging and landscape. Furniture, soft goods, rugs, art rectified from the photos, trees, shrubs, grass, pavers, water and the neighbouring context.
- Production rendering. Headless Cycles on CPU, Metal, OptiX, CUDA, HIP or oneAPI; packed and fingerprinted scenes; resumable chunked rendering; motion-compensated temporal denoising; camera-route audits for clearance and whip pans.
- Delivery tools. Title cards, music edit, an offline photo/render gallery, frame-accurate comparison videos, and checksum inventories of the final files.
This is a modeling toolkit, not a one-click photo-to-3D service and not photogrammetry. A person or an AI coding agent reads the photos, sets out the plan and writes a small house package. The library does the geometry, rendering and video. Hidden geometry is inferred; a reconstruction is not a measured survey.
| House | Photos | What's included |
|---|---|---|
| Stanford, Carmel IN | 32 | Every photographed room, the street, neighbours and pond. Photo-solved cameras, 32 photo/render pairs, a ~66 s golden-hour cinematic and an 80 s route-matched walkthrough (the video above) |
| Webster, Palo Alto CA | 31 + plan | The most documented delivery: a 64 s continuous walkthrough, 31 photo comparisons and a synchronized comparison movie |
| Walsh, Atherton CA | 34 | Modern travertine villa: 29 photo-matched stills and a 78 s long-take film |
| Alpine, Beverly Hills CA | 33 | Experimental Georgian estate; production paused |
_template |
none | Synthetic starter that renders with no downloads |
Requirements: Blender 5.2.x (tested with 5.2.1), Python 3.9+, and Git.
Blender includes bpy; install the Python dependencies into a separate virtual
environment. imageio-ffmpeg supplies FFmpeg for media tools. No API key is needed.
git clone https://github.com/yunfanye/openhouse-3d.git
cd openhouse-3d
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev]'
export ARCHVIZ_PYTHON="$PWD/.venv/bin/python"
python tools/new_house.py my_house --title "My house"
blender -b --python-exit-code 1 --python run.py -- \
--house my_house --cam hero --samples 16 --scale 25 --no-polish --device CPUOpen houses/my_house/output/renders/hero.png. The starter is a synthetic house
that needs no photos, downloaded textures, or saved .blend file. Replace its
plan, geometry, cameras, and materials with your house. The environment commands
above use a POSIX shell; see setup for Windows and GPU selection.
- Inventory your photos and their rights; write measured dimensions and uncertain
assumptions in
houses/my_house/REFERENCES.md. - Define one coordinate system, room volumes, levels, walls, and openings in
plan.py. Solve photo cameras (tools/photo_grid.py,solve_camera.py,solve_scene.py,intcam_solve.py) before refining finishes. - Build architecture and permanent fixtures. Compare silhouettes, apertures,
roof coverage, room connections, and fixtures against every available view
(
tools/overlay.py). - Add physically scaled materials, furnishing, vegetation, and lighting. Keep staging choices distinct from observed architecture.
- Audit the baked camera route, inspect representative final-quality stills, freeze and pack the scene, then render into a fresh fingerprinted run.
- Build the gallery and comparison video, decode the entire movie, inspect native frames and transitions, and record checksums before removing intermediates.
The detailed instructions are in the workflow, the realism checklist, and the production guide. Comparison manifests explain the gallery and video tools. Lessons record what went wrong on each house and how it was fixed.
| Path | Responsibility |
|---|---|
run.py |
Build a house, configure Cycles, render stills, prepare film shots |
archviz/mesh.py, parts.py |
Mesh construction, openings, furniture, fittings |
archviz/cladding.py, fenestration.py, roofing.py |
Lap siding and trim, windows / doors / blinds, pitched roofs with gutters |
archviz/finishes.py, furnish.py, stagekit.py, paving.py |
Interior finishes, furniture and soft goods, pavers and landscape beds |
archviz/phototex.py, scatter.py |
Textures rectified from reference photos, geometry-nodes instancing for large context |
archviz/materials.py, sky.py, lights.py |
Procedural materials, photographic texture helpers, sun/sky and lighting |
archviz/plants.py, trees.py, polish.py |
Vegetation, grass, cloth-friendly primitives, finish passes |
archviz/plan.py |
Shared wall/opening validation and hole clipping, without Blender |
archviz/film.py, filmkit.py, camera_audit.py |
Camera motion, doors, film assembly, title helpers, route checks |
archviz/rendering.py, production.py |
Device selection, packed-scene rendering, safe resume |
archviz/media.py, gallery.py, comparison.py |
Portable media I/O, offline gallery, synchronized video |
archviz/delivery.py |
Final inventory, checksum verification, explicit pruning |
tools/ |
Camera and plan solving from photos, house creation, asset fetching, scene preparation, audits, look-dev renders |
houses/_template/ |
Minimal runnable starting point |
houses/stanford/, webster/, walsh/, alpine/ |
Photo-derived example houses (see the table above) |
Keep transferable algorithms in archviz/; keep dimensions, photo mappings,
art direction, and architectural decisions in houses/<name>/. The library does
not import a specific house. See architecture.
The listing photos for Alpine, Stanford,
Walsh and Webster are included
so the examples can be reproduced: 131 reference images, including Webster's floor
plan, and the existing source manifests. Image bytes are preserved; Stanford's
filenames are normalized to 01.jpg through 32.jpg.
See photo removal requests if an image should be removed.
Generated frames, models, movies and local environments are ignored. New house photo folders stay local by default. Final media are published as release downloads.
python -m pytest -q
python -m ruff check .
python -m archviz.delivery houses/my_house/output --record
python -m archviz.delivery houses/my_house/output # verify + list cleanup candidates
python -m archviz.delivery houses/my_house/output --prune # keep only verified final/Put accepted artifacts in output/final/ before recording the inventory. The
checksum file is a record of accepted bytes, not proof that a model is accurate.
Never replace visual review with a green test suite.
Project code and documentation are MIT licensed. Reference photographs, listing floor plans, third-party assets, and media incorporating them retain their own rights; the code license does not relicense those files. See asset provenance and publishing.
Contributions should include a small reproducible example and evidence appropriate to the change. Start with CONTRIBUTING.md.