Forma
Forma is an AI room planner that lets you design your space through conversation.
Core trick
Builds an editable 3D room from photos and one known measurement, then generates movable furniture meshes from text prompts.
Description
Forma is an AI room planner that lets you design your space through conversation. Upload room photos, provide one known measurement, and create an editable 3D room. Bring in furniture from product links or photos, or describe an original piece and watch it appear in your room.
The core experience is simple: type “create a wooden chair” or “add a warm table lamp,” and Astra generates a movable 3D object with geometry, materials, and lighting. Arrange pieces, compare finishes, and walk through the room to explore your ideas.
README excerpt
# Forma — retailer furniture in your room A local Next.js app for creating an editable room shell from photos, keeping a furniture collection, and arranging it manually or with Astra. Imported product links and your own furniture photos can generate movable 3D approximations. Meshy is an optional textured-mesh provider. See [project.md](project.md) for the agent handoff and verified status. ## Start Requires Node.js 22 or newer. ```sh npm install cp .env.example .env.local # Set OPENAI_API_KEY for Astra import review and 3D generation. # FIRECRAWL_API_KEY and MESHY_API_KEY are optional. npm run dev ``` Open http://127.0.0.1:3000. The server binds to the local machine only. Skip the copy if `.env.local` already exists. Never commit this file. The app reads it on each API request; use **Service connections → Refresh connections** after adding keys. ## Room workflow Use the room chat on port 3000 to **Add a lamp** or **Create a wooden chair**. Explicit new-piece requests go straight to original asset generation, without the full-room planning step. `POST /api/originals` starts one validated asset job; `GET /api/originals/:id` resumes that same job. Jobs persist in `.cache/originals`. This path uses Astra with low reasoning effort for latency; materials, geometry, and optional local lights are returned together and validated before placement. Up to three original pieces generate concurrently. Send another request while one runs, or write **Add a lamp and a small wooden t