HiAPI
Блог

Руководство

API виртуального стаффинга: превратите фото пустой комнаты в обставленный объект с помощью ИИ

Воспроизводимый рабочий процесс «изображение в изображение» с реальными парами «до/после», точными промптами, скриптом пакетной обработки и проверенными ценами

Sep 23, 2026
API виртуального стаффинга: превратите фото пустой комнаты в обставленный объект с помощью ИИ

Фотографии пустого объекта сообщают покупателю меньше, чем фотографии с мебелью. Физический стаффинг решает эту проблему, но требует реальных затрат на каждый юнит и нескольких дней на согласование графика. 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

Цены меняются, поэтому перед большими объёмами проверяйте страницу актуальных цен и добавляйте запас на повторную генерацию с учётом собственного процента прохождения проверки — два примера из этого руководства не отражают универсальный процент успешных первых попыток.

Чего виртуальный стаффинг не может

Стаффинг «изображение в изображение» редактирует пиксели, а не реальный юнит. Перед внедрением в процесс работы с листингами помните о трёх ограничениях:

  • Он не может исправить комнату. Повреждения, плесень или структурные проблемы на референсной фотографии не следует заретушировать, а обставленное фото ни в коем случае не должно искажать фактическое состояние юнита.
  • Он не гарантирует попиксельно идеальную геометрию. Промпт требует от модели сохранить комнату, и оба примера выше сохранили планировку, но перед публикацией в листинге человек всё равно должен сравнить каждое обставленное фото с исходным снимком.
  • Требования к раскрытию информации продолжают действовать. Многие системы MLS и местные нормы рынка недвижимости требуют указывать в листинге, какие фотографии прошли виртуальный стаффинг — перед публикацией проверьте правила, действующие на вашем рынке.

Частые вопросы

Какую модель выбрать для ИИ-виртуального стаффинга?

Используйте gpt-image-2/image-to-image с вызовом POST /v1/tasks, передайте публичный URL фотографии пустой комнаты в input_urls и укажите в промпте мебель, которую нужно добавить. Полная схема входных данных приведена в документации модели.

Действительно ли обставленная фотография соответствует реальной комнате?

Должна соответствовать, но это нужно проверить. Структура промпта из этого руководства — сначала сохранить референс, затем перечислить только добавляемую мебель — обеспечила в обоих примерах согласованность окон, дверей, пола и оттенков стен. Тем не менее перед публикацией следует проверять каждый результат по исходной фотографии, поскольку качество генерации может зависеть от комнаты и освещения.

Сколько стоит обставить полный листинг?

При цене 1K $0.03 за изображение обстановка трёх комнат одного юнита стоит $0.09. Для планирования больших объёмов умножьте число комнат на юнит и число юнитов в партии, а также заранее уточните текущие цены, поскольку на итоговую стоимость влияют разрешение и будущие изменения цен.

Нужно ли раскрывать, что фотография прошла виртуальный стаффинг?

Проверьте правила вашего рынка. Многие системы MLS и местные нормы требуют добавлять метку о виртуальном стаффинге на такие фотографии — это отдельное требование, не связанное с общими требованиями к точности изображений в листинге.

Может ли этот подход «изображение в изображение» делать больше, чем стаффинг?

Да — сохранение референсного изображения при изменении описанных элементов является универсальным шаблоном. Рабочий процесс GPT Image 2 для электронной коммерции использует тот же базовый API задач для пакетной обработки продуктовой фотографии с аналогичной структурой промптов и цен.

Начните с загрузки фотографии пустого юнита на странице модели GPT Image 2 «изображение в изображение», убедитесь, что обставленная комната соответствует реальному юниту, а затем перенесите тот же вызов input_urls в скрипт пакетной обработки выше, чтобы обработать остальную часть листинга.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API