Doop
Doop is an open-source multiplayer design canvas and design MCP for Claude Code, Codex, and any AI agent. Design side by side with agents — free in beta.
My dorm room rebuilt in Blender from sixteen photographs. Walk around it in 3D or look at the Cycles renders.
DesignPython · JavaScriptGitHub @appleweipingOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
My dorm room rebuilt in Blender from 16 phone photos, with Cycles renders and a 3D viewer that runs in the browser.
Taken from the repository README
Loading the full README.
Read the full README ↗My dorm room rebuilt in Blender from 16 phone photos, with Cycles renders and a 3D viewer that runs in the browser.
Open the 3D viewer · Downloads · 中文说明
| Kitchen and entrance | Desk | Cutaway overview |
|---|---|---|
All four images are Blender Cycles renders at 1600 × 1200 with 64 samples. None of them is a photo.
I wanted to see how close I could get to a real, lived-in room by modelling it by hand from ordinary photos: no laser scanner and no photogrammetry mesh. The result had to stay editable. Every cabinet door, cable, snack bag and folded jacket is a separate named Blender object, created by Python scripts that rebuild the whole scene from nothing.
scene/room.blend: the editable scene (v1) with all textures packed. Opens in Blender 4.5 LTS.renders/: the four Cycles renders above.demo/: the Three.js viewer, hosted on GitHub Pages. You can orbit the whole room with the near walls cut away, jump to the bedroom, kitchen and desk cameras, and change the light and exposure. It loads a 6 MB compressed model. The full 42 MB room.glb is on the v1.0.0 release.scripts/: build_scene.py and about 40 modules it calls (geometry, materials, lights, cameras), plus render.py, check_assets.py and the web-model compressor.assets/: textures. They are CC0 wood from Poly Haven, patterns drawn by script, surfaces sampled from my photos, and a few AI-generated prints for the bedding, the pillowcase and one oak veneer (AI_TEXTURES.md). assets/README.md says where each texture came from.build_scene.py builds the walls, the window and its blind slats, the bed frame and its bolts, the wardrobe and dresser (with rails, stiles and bevels), the kitchenette, the microwave, the coil burners, the sink basin, the bedding and the clutter. It uses a fixed random seed, so every run gives the same scene. My photos are not needed to rebuild it.render-stats.json).The .blend, the four renders and the web model in this repository are v1 (September 2026). After v1 I kept refining in the source: the calibrated layout, wood sampled from photos, better bedding, desk items and package prints. The last full build of that work, "r10", is attached to the v1.1.0-closeout release as a 161 MB .blend. Running build_scene.py on the current main builds this later revision, not v1. Two r10 preview renders (800 × 600, 32 samples):
| Desk (r10) | Dresser and bed (r10) |
|---|---|
It still looks like CG up close. The folded duvet, the pile of clothes, the backpack's shape, the transparent plastic and some of the lighting and colour are clearly off compared with the photos. The room's size is estimated. The browser viewer uses its own lights and tone mapping, so it looks flatter than the Cycles renders. I stopped iterating at r10 because each further round cost a lot of time for small gains.
Why not photogrammetry or Gaussian splats? A phone scan (Polycam, RealityScan) or a splat would look more photographic for far less work. But the result is one fused mesh or a point cloud: you can't open the wardrobe, move the suitcase or relight the room. Making the scene editable was the point of this project.
Viewer (Node 20.19+ or 22.12+):
git clone https://github.com/appleweiping/room-replica.git
cd room-replica/demo
npm ci
npm run dev # http://127.0.0.1:5173
Rebuild the scene (Blender 4.5 LTS, no extra Python packages):
blender --background --python-exit-code 1 --python scripts/build_scene.py -- --render none
blender --background scene/room.blend --python-exit-code 1 --python scripts/render.py -- \
--view all --resolution 1600 --samples 64
build_scene.py writes scene/room.blend and the full scene/room.glb. Rendering all four views overwrites renders/ and took about an hour on my laptop. cd scripts/web-model && npm install && npm run build regenerates the compressed web model.
Checks (no Blender needed, these run in CI):
python -m unittest discover -s tests
python scripts/check_assets.py # renders, demo copies, web model, manifest
The original photos are not in the repository. The laptop and tablet screens and the door notice show generic graphics, not what was really there.
The code is MIT (LICENSE). The Poly Haven textures are CC0, and assets/README.md lists their sources. My original photos are not in the repository and are not licensed. The textures sampled from them (four folders under assets/textures/, listed in the same file) are not covered by MIT or CC0, and any product artwork or trademarks they show belong to their owners.
这是我按 16 张手机照片在 Blender 里手工参数化重建的宿舍房间。所有家具、杂物和织物都是可编辑的独立对象,由 Python 脚本从零生成。仓库里的 scene/room.blend、四张 Cycles 渲染图和网页模型是 v1 版本。之后的多视角标定和材质改进在源码里,最后一次完整构建(r10)在 v1.1.0-closeout Release 中下载。唯一的实测尺寸是标准 Twin XL 床垫(36 × 80 英寸),其余尺寸都是按照片估算的。床品褶皱、衣物堆和背包等细节仍然能看出是 CG。在线三维浏览:https://appleweiping.github.io/room-replica/