AI Virtual Staging API — Furnish Empty Rooms Programmatically (2026)
A real estate photographer or listing platform often ends up with a folder of empty-room photos — a vacant rental, a new-build unit, a house after the sellers moved out — that show poorly compared to furnished listings. Traditional virtual staging services bill per room and typically take a day or more to turn around a batch, which doesn't work when a listing needs to go live the same day photos are shot. Submitting the room photo to an image API and getting a staged version back in seconds solves the turnaround problem; the harder question is which model keeps the room's actual architecture — walls, windows, flooring, ceiling height — unchanged while adding furniture that looks like it belongs there.
This guide covers model selection for staging an empty room without distorting its structure, a code pattern for submitting a room photo for staging, how to keep furniture style consistent across every room in a listing, and cost math for a full property.
Which Model Should I Use to Stage an Empty Room?
GPT-image-2's instruction-based editing is the right fit for staging because it edits the existing photo in place rather than regenerating the scene, which keeps walls, windows, and room proportions intact while adding the furniture described in the prompt. Nano Banana Pro's reference-guided mode is the better choice when a listing needs the same furniture set — the same sofa, the same dining table — to appear consistently across multiple rooms, since it can lock onto a reference image of the furniture style.
| Model | Mode | Price per room | Preserves room structure | Cross-room consistency |
|---|---|---|---|---|
| GPT-image-2 | Instruction-based edit | $0.014/pic | Strong — edits in place | Moderate — style can drift room to room |
| Nano Banana Pro | Reference-guided generation | $0.030 (1K/2K) | Strong when prompted to retain layout | Strong — reference image locks style |
| Nano Banana 2 | Text-to-image / edit | $0.020 (1K) | Weaker — more prone to redrawing the room | Weak |
Definition: virtual staging is the process of digitally adding furniture and decor to a photo of an empty room so it reads as a lived-in space, without a physical staging crew or furniture rental.
For a single room or a quick turnaround on a handful of listings, GPT-image-2's edit endpoint is the simplest path. For a full property where every room needs to look like it belongs to the same design scheme, use Nano Banana Pro with a reference furniture image.
How Do I Submit an Empty Room Photo for Staging?
Send the room photo as image_url with an instruction describing the furniture and style — GPT-image-2 edits the photo directly instead of generating a new scene.
import requests
API_KEY = "YOUR_GENRELAY_KEY"
BASE_URL = "https://genrelay.ai/v1"
def stage_room(image_url, room_type, style):
r = requests.post(
f"{BASE_URL}/images/edits",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "gpt-image-2",
"image_url": image_url,
"prompt": (
f"Add {style} furniture appropriate for a {room_type}: keep the "
"existing walls, windows, flooring, and ceiling exactly as shown, "
"only add furnishings and decor, realistic scale and shadows"
),
},
timeout=60,
)
return r.json()
result = stage_room(
"https://cdn.example.com/listing-42/living-room-empty.jpg",
"living room",
"mid-century modern",
)
print(result["data"][0]["url"])
Keeping the instruction explicit about what not to change — walls, windows, flooring — matters more for staging than for most other edit use cases, since the room's actual dimensions are what a buyer is evaluating.
How Do I Keep Furniture Style Consistent Across an Entire Listing?
Generate one reference image of the target furniture style, then pass it into Nano Banana Pro's reference-guided mode for every room in the property so the sofa, palette, and decor read as one coherent staging job rather than a different style per room.
import requests
from concurrent.futures import ThreadPoolExecutor
REFERENCE_IMAGE = "https://cdn.example.com/style-refs/mid-century-set.jpg"
ROOMS = {
"living_room": "https://cdn.example.com/listing-42/living-room-empty.jpg",
"primary_bedroom": "https://cdn.example.com/listing-42/bedroom-empty.jpg",
"dining_room": "https://cdn.example.com/listing-42/dining-empty.jpg",
}
def stage_with_reference(room_name, room_image_url):
r = requests.post(
f"{BASE_URL}/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "nano-banana-pro",
"prompt": (
"Stage this empty room using the furniture style, color palette, "
"and material choices from the reference image, keep the room's "
"existing architecture unchanged"
),
"reference_images": [REFERENCE_IMAGE, room_image_url],
"resolution": "2K",
},
timeout=60,
)
return room_name, r.json()
with ThreadPoolExecutor(max_workers=3) as pool:
results = dict(pool.map(lambda kv: stage_with_reference(*kv), ROOMS.items()))
for room, data in results.items():
print(room, data.get("data", [{}])[0].get("url"))
See the visual consistency guide for more on reference-guided patterns when a batch needs to share a single visual identity.
What Does Staging a Full Listing Cost?
As of September 2026, GenRelay pricing per image: GPT-image-2 $0.014/pic, Nano Banana Pro $0.030 at 1K/2K resolution.
An 8-room listing staged entirely through GPT-image-2 edits costs 8 × $0.014 = $0.112. The same listing staged with Nano Banana Pro for cross-room consistency at 2K costs 8 × $0.030 = $0.24. A common middle path — Nano Banana Pro for the two or three hero rooms (living room, kitchen, primary bedroom) shown first in the listing, GPT-image-2 for the remaining secondary rooms — runs (3 × $0.030) + (5 × $0.014) = $0.16 per listing.
| Approach | Composition | Cost per 8-room listing |
|---|---|---|
| All rooms via GPT-image-2 | 8 × edit | $0.112 |
| All rooms via Nano Banana Pro (2K) | 8 × reference-guided | $0.24 |
| Hybrid (hero rooms + secondary) | 3 × Nano Banana Pro + 5 × GPT-image-2 | $0.16 |
Running this across 50 listings a month, the hybrid approach costs roughly $8 in generation calls — a small line item next to the turnaround-time savings of staging in seconds rather than waiting on a staging vendor's queue.
Internal Links
- GPT-image-2 on GenRelay
- Nano Banana Pro on GenRelay
- AI image editing API guide
- How to maintain visual consistency in AI-generated images
FAQ
Will the API change the room's actual dimensions or layout?
GPT-image-2's edit mode is designed to modify the existing photo rather than regenerate it, so an explicit instruction to keep walls, windows, and flooring unchanged is generally respected. Always review output against the original photo before publishing, since edit fidelity can vary with more cluttered source images.
Can I stage the same room in multiple furniture styles for A/B testing?
Yes — re-run the same room photo with different style prompts (e.g. "mid-century modern" vs "Scandinavian minimalist") and compare listing performance. Each variant is billed as a separate generation.
Does virtual staging output need a disclosure on the listing?
Many listing platforms and jurisdictions require disclosure that staging is virtual rather than physical. Check the requirements for your specific MLS or listing platform — this is a policy question independent of which API generates the image.
Can I stage a room from a phone photo, or does it need to be professionally shot?
The edit and reference-guided endpoints work on any reasonably lit, in-focus photo. Professional photography produces cleaner staging output, but a well-lit phone photo is generally sufficient for the model to add furniture convincingly.
How do I batch-process an entire property portfolio?
Use the same ThreadPoolExecutor batch pattern shown above across all listings, keeping concurrent requests in the 3-5 range — see the rate limits and quotas guide for the general concurrency approach, which applies to image endpoints as well.
As of September 2026. Pricing subject to change — verify current rates at genrelay.ai.