Roomet

Roomet

上传一张房间照片,选择一种风格,AI 将重新构想这个空间。生成三种变体,挑选一个,然后逐件家具进行编辑,直到它完全符合你的心意。

类型
网站
角色
独立开发
Status
进行中
Tech
Next.js 15 React 19 TypeScript Tailwind v4 FastAPI Gemini 3 Pro Image YOLO-World arq / Redis Supabase PostgreSQL
Started
2026年2月

将 Roomet 对准一张房间照片,它会根据你选择的风格,返回三种 AI 生成的重设计方案。挑选一个,然后继续逐件家具进行编辑——更换沙发、换掉地毯、重新粉刷墙壁——直到你得到理想中的房间。每个版本都会被追踪,你随时可以回退。

功能简介

Roomet 生成的房间变体——根据用户照片渲染出的风格化客厅

上传左侧的照片,描述想要的氛围,Roomet 会给出下面三种变体。每一种都是完全重新渲染的场景,保留了房间的骨架(窗户、门道、平面布局),但让风格、家具和配色方案随提示词自由发挥。

变体 1变体 2变体 3

前后对比

输入始终是真实的照片——手机拍摄、光线杂乱、角度倾斜,都没关系。Roomet 能处理这些,因为繁重的任务由 Gemini 3 Pro Image 承担。

用户提供的原始照片——Roomet 处理前的普通房间

这是同一房间经过 Roomet 初次处理后的效果,在实际 UI 中有一个可拖动的“前后”滑块:

前后对比 1前后对比 2

应用界面

整个体验由三个界面承载:一个着陆页、创建/配置流程和编辑器。

Roomet 着陆页创建流程——上传 + 风格选择器编辑器——家具级编辑

用户流程

Roomet 用户流程图:上传 → 配置 → 生成 → 选择 → 编辑 → 导出

/create 路由引导你完成:上传 → 配置 → 观看闪烁动画 → 从三个变体中选择一个。选择一个变体会跳转到 /edit/[variantId],真正的交互在这里发生。

家具级编辑

编辑器是产品的核心。将鼠标悬停在任何一件家具上,SegmentOverlay 会高亮显示它(后端使用 YOLO-World + Gemini 分割);点击选中它,底部的工具栏会变成一个针对该家具的提示词输入框。输入“把这个沙发换成奶油色亚麻布”,只有那个沙发会改变,房间的其余部分保持不变。

如果未选中任何物品,你的提示词将应用于整个场景。

版本历史

Roomet 编辑历史——显示每次编辑的缩略图水平条,点击可回滚

每次编辑都会产生一个新版本,在编辑器底部显示为缩略图条。点击任何旧版本即可回滚,而不会丢失之后的版本——历史记录是一个有向无环图,而非线性的撤销栈。这足以让你放心大胆地尝试。

灵感画廊

Roomet 参考画廊——按风格标签分组的精选房间

一个独立的画廊信息流会推送按风格标签分组的精选参考房间。点击一个即可将其风格复制到你自己的房间上。

架构

前端 (Next.js 15, React 19, TypeScript, Tailwind v4):

  • 使用 App Router,包含四个顶级路由://create/edit/[variantId]/scene/[id](旧版重定向)
  • 用于分割的 Canvas 覆盖层 (SegmentOverlay.tsx) 处理边界框命中测试和遮罩高亮
  • BeforeAfterSliderStyleCardPillSelectorProductQueries 构成了 UI 的其余部分
  • API 客户端通过 lib/api.ts 中的 pollJob() 轮询后端以获取长时间运行的任务状态
  • Next.js 重写代理将 /api/*/uploads/* 路由到本地 FastAPI 后端,因此浏览器从不直接与 Gemini 通信

后端 (FastAPI + Gemini + arq):

  • FastAPI API,包含场景、变体、任务、画廊和分割的端点
  • 繁重的生成任务在 arq workers(基于 Redis 的任务队列)中运行,以保持 HTTP 响应迅速;当 Redis 不可用时,优雅地回退到 Python 线程
  • 使用 Gemini 3 Pro Image 进行生成和修复式编辑;使用 YOLO-World 进行按需家具分割
  • 使用 SQLAlchemy 连接 Supabase PostgreSQL——连接池、版本化变体历史、任务状态
  • 两层图像缓存:前端是 Redis(24 小时 TTL),API 实例上是内存 LRU(约 20 个槽位)
  • 基于聊天会话的 Gemini 调用,因此对同一变体的多轮编辑能保持上下文感知

亮点

  • 家具感知编辑——分割 + 修复技术让你可以一次编辑一个物体,而不是每次更改都重新生成整个图像。这是让 Roomet 感觉像一个工具而非老虎机的关键区别。
  • 默认生成三种变体——一次生成调用产生三种风格不同的方案,让你从一个真正的菜单中挑选,而不是“不断重试直到满意”。
  • 版本有向无环图,而非线性撤销——每次编辑都从其父版本分支出来。你总是可以回滚并选择不同的方向,而不会丢失已经探索过的时间线。
  • 智能后端回退机制——没有 Redis?使用线程 worker。Gemini 被限速?指数退避重试。YOLO-World 模型未加载?在首次分割请求时惰性加载。