Skip to main content

Restyle the Floor API

roomix/floor-restyle

Replace the flooring in a room photo — material, tone, finish, lay pattern, and rug — with the furniture and architecture untouched.

Starts from $0.039 /run
2 model optionspublicpublished

Wrapper Input

Input

What happens to area rugs. Adding one never moves the furniture — the rug goes underneath it.

How light or dark the material reads. The same oak looks completely different across these.

Surface sheen, which drives how much of the room's light the floor reflects.

Optional extra notes, e.g. 'wide planks running toward the window' or 'leave the tiled entry as it is'.

How the material is laid. Independent of 'material', so oak can be straight planks or herringbone.

External URL of the uploaded photo of the room whose floor should be replaced.

Material for the new floor. 'auto' lets the wrapper pick one that suits the room. Ignored when 'custom_material' is set.

Free-text description of a flooring material not in the list, e.g. 'reclaimed barnwood with visible saw marks', 'green marble with gold veining', or 'sage green painted floorboards'. When set it overrides 'material'. This is also how you reach a stained or painted floor in a specific color — there is deliberately no separate color field, because a floor's color comes from its material and tone.

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 output0.039

Restyle the Floor API

Restyle the Floor 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/floor-restyle

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/floor-restyle \
  -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/floor-restyle/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/roomix/floor-restyle/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

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

const result = await modelrunner.subscribe("roomix/floor-restyle", {
  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/floor-restyle",
    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

NameTypeRequiredDescription
rugenumnoWhat happens to area rugs. Adding one never moves the furniture — the rug goes underneath it. Default: "keep".
toneenumnoHow light or dark the material reads. The same oak looks completely different across these. Default: "auto".
finishenumnoSurface sheen, which drives how much of the room's light the floor reflects. Default: "auto".
promptstringnoOptional extra notes, e.g. 'wide planks running toward the window' or 'leave the tiled entry as it is'.
patternenumnoHow the material is laid. Independent of 'material', so oak can be straight planks or herringbone. Default: "auto".
file_urlstring (uri)yesExternal URL of the uploaded photo of the room whose floor should be replaced.
materialenumnoMaterial for the new floor. 'auto' lets the wrapper pick one that suits the room. Ignored when 'custom_material' is set. Default: "auto".
custom_materialstringnoFree-text description of a flooring material not in the list, e.g. 'reclaimed barnwood with visible saw marks', 'green marble with gold veining', or 'sage green painted floorboards'. When set it overrides 'material'. This is also how you reach a stained or painted floor in a specific color — there is deliberately no separate color field, because a floor's color comes from its material and tone.

Machine-readable: OpenAPI schema · llms.txt

Use Restyle the Floor from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Restyle the Floor 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/floor-restyle.

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/floor-restyle on ModelRunner to generate image”. MCP setup guide.

Wrapper Details

Model Details

**Replace the flooring in a room photo — new material, tone, finish, and lay pattern, everything else untouched.**

Restyle the Floor takes a photo of a real room and relays its floor in a chosen material. It is a surface tool, not a redesign tool: the furniture stays exactly where it is (with correct contact shadows — legs sit *on* the new floor), and the walls, wall color, ceiling, doors, windows, trim, camera angle, and framing all come back as they were. Plank and tile direction follows the room's real vanishing lines and runs continuously under furniture and through doorways. The wrapper explicitly forbids mirroring or flipping the photo to fake a change.

## Inputs

- `file_url` (required) — photo of the room whose floor should be replaced. - `material` — one of 19 flooring materials (hardwoods, tile, stone, terrazzo, concrete, carpet, natural fibre). `auto` lets the wrapper pick one that suits the room. - `custom_material` (optional) — free text for anything outside the list, e.g. `reclaimed barnwood with visible saw marks` or `sage green painted floorboards`. **Overrides** `material`. There is deliberately no separate color field: a floor's color comes from its material and `tone`, and a stained or painted floor is best described here in full. - `tone` — `light`, `medium`, or `dark`. The same oak reads completely differently across these, and this is the main color control. - `finish` — `matte`, `satin`, `gloss`, or `textured`. Drives how much the floor reflects the room's light. - `pattern` — how the material is laid: `straight-plank`, `herringbone`, `chevron`, `large-format`, `hexagon`, `checkerboard`, or `basketweave`. Independent of `material`, so oak can be planks or herringbone. - `rug` — what happens to area rugs: `keep` (default), `remove`, or add one (`add-neutral`, `add-patterned`, `add-vintage`). Adding a rug never moves the furniture; the rug goes underneath. - `prompt` (optional) — extra notes, e.g. `wide planks running toward the window` or `leave the tiled entry as it is`.

## How to use

1. Upload the room photo and pass its URL as `file_url`. 2. Set `material`, then refine with `tone`, `finish`, and `pattern` — together they are what make one wood read as pale Scandinavian oak and another as dark walnut herringbone. 3. Use `rug` to stage the floor, and `prompt` for anything the enums can't say. 4. Runs are independent — one room photo per run. To compare flooring options for the same room, run the **same original** `file_url` once per option and compare. Do not feed one run's output into the next run: chaining compounds drift away from the original room.

## Known limitations

- Rooms where the floor is almost entirely hidden by furniture give the model little to work with; the visible strips may read flatter than a full replacement. - High-gloss finishes in bright rooms can pick up stronger reflections than a real floor would; drop to `satin` if the result looks wet.