Руководство
Интеграция Google Virtual Try-On API: изображение человека и изображение одежды
Различайте поля изображения человека и изображения одежды; отправляйте задачи и запрашивайте результаты через HiAPI без промпта.
Правильно разместите два изображения по своим полям — и интеграция получит ясную отправную точку. Фото человека помещается в person_image_url, изображение одежды — в product_image_url; если вставить фото человека в поле одежды, смысл входных данных задачи изменится.
TL;DR
Google Virtual Try-On стоит $0.1075 за изображение; посмотрите цены и бюджет. Используйте интерфейс HiAPI /v1/tasks: отправьте задачу и получите taskId, затем запросите результат. Промпт не нужен.
Подготовка входных данных и поля
Выберите одну фронтальную фотографию одного человека, желательно с чётким контуром тела; для одежды используйте плоское изображение или изображение на вешалке с чистым фоном и целыми краями. Два постоянных адреса изображений в примере ниже соответствуют человеку A и футболке в красно-белую полоску; их можно заменить на ваши собственные публичные адреса изображений.
| Поле | Как заполнять |
|---|---|
person_image_url |
Обязательно; публичный HTTP(S) URL фотографии человека |
product_image_url |
Обязательно; публичный HTTP(S) URL изображения товара одежды |
num_images |
Целое число; явно укажите 1, сейчас поддерживается только одно изображение |
Сопоставление бизнес-сценариев с запросом
Когда один человек примеряет разную одежду, фиксируйте person_image_url и поочерёдно заменяйте product_image_url; когда одну и ту же одежду показывают на разных людях, фиксируйте изображение товара и заменяйте изображение человека. Если для одного набора изображений нужно несколько вариантов, сохраните оба входных изображения и отправляйте запросы по отдельности, каждый раз указывая num_images: 1. Рекомендуется хранить в собственных записях задач номер товара и версию изображения человека, а не угадывать соответствие только по имени файла результата.
И для человека, и для одежды нужно предоставить публично доступные HTTP(S)-адреса изображений; локальные пути на диске или data URI в качестве URL изображения не поддерживаются. То, что изображение видно в браузере с активной сессией входа, не означает, что его могут прочитать другие сервисы; перед отправкой проверьте ссылку в условиях, не зависящих от сессии входа. Рекомендуется убедиться, что возвращается само изображение, а не страница альбома или страница с запросом прав, и что изображение остаётся доступным в течение периода чтения задачи.
Если на фото человека закрыт подол одежды или руки сильно перекрывают одежду, сначала рассмотрите замену фотографии на более чёткую по границам. Для изображения одежды предпочтительнее одиночная вещь с целыми краями на плоском снимке или снимке на вешалке; избегайте повторного использования результата примерки в качестве отдельного изображения товара. В публичных полях нет настроек локальной защиты, коррекции манжет или фиксации обуви, поэтому выразить эти требования добавлением пользовательских полей нельзя.
Выбор чётких изображений — это метод работы; то, принимает ли интерфейс изображение, и то, насколько точно выражен товар, следует проверять отдельно. В этой статье для Try-On не заявляются ограничения размера файла, пределы в пикселях или обещания по размерам вывода без доказательств; нельзя также напрямую переносить ограничения на входные данные других моделей изображений.
Отправка задачи: cURL
Ниже пример для Bash/cURL. Сначала настройте HIAPI_API_KEY в среде выполнения; URL изображений в запросе можно заменить, ключ храните в серверной среде.
curl -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google-virtual-try-on",
"input": {
"person_image_url": "https://static.hiapi.ai/gallery/2026/10/9f656c8b6ecf94d5.webp",
"product_image_url": "https://static.hiapi.ai/model-covers/2026/10/22/1792660602486-b5b70d2cfdd8dc95-1792152569828-b5b70d2cfdd8dc95-t-g1-0.webp",
"num_images": 1
}
}'
При успешной отправке вернётся data.taskId. Сохраните это значение для последующего запроса.
Запрос задачи и сохранение результата
Поместите номер задачи в TASK_ID и выполните запрос:
curl "https://api.hiapi.ai/v1/tasks/$TASK_ID" \
-H "Authorization: Bearer $HIAPI_API_KEY"
Когда задача имеет data.status=success, получите изображение из data.output[0].url и сохраните его. Для постоянно работающих сервисов можно задать на верхнем уровне запроса отправки callback.url и callback.when: "final", чтобы получать уведомление о завершении, и дедуплицировать по taskId; уведомление может срабатывать как при успехе, так и при ошибке. Способ запроса подходит для отладки и дополнительных проверок.
Опрос, колбэки и обработка тайм-аутов
Отправка и запрос — две разные вещи. Получив data.taskId, запишите его вместе с текущими входными данными, затем запрашивайте GET /v1/tasks/:id. Если задача ещё не достигла завершённого состояния, продолжайте ждать и не заменяйте запрос повторным POST. Интервал опроса и верхний предел ожидания в бизнес-процессе определяет ваше приложение; в этой статье нет среднего времени выполнения или фиксированного срока завершения, на которые можно было бы ссылаться; сетевой тайм-аут в примере также не является гарантией длительности обслуживания.
Тайм-аут запроса означает лишь то, что это чтение не завершилось вовремя. Сохраните номер задачи и позже повторно запросите ту же задачу. Если сам запрос отправки завершился по тайм-ауту и номер не получен, остаётся неопределённость, принял ли сервер задачу: сохраните время отправки и содержимое запроса, сначала сверьтесь с записями задач, а затем решайте, отправлять ли повторно. Не трактуйте исключение на клиенте как провал задачи и не обещайте, что повторные запросы будут автоматически объединены.
Конфигурация колбэка размещается на верхнем уровне тела запроса, на одном уровне с model и input, её нельзя помещать внутрь входных данных модели. При настройке callback.url одновременно используйте callback.when: "final". Уведомление о завершении может соответствовать как успеху, так и ошибке, поэтому после получения уведомления всё равно нужно проверять статус. Запрос и колбэк могут обрабатывать одну и ту же задачу, поэтому на стороне бизнес-логики следует дедуплицировать по taskId, чтобы избежать повторной загрузки или повторного запуска последующих действий. Здесь описан способ обработки в приложении; не предполагается, что колбэк обязательно придёт за какое-то время.
После data.status=success убедитесь, что в data.output действительно есть доступный адрес результата, затем скачивайте изображение. Если вернулся fail, сохраните сообщение об ошибке и исправьте запрос в соответствии с его содержимым; не пытайтесь только по одному статусу угадать, была ли причина в слишком большом изображении, сетевом сбое или чём-то ещё конкретном. При неожиданном статусе или отсутствии вывода сохраните ответ и выполните дополнительную проверку, не считайте пустой результат успешной выдачей.
Сбой загрузки и сбой генерации также нужно различать. Если задача уже успешна, но файл не сохранён, следует сначала повторно прочитать или скачать имеющийся результат, а не сразу переделывать изображение. При архивировании сохраняйте номер задачи, соответствие входных данных и итоговое расположение файла — только так позже можно точно узнать, из какого запроса получено изображение. Отображаемый пользователю «тайм-аут ожидания» должен означать, что текущий интерфейс перестал ждать, а не самовольное объявление об отмене серверной задачи.
Пример отправки на Python
В окружении должен быть установлен requests. Здесь timeout=60 — верхний предел ожидания сетевого запроса на клиенте, а не время генерации изображения.
import os
import requests
payload = {'model': 'google-virtual-try-on', 'input': {'person_image_url': 'https://static.hiapi.ai/gallery/2026/10/9f656c8b6ecf94d5.webp', 'product_image_url': 'https://static.hiapi.ai/model-covers/2026/10/22/1792660602486-b5b70d2cfdd8dc95-1792152569828-b5b70d2cfdd8dc95-t-g1-0.webp', 'num_images': 1}}
response = requests.post(
"https://api.hiapi.ai/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json=payload,
timeout=60,
)
response.raise_for_status()
result = response.json()
task_id = result["data"]["taskId"]
print(task_id)
Перед отправкой и проверка результата
Интерфейсу не нужен prompt. Не указывайте в num_images значения 2 или 4; если нужны варианты изображений, отправляйте запросы отдельно. Сначала убедитесь, что оба изображения доступны публично и поля не перепутаны, затем отправляйте. При получении статуса ошибки прочитайте возвращённую информацию и исправьте входные данные, не отправляйте повторно то же самое без изменений.
Приёмка возвращённого изображения по назначению товара
Сначала посмотрите на результат рядом с изображением человека: проверьте лицо, причёску, позу, фон, а также брюки и обувь, которые не должны меняться. Затем сверьте с изображением одежды цвет, форму воротника, длину рукавов, рисунок и подол. У футболки в полоску нужно смотреть, как горизонтальные полоски стыкуются на груди и рукавах; у платья — бретели, ниспадающий вырез и складки рядом с руками; у рубашки — не закатаны ли манжеты и не заправлен ли подол в пояс брюк. Эти проверки основаны на изменениях, видимых в примерах, и не гарантируют, что для других входных данных будут только такие изменения.
«Файл скачан» и «изображение можно использовать на странице товара» следует фиксировать отдельно. Даже после успешного возврата результата могут появиться изменения за пределами одежды, поэтому статус интерфейса не может автоматически заменить ручную приёмку. Если дефект вызван перекрытием на входном изображении, сначала замените входные данные и повторите попытку; если товар должен демонстрировать определённую длину рукавов или фиксированный аксессуар, сначала оцените, удовлетворяет ли текущий результат этому ограничению, и не игнорируйте детали товара только потому, что общий образ выглядит естественно.
При добавлении вариантов для того же набора входных данных сохраняйте предыдущие результаты для сравнения и не перезаписывайте старые файлы новыми. При выборе указывайте причину принятия или отклонения, чтобы в дальнейшем было проще работать с похожими товарами. Изображения служат только для визуального осмотра внешнего вида; реальный размер и ощущения при носке требуют информации о размерах одежды и данных примерки на реальном человеке.
Частые вопросы
Можно ли использовать одно поле для фото человека и изображения одежды?
Нет. Для фото человека используется person_image_url, для изображения одежды — product_image_url.
Нужно ли добавлять параметр prompt?
Нет. У интерфейса нет поля промпта; примерка определяется двумя входными изображениями.
Зачем явно указывать num_images: 1?
Сейчас поддерживается только один результат; явное указание позволяет напрямую сопоставить количество изображений в запросе с бюджетом $0.1075 за каждое.
Можно ли сразу прочитать изображение, получив taskId?
Нужно ещё запросить задачу или получить уведомление; после data.status=success задачи получите изображение из data.output[0].url.
Читать далее
Цены и бюджет · Интеграция API · Примеры и выбор изображений · Google Virtual Try-On
Если нужно выбрать между примеркой одежды и универсальным редактированием изображений, посмотрите сравнение Google Virtual Try-On и Seedream 5.0 Lite и проверьте по пунктам одежду, обувь и внешний вид человека.
Похожие статьи
Все статьи →-
Руководство
Примеры Recraft Creative Upscale: увеличение пейзажей и акварели
Посмотрите изменения текстур деревянного дома, озера и акварельного городка, отличите полный результат от предпросмотра и проверьте перерисованные детали.
-
Руководство
Недействительный ключ OpenAI API: 401, переменные окружения и проверка конфигурации проекта
Различайте OpenAI 401, 403 и 429, проверяйте переменные окружения, настройки организации и проекта, а также проверяйте учётные данные запросом только на чтение.
-
Руководство
Kling 4.0: полный набор промптов — 6 сценариев, которые можно скопировать и сразу получить видео
Товары для электронной коммерции, еда, пейзажи путешествий, бытовые зарисовки, пустые кадры со звуком и видео из изображения — для каждого сценария есть реальное готовое видео, полный промпт и ссылка с автозаполнением.