Skip to main content

Layout Boost API

roomix/layout-boost

Rearrange a room's existing furniture — same pieces, only moved — to gain usable space and better flow.

Starts from $0.039 /run
2 model optionspublicpublished

Wrapper Input

Input

Optional goals for the new layout, e.g. 'make space for a desk near the window'. When set, the replan is designed around these goals; when empty, the wrapper relocates 2 to 4 major pieces for better flow on its own.

External URL of the uploaded photo of a furnished room whose furniture should be rearranged.

Optional, advanced. A verified list of the room's movable pieces with counts and where each stands now, e.g. '1x grey three-seat sofa (left third of the frame, against the left wall); 1x oak coffee table (centre, in front of the sofa)'. When set, the model uses this list instead of inventorying the photo itself. Plain text; never forwarded to the base model as a field.

Optional, advanced. The concrete replan to execute: which pieces move and where each one goes, e.g. 'Move the grey sofa from the left wall to the centre of the frame, facing the window; move the coffee table with it'. When set, REPLAN executes exactly this plan instead of choosing moves on its own; goals in `prompt` still win on a conflict. Plain text; never forwarded to the base model as a field.

You need to be logged in to run this model and view results.
Log in

Wrapper Output

Output

Fill in the input form and click submit to see the output
Logs (1 lines)

Pricing

Base ModelPricing ModeEffective Cost
nano-banana-2/editdefaultmegapixel tieredTiered pricing
nano-bananaper output$0.039

Layout Boost API

Layout Boost is a image-to-image AI wrapper by roomix. On ModelRunner it runs through a REST API or via MCP from any AI assistant with pay-per-use pricing.

POST https://queue.modelrunner.run/roomix/layout-boost

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/roomix/layout-boost \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file_url": "https://example.com/input.jpg",
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/roomix/layout-boost/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/roomix/layout-boost/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("roomix/layout-boost", {
  input: {
    "file_url": "https://example.com/input.jpg"
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/roomix/layout-boost",
    headers=headers,
    json={
      "file_url": "https://example.com/input.jpg"
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

Input parameters of Layout Boost
NameTypeRequiredDescription
promptstringnoOptional goals for the new layout, e.g. 'make space for a desk near the window'. When set, the replan is designed around these goals; when empty, the wrapper relocates 2 to 4 major pieces for better flow on its own.
file_urlstring (uri)yesExternal URL of the uploaded photo of a furnished room whose furniture should be rearranged.
inventorystringnoOptional, advanced. A verified list of the room's movable pieces with counts and where each stands now, e.g. '1x grey three-seat sofa (left third of the frame, against the left wall); 1x oak coffee table (centre, in front of the sofa)'. When set, the model uses this list instead of inventorying the photo itself. Plain text; never forwarded to the base model as a field.
layout_planstringnoOptional, advanced. The concrete replan to execute: which pieces move and where each one goes, e.g. 'Move the grey sofa from the left wall to the centre of the frame, facing the window; move the coffee table with it'. When set, REPLAN executes exactly this plan instead of choosing moves on its own; goals in prompt still win on a conflict. Plain text; never forwarded to the base model as a field.

Machine-readable: OpenAPI schema · llms.txt

Use Layout Boost from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Layout Boost becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this wrapper with the run_model tool using the endpoint roomix/layout-boost.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run roomix/layout-boost on ModelRunner to generate image”. MCP setup guide.

Wrapper Details

Model Details

**Rearrange a room's existing furniture — the exact same pieces, only moved — to gain usable space and better traffic flow.**

Layout Boost takes a photo of a furnished room and replans the furniture arrangement for better space usage, circulation, and function. It is a layout tool, not a restyling tool: the result must contain the exact same furniture inventory as the input — same pieces, same colors, same materials, same count — with nothing added, nothing removed, and nothing restyled. Architecture stays untouched: walls, windows, doors, flooring, ceiling, camera angle, the view through windows, and wall/floor finishes are all preserved exactly, each on its original side of the frame (the wrapper explicitly forbids mirroring or flipping the photo to fake a new layout).

## Inputs

- `file_url` (required) — photo of a furnished room. The room should already contain the furniture you want rearranged; an empty room has nothing to move. - `prompt` (optional) — the user's goals for the new layout, e.g. `make space for a desk near the window` or `open up a play area in the middle of the room`. When set, the replan is designed around these goals as the top priority. When empty, the wrapper picks 2–4 major pieces (seating, tables, rug) and relocates them for a clearly better arrangement, leaving everything else exactly in place. - `inventory` (optional, advanced) — a verified list of the room's movable pieces with counts and where each one stands now, e.g. `1x grey three-seat sofa (left third of the frame, against the left wall); 1x oak coffee table (centre, in front of the sofa)`. The Roomix backend fills this from an image-understanding pass. When set, the model uses this list instead of inventorying the photo itself. - `layout_plan` (optional, advanced) — the concrete replan to execute: which pieces move and where each one goes. When set, REPLAN executes exactly this plan instead of choosing moves on its own; goals in `prompt` still win on a conflict. Both advanced slots are plain text, read only by the prompt template, and never forwarded to the base model as fields. Leave them empty to get the wrapper's own replan.

There are deliberately **no style, room-type, color, or creativity controls**: this wrapper must never restyle, recolor, or re-materialize anything, and it always aims for one clearly-better replan. If you want a redesign rather than a rearrangement, use `roomix/room-redesign` instead. (Legacy note: older clients may still send `creativity` / `creativity_level`; these fields are no longer part of the schema and are ignored.)

## How to use

1. Upload the room photo and pass its URL as `file_url`. 2. Optionally state a goal in `prompt`; the model prioritizes it while rearranging. 3. Runs are independent — one room photo per run. To explore layout options for the same room, run the **same original** `file_url` several times and compare. Do not feed one run's output into the next run as its input: chaining compounds drift away from the original furniture inventory.

## Known limitations

- On cluttered real-world rooms, small loose items (toys, decor) can occasionally be duplicated or dropped despite the inventory rules; re-run for a cleaner draw. - The output can drift slightly warmer than the source photo on some interiors.