AI staging & render editing for interior-design and archviz studios. Snap a room photo or drop in a CAD render, run one-click directed edits β restyle, material swap, furnish, declutter, relight, upscale, walkthrough video β and package the variants for a client. Built with React + Tailwind CSS + Hono + D1. Deploys to Cloudflare Workers via Clawnify.
An open-source, self-hostable alternative to Collov / InteriorAI β with three differences that matter:
- Runs on one key. Nano Banana / Gemini image and async video generation both go through your own OpenRouter key β no per-image subscription tax, no second provider to configure. (A
FAL_API_KEYis optional and only upgrades Enhance & Upscale.) - Agent-native β every tool is also a callable action in the OpenAPI spec, so it works from a chat channel (snap a room in WhatsApp β variants back), not just a web app.
- Grounded, not hallucinated β every edit keeps the room's architecture, camera, and proportions fixed and changes only the one thing named. Tools that touch geometry return an honest note: verify dimensions in your CAD tool. This stays a post/ideation layer, not a fake CAD.
Each tool is a preset directed edit against the source image. Add one by adding an entry to src/server/tools.ts β it appears in the UI grid and the agent API automatically.
| Tool | What it does |
|---|---|
| Restyle | Re-imagine the same room in a chosen aesthetic (Scandinavian, Japandi, β¦) |
| Material / Finish Swap | Change one surface β floor, walls, cabinetry, countertops |
| Add Furniture | Stage an empty room in a style; point it at your own catalogue |
| Furniture Eraser / Declutter | Empty the room or just remove clutter |
| Renovation Before β After | Visualise a renovation from a plain-language brief |
| Relight / Twilight | Change time of day and mood without a re-render |
| Enhance & Upscale | Portfolio-quality sharpen + upscale (fal SeedVR when a FAL key is set, else an OpenRouter enhance pass) |
| Walkthrough Video | Animate a still into a cinematic clip β async via OpenRouter's video API (Wan / Veo) |
git clone https://github.com/clawnify/open-render-studio.git
cd open-render-studio
pnpm installCreate a .dev.vars file with your OpenRouter API key:
OPENROUTER_API_KEY=your-key-here
# optional β enables Enhance/Upscale + Walkthrough Video:
# FAL_API_KEY=your-fal-key-here
Start the dev server:
pnpm devOpen http://localhost:5173. The database schema is applied automatically on startup.
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript, Tailwind CSS v4, Vite |
| Backend | Hono (Cloudflare Worker) + @hono/zod-openapi |
| Database | D1 (SQLite at the edge) via @clawnify/db |
| Storage | R2 (source + result images/video) |
| AI | OpenRouter β Nano Banana / Gemini image edits + async video (/api/v1/videos); fal.ai optional (upscale quality) |
- Node.js 20+, pnpm
- OpenRouter API key (required)
- fal.ai key (optional β only upgrades Enhance & Upscale)
schema.sql β Canonical schema (projects, renders, assets)
src/
server/
index.ts β Hono API; runRender() is the single execution path
tools.ts β Directed-edit tool registry (UI + agent + prompts)
image.ts β Provider engine: editImage / upscaleImage / startVideo + pollVideo
db.ts β D1 adapter (@clawnify/db)
uploads.ts β R2 storage adapter
client/
app.tsx β Upload β tool grid β param panel β variants
api.ts β Typed API client
Human/UI routes are under /api/*. Agent-callable routes are in the OpenAPI spec at /openapi.json:
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/tools |
List directed-edit tools + their inputs |
| POST | /api/v1/render |
Run a tool on a source image. Image edits return done; video returns pending |
| GET | /api/v1/renders/:id |
Poll a render β advances a pending async video to done/error |
| GET | /api/tools |
Same tool list (UI) |
| POST | /api/render |
Run a tool (UI) |
| GET | /api/renders/:id |
Poll a render (UI) |
| GET/POST | /api/projects |
Projects (a client engagement / room) |
| GET | /api/projects/:id/renders |
Variants for a project |
| GET/POST | /api/assets |
Studio's own furniture / style / material library |
| POST | /api/uploads |
Upload an image |
schema.sql at the project root is the canonical schema for fresh deployments β edit it directly to add tables or columns. On a fresh deploy, Clawnify applies it once and records a baseline; deployed instances then evolve via auto-generated migration files. Don't hand-edit schema.sql inside a deployed instance (there it's an auto-regenerated snapshot).
npx clawnify deployMIT
