HiAPI
블로그

튜토리얼

가상 스테이징 API: AI로 빈 방 사진을 스테이징된 매물 사진으로 바꾸기

실제 생성 전후 비교 이미지, 정확한 프롬프트, 배치 스크립트, 검증된 가격을 포함한 재현 가능한 이미지-투-이미지 워크플로

Sep 23, 2026
가상 스테이징 API: AI로 빈 방 사진을 스테이징된 매물 사진으로 바꾸기

빈 매물 사진은 가구가 배치된 사진만큼 구매자에게 많은 정보를 전달하지 못합니다. 실제 스테이징은 이 문제를 해결하지만, 유닛마다 실비가 들고 예약 일정을 잡는 데 며칠이 걸립니다. 이미지-투-이미지 API는 빈 방 사진 한 장만으로 같은 작업을 수행할 수 있습니다. 실제 방의 벽, 바닥, 창문, 카메라 각도를 그대로 유지하면서 주변에 가구를 추가합니다.

이 가이드는 표준 모델 ID gpt-image-2/image-to-image로 이 워크플로를 끝까지 진행하며, POST https://api.hiapi.ai/v1/tasks를 통해 호출합니다. 이 가이드를 위해 생성된 두 세트의 실제 전후 비교 이미지(거실과 침실), 각각의 정확한 프롬프트, 재사용 가능한 배치 스크립트, 검증된 가격을 포함합니다.

이미지-투-이미지 스테이징이 방을 사실적으로 유지하는 방법

텍스트-투-이미지 생성은 설명에 따라 방을 처음부터 창조합니다. 출력물이 구매자가 실제로 들어갈 유닛과 일치해야 하므로 스테이징에는 적합하지 않습니다. 이미지-투-이미지 생성은 빈 방 사진을 참조로 사용하여 편집하므로 방의 실제 기하학적 구조가 유지됩니다.

요청은 두 부분으로 구성됩니다. 변경해야 할 내용만 설명하는 prompt(추가할 가구와 장식), 그리고 참조 사진이 담긴 input_urls 배열—공개 URL에 호스팅된 빈 방 사진—입니다. 모델은 참조 이미지를 읽고 카메라 각도, 벽, 바닥, 창문을 그대로 유지하면서 마치 그 정확한 방에 놓인 것처럼 가구를 장면에 렌더링합니다.

POST https://api.hiapi.ai/v1/tasks
{
  "model": "gpt-image-2/image-to-image",
  "input": {
    "prompt": "<furniture and decor to add, plus an instruction to keep the room unchanged>",
    "input_urls": ["<public URL of the empty-room photo>"],
    "aspect_ratio": "16:9",
    "resolution": "1K"
  }
}

이 단일한 설계 선택—참조를 입력하고 편집물을 출력—이 바로 가상 스테이징과 일반적인 방 생성을 구분하는 지점입니다. 아래 두 예시는 실제 미데코레이션 빈 거실 사진과 빈 침실 사진에서 이를 보여줍니다.

전후 비교: 거실

A professionally lit real estate photograph of a completely empty living room in
a modern apartment: light oak hardwood floors, plain white walls, one large
window with soft daylight, closed white door on the right wall, ceiling with a
single flush-mount light fixture, no furniture, no people, no text or
watermarks, wide-angle real estate listing photography style, sharp focus,
natural color grading.

첫 번째 이미지는 참조 사진으로, gpt-image-2/text-to-image로 생성하여 실제 빈 유닛의 매물 사진을 대체한 것입니다(종횡비 16:9, 해상도 1K, 기록 비용 $0.03, 2026-09-23 생성). 실제 운영 워크플로에서는 이것이 곧 중개인이 직접 업로드한 사진입니다. 빈 방 사진의 출처가 무엇이든 아래 스테이징 단계는 동일하게 작동합니다.

Using the empty room in the reference photo, keep the exact room geometry,
floor, walls, window, and door unchanged, and add tasteful modern furniture to
stage it as a livable listing photo: a light gray fabric sofa with two throw
pillows, a round wooden coffee table, a neutral area rug, a floor lamp in the
corner, and a piece of abstract wall art above the sofa. Keep the camera angle
and lighting identical to the reference photo. No people, no text or
watermarks, real estate listing photography style.

증거: 모델 gpt-image-2/image-to-image, input_urls는 위의 빈 방 사진으로 설정, aspect_ratio: 16:9, resolution: 1K, 기록 비용 $0.03, 2026-09-23 생성. 창문 위치, 오른쪽 벽의 문, 바닥과 벽의 색조가 모두 참조 사진에서 이어졌으며 가구만 새로 추가되었습니다.

전후 비교: 침실

A professionally lit real estate photograph of a completely empty bedroom in a
modern apartment: light oak hardwood floors, plain white walls, one window with
sheer curtains letting in soft daylight, a closet with sliding white doors on
one wall, ceiling with a single flush-mount light fixture, no furniture, no
people, no text or watermarks, wide-angle real estate listing photography
style, sharp focus, natural color grading.

Using the empty room in the reference photo, keep the exact room geometry,
floor, walls, window, and closet doors unchanged, and add tasteful modern
furniture to stage it as a livable listing photo: a queen-size bed with a light
gray upholstered headboard and neutral bedding, two matching nightstands with
small lamps, a folded throw blanket at the foot of the bed, and a framed piece
of wall art above the headboard. Keep the camera angle and lighting identical to
the reference photo. No people, no text or watermarks, real estate listing
photography style.

증거: 모델 gpt-image-2/image-to-image, input_urls는 위의 빈 침실 사진으로 설정, aspect_ratio: 16:9, resolution: 1K, 기록 비용 $0.03, 2026-09-23 생성. 슬라이딩 옷장 문과 창문 위치는 그대로 유지되었고 침대, 협탁, 벽걸이 그림만 추가되었습니다.

두 스테이징 출력 모두 매번 세 부분으로 구성된 프롬프트 구조에서 나왔습니다. 참조 방을 보존하라는 지시, 구체적인 가구 목록, 사진 스타일 태그입니다. 보존 지시를 생략하는 것이 이런 작업에서 가장 흔한 실수입니다. 그것이 없으면 모델이 참조 이미지를 더 느슨하게 다루어 카메라 각도나 방 비율이 바뀔 수 있습니다.

작업 API로 스테이징 작업 일괄 실행하기

단일 매물은 대개 한 개 이상의 방을 스테이징해야 하고, 중개 회사는 많은 매물을 처리해야 합니다. 아래 스크립트는 빈 방 사진 URL 딕셔너리를 받아 각 URL에 대해 스테이징 작업을 제출하고 모든 출력이 준비될 때까지 폴링합니다.

import os
import time
import requests

API_URL = "https://api.hiapi.ai/v1/tasks"
HEADERS = {
    "Authorization": f"Bearer {os.environ['HIAPI_TOKEN']}",
    "Content-Type": "application/json",
}

STAGING_BRIEF = (
    "keep the exact room geometry, floor, walls, and window unchanged, and add "
    "tasteful modern furniture to stage it as a livable listing photo, real "
    "estate listing photography style, no people, no text or watermarks"
)

# name -> public URL of the empty-room photo
ROOMS = {
    "unit-204-living-room": "https://your-storage.example.com/unit-204-living-room.jpg",
    "unit-204-bedroom": "https://your-storage.example.com/unit-204-bedroom.jpg",
}


def submit_staging_job(empty_room_url, aspect_ratio="16:9", resolution="1K"):
    response = requests.post(
        API_URL,
        headers=HEADERS,
        json={
            "model": "gpt-image-2/image-to-image",
            "input": {
                "prompt": STAGING_BRIEF,
                "input_urls": [empty_room_url],
                "aspect_ratio": aspect_ratio,
                "resolution": resolution,
            },
        },
        timeout=60,
    )
    response.raise_for_status()
    return response.json()["data"]["taskId"]


def wait_for_output(task_id, timeout_s=300, poll_interval=5):
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = requests.get(f"{API_URL}/{task_id}", headers=HEADERS, timeout=30)
        r.raise_for_status()
        task = r.json()["data"]
        if task["status"] == "success":
            return task["output"][0]["url"]  # expires — download immediately
        if task["status"] == "fail":
            raise RuntimeError(task["error"])
        time.sleep(poll_interval)
    raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")


task_ids = {name: submit_staging_job(url) for name, url in ROOMS.items()}
staged_urls = {name: wait_for_output(tid) for name, tid in task_ids.items()}
print(staged_urls)

실제 배치 처리에서는 두 가지 세부 사항이 중요합니다. 첫째, input_urls는 작업마다 참조 사진 한 장을 받습니다. 여러 방을 하나의 요청에 합치려 하지 말고 한 번 호출에 한 방을 스테이징하세요. 둘째, 응답의 각 output[0].url은 제한 시간이 있는 링크입니다. 작업이 성공하면 즉시 바이트를 다운로드하여 자체 스토리지 버킷에 저장하세요. 이 가이드도 출력물을 곧바로 영구 저장소에 업로드한 것과 같습니다.

스테이징 배치의 가격 책정

gpt-image-2/image-to-image는 출력 해상도에 따라 가격이 책정되며, 2026-09-23에 HiAPI의 실시간 가격 엔드포인트와 대조하여 검증했습니다.

해상도 스테이징 이미지당 가격
1K $0.03
2K $0.04
4K $0.06

계획 공식은 다음과 같습니다.

batch cost = units × rooms staged per unit × price per image

표의 1K 가격을 사용하면:

매물 배치 유닛당 방 수 스테이징 이미지 수 배치 비용
유닛 1개 3 3 $0.09
유닛 10개 3 30 $0.90
유닛 50개 4 200 $6.00
유닛 200개 4 800 $24.00

가격은 변동되므로 대규모로 약정하기 전에 실시간 가격 페이지를 확인하고, 자체 검수 통과율에 따라 재생성 여유분을 추가하세요. 이 가이드의 두 예시는 일반적인 1차 통과율을 대표하지 않습니다.

가상 스테이징이 할 수 없는 일

이미지-투-이미지 스테이징은 실제 유닛이 아니라 픽셀을 편집합니다. 매물 워크플로에 적용하기 전에 세 가지 제한 사항을 기억하세요.

  • 방을 수리할 수 없습니다. 참조 사진의 손상, 곰팡이, 구조적 문제는 편집으로 없애서는 안 되며, 스테이징된 사진이 유닛의 실제 상태를 왜곡해서도 안 됩니다.
  • 픽셀 단위로 완벽한 기하학적 구조를 보장하지 않습니다. 프롬프트는 모델에 방을 보존하라고 요구하며 위의 두 예시는 배치를 유지했지만, 매물에 게시하기 전에 사람이 각 스테이징 사진을 원본 사진과 비교해야 합니다.
  • 공개 규정은 여전히 적용됩니다. 많은 MLS 시스템과 지역 부동산 규정은 어떤 사진이 가상 스테이징되었는지 매물에 공개하도록 요구합니다. 게시 전에 해당 시장에 적용되는 규정을 확인하세요.

자주 묻는 질문

AI 가상 스테이징에는 어떤 모델을 사용해야 하나요?

gpt-image-2/image-to-image를 사용하여 POST /v1/tasks를 호출하고, input_urls에 빈 방 사진의 공개 URL을 전달하며, 프롬프트에 추가할 가구를 지정하세요. 전체 입력 스키마는 모델 문서를 참고하세요.

스테이징된 사진이 실제 방과 일치하나요?

일치해야 하지만 확인이 필요합니다. 이 가이드의 프롬프트 구조—먼저 참조 이미지를 보존하고 추가할 가구만 나열—는 여기의 두 예시 모두에서 창문, 문, 바닥, 벽 색조의 일관성을 유지했습니다. 다만 생성 품질은 방과 조명에 따라 달라질 수 있으므로 게시 전에 출력물을 원본 사진과 하나씩 대조하여 검토해야 합니다.

매물 전체를 스테이징하는 데 비용이 얼마나 드나요?

1K 가격 이미지당 $0.03을 기준으로 유닛 하나의 방 세 개를 스테이징하는 데 $0.09가 듭니다. 유닛당 방 수와 배치 유닛 수를 곱하여 더 큰 규모의 작업을 계획하고, 해상도 및 향후 가격 변동이 총비용에 영향을 미치므로 먼저 현재 가격을 확인하세요.

사진이 가상 스테이징되었음을 공개해야 하나요?

해당 시장의 규정을 확인하세요. 많은 MLS 시스템과 지역 규정은 가상 스테이징된 사진에 공개 라벨을 붙이도록 요구하며, 이는 매물 이미지에 대한 일반적인 정확성 요구 사항과는 별개입니다.

이 이미지-투-이미지 방법으로 스테이징 외에 더 많은 작업을 할 수 있나요?

네—설명된 요소를 변경하면서 참조 이미지를 유지하는 것은 범용 패턴입니다. GPT Image 2 이커머스 워크플로는 동일한 기본 작업 API로 제품 사진 배치 처리를 하며, 프롬프트와 가격 구조도 유사합니다.

먼저 GPT Image 2 이미지-투-이미지 모델 페이지에서 빈 유닛 사진 한 장을 업로드하여 스테이징된 방이 실제 유닛과 일치하는지 확인한 다음, 동일한 input_urls 호출을 위의 배치 스크립트로 옮겨 매물의 나머지 부분을 처리하세요.

영구 AI 아티팩트로 빌드 시작하기

API 키를 받아 태스크 기반의 하나의 API로 이미지, 비디오, 오디오 모델을 호출하세요.

API 문서 보기