Руководство
Как изменить стиль изображения с помощью AI: руководство по переносу стиля image-to-image через API hiapi
Сменить стиль фотографии с помощью AI — превратить случайный снимок в кадр из анимации, студийное фото продукта или акварельную иллюстрацию — это не какой-то особый эндпоинт «переноса стиля». Это обычный вызов image-to-image: вы отправляете исходное изображение и текстовую инструкцию с указанием целевого стиля, а модель возвращает новое изображение. Именно то, как вы напишете эту инструкцию, а не какой-то настраиваемый параметр, решает, получите ли вы чистую смену стиля или частичную перегенерацию. Это руководство описывает механику запросов к унифицированному API задач hiapi, шаблоны промптов, которые не дают смене стиля превратиться в новое изображение, и то, как выбрать между двумя проверенными моделями image-to-image в зависимости от желаемой степени творческой свободы.
Что вам понадобится
- API-ключ hiapi — получите его в своей панели управления. Он передаётся в заголовке
Authorization: Bearer sk-...каждого запроса. - Публично доступный URL исходного изображения. Серверы hiapi сами загружают изображение, поэтому пути
localhostили приватные бакеты без подписанного URL не подойдут. Предподписанные URL S3/R2/GCS работают.
Каждый идентификатор модели и поле ниже были повторно проверены на работающем API перед публикацией, включая принудительную проверку ошибок для подтверждения текущих значений перечислений.
Почему при смене стиля нужна «оговорка о сохранении»
Ни одна из двух моделей в этом руководстве не предоставляет числовой параметр интенсивности или силы — если отправить его (strength: 0.5), он будет сразу отклонён с ошибкой additional properties 'strength' not allowed. Интенсивность стиля полностью управляется формулировкой промпта, а это значит, что такая инструкция, как "make this a Studio Ghibli anime frame", сообщает модели только что добавить, но не говорит, что должно остаться неизменным — идентичность субъекта, поза и композиция могут быть свободно переосмыслены моделью.
Решение — всегда писать в промпте два предложения:
- Целевой стиль, выраженный через конкретную визуальную отсылку (медиум, художественное направление, определённый вид — «anime cel-shading», «1970s film photography», «clean studio product shot on white»), а не через расплывчатое прилагательное вроде «cooler».
- Явная оговорка о сохранении — назовите то, что не должно меняться: «keep the same subject, pose, and composition», «keep the text and logo unchanged», «keep the camera angle».
Такой промпт, как "Restyle this photo as a woodblock print. Keep the subject's pose, framing, and the position of every object in the scene.", даёт модели в одной инструкции и цель, и ограничение, что является главным рычагом для получения смены стиля, а не перегенерации.
Минимальный рабочий пример: curl
Этот пример использует seedream-5.0-pro/image-to-image, которая хорошо меняет стиль и имеет строгую, полностью проверенную схему:
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-5.0-pro/image-to-image",
"input": {
"prompt": "Restyle this portrait as a watercolor painting with visible brush texture and soft bleeding edges. Keep the subject'\''s pose, expression, and framing exactly as in the source.",
"image_urls": ["https://your-bucket.example.com/portrait.jpg"],
"aspect_ratio": "3:4",
"resolution": "2K"
}
}'
aspect_ratio обязателен и берётся из фиксированного перечисления — в настоящее время 1:1, 4:3, 3:4, 16:9, 9:16, 2:3, 3:2, 21:9. У этого эндпоинта нет опции «соответствовать исходному изображению», поэтому выберите значение, ближайшее к реальному соотношению сторон исходника (вертикальное фото → 3:4 или 9:16, а не 16:9), чтобы модель не добавляла поля или не обрезала композицию для подгонки.
После успешного создания возвращается идентификатор задачи в data.taskId:
{ "data": { "taskId": "<your-task-id>" } }
Опрашивайте до достижения терминального состояния:
curl -s https://api.hiapi.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer sk-YOUR_KEY"
data.status в конечном итоге станет success (вывод в data.output[0].url) или fail (подробности в data.error).
Полный скрипт Python: создание, опрос, скачивание
Используется только стандартная библиотека:
import json
import time
import urllib.request
API = "https://api.hiapi.ai/v1/tasks"
KEY = "sk-YOUR_KEY"
def call(url, payload=None):
req = urllib.request.Request(
url,
data=json.dumps(payload).encode() if payload is not None else None,
headers={
"Authorization": f"Bearer {KEY}",
"Content-Type": "application/json",
},
method="POST" if payload is not None else "GET",
)
with urllib.request.urlopen(req) as resp:
return json.load(resp)
# 1. Create the restyle task
create = call(API, {
"model": "seedream-5.0-pro/image-to-image",
"input": {
"prompt": (
"Restyle this street photo as a 1980s film-grain photograph with warm, "
"faded colors. Keep the same subject, pose, and every object in the "
"same position in the frame."
),
"image_urls": ["https://your-bucket.example.com/street.jpg"],
"aspect_ratio": "16:9",
"resolution": "2K",
},
})
task_id = create["data"]["taskId"]
print("task created:", task_id)
# 2. Poll until terminal state
while True:
task = call(f"{API}/{task_id}")["data"]
if task["status"] == "success":
break
if task["status"] == "fail":
err = task.get("error") or {}
raise RuntimeError(f"task failed: {err.get('code')} {err.get('message')}")
time.sleep(5)
# 3. Download immediately -- output URLs expire
image_url = task["output"][0]["url"]
urllib.request.urlretrieve(image_url, "restyled.png")
print("saved restyled.png")
Выбор модели в зависимости от желаемой творческой свободы
Обе модели были повторно проверены онлайн, и обе не принимают параметр strength, но они различаются в том, насколько вы можете контролировать влияние исходного изображения:
seedream-5.0-pro/image-to-image |
grok-imagine-quality/image-to-image |
|
|---|---|---|
| Референсные изображения | 1–10 публичных URL | 1–3 публичных URL |
resolution |
1K / 2K (заглавные) |
1k / 2k (строчные) — необязательно |
| Контроль композиции | Фиксированное перечисление aspect_ratio из 8 значений, без автосоответствия |
aspect_ratio: "auto" следует за входным кадром |
| Лучше всего подходит для | Точная смена стиля по одному референсу, когда вы уже знаете целевое соотношение | Быстрая смена стиля, когда нужно, чтобы вывод унаследовал точную композицию исходника без ручного выбора соотношения |
Если ваша оговорка о сохранении включает «same framing», а вы не хотите вручную вычислять соотношение сторон исходника, использование grok-imagine-quality/image-to-image с aspect_ratio: "auto" — более прямой путь: подставьте её в запрос выше, image_urls до 3 штук, resolution в нижнем регистре 2k.
Замечания для продакшена
На сервере предпочитайте обратный вызов, а не опрос. Добавьте объект callback при запросе, и hiapi отправит POST один раз в терминальном состоянии, без необходимости опроса:
{
"model": "seedream-5.0-pro/image-to-image",
"input": { "...": "..." },
"callback": { "url": "https://your-server.example.com/hiapi-hook", "when": "final" }
}
Рассматривайте полезную нагрузку обратного вызова как сигнал, а не как источник истины — извлеките из неё идентификатор задачи и перед действием самостоятельно повторно получите GET /v1/tasks/<id>. Для скриптов и ноутбуков достаточно опроса каждые 5 секунд.
Сделайте повторные попытки идемпотентными. При создании задачи сохраните собственное сопоставление исходное изображение → taskId. Если ваш процесс упадёт посреди опроса, после перезапуска следует повторно связать сохранённый taskId, а не отправлять задачу заново — повторная отправка создаёт вторую оплачиваемую задачу.
Ошибки, с которыми вы реально столкнётесь:
401permission_denied— неверный или отсутствующий ключ. Заголовок должен быть строгоAuthorization: Bearer sk-....400INVALID_REQUEST— нарушение схемы, напримерaspect_ratio: value must be one of '1:1', '4:3', ...илиadditional properties 'strength' not allowed. Схемы обеих моделей строгие — не переносите параметры между семействами моделей.image_urls must be an array— передан простой строковый литерал вместо списка, даже если референсное изображение всего одно.
Связанные материалы
- Полный справочник по полям основной модели из этого руководства: Как использовать seedream-5.0-pro/image-to-image.
- Готовые к копированию промпты для смены стиля с реальными сравнениями «до и после»: Рецепты промптов Grok Imagine Quality image-to-image.
- Сравнение качества вывода между моделями при одном и том же редактировании: Лучшие API image-to-image 2026 года.
- Текущие цены за изображение: страница с ценами.
- Полный справочник API: документация hiapi.
Часто задаваемые вопросы
Есть ли ползунок интенсивности или силы для переноса стиля?
Нет. Ни одна из двух моделей в этом руководстве не принимает поле strength — при отправке оно отклоняется как неопознанное свойство. Интенсивность стиля полностью контролируется конкретностью и силой описания стиля в промпте.
Как не дать модели изменить позу или идентичность моего субъекта? Добавьте в промпт явную оговорку о сохранении, перечислив то, что должно оставаться неизменным — позу, выражение, композицию, положение объектов. Когда ограничение выражено явно, а не подразумевается, модель меняет стиль более консервативно.
Могу ли я автоматически сохранить точное соотношение сторон исходного изображения?
Да, в grok-imagine-quality/image-to-image — установите aspect_ratio: "auto". В seedream-5.0-pro/image-to-image автопараметра нет; выберите из её фиксированного перечисления значение, ближайшее к реальному соотношению сторон исходника.
Должны ли мои исходные изображения быть публичными URL?
Они должны быть доступны серверам hiapi по HTTPS. Предподписанные URL приватных бакетов подходят; localhost или неаутентифицированные и недоступные пути — нет.
Могу ли я параллельно сгенерировать несколько вариантов стиля из одной фотографии?
Да — каждый вариант — это отдельная задача. Отправьте несколько вызовов POST /v1/tasks с одинаковыми image_urls и разными инструкциями по стилю, затем опрашивайте каждый taskId отдельно или используйте обратные вызовы.
В чём разница между сменой стиля и вписыванием или удалением объектов? Смена стиля меняет способ отрисовки всего изображения, сохраняя содержимое; вписывание/удаление объектов меняет определённые области, сохраняя стиль отрисовки. Это разные режимы промптов на одном и том же классе эндпоинтов image-to-image — если вам на самом деле нужно вписывание и удаление объектов, обратитесь к руководству по вписыванию и удалению объектов.
Похожие статьи
Все статьи →-
Руководство
Как вызвать hailuo-2.3-fast/image-to-video через HiAPI API: практика с curl и Python
Первый рабочий запрос к быстрому и недорогому уровню генерации видео по изображению — от ID модели до загрузки MP4
-
Руководство
Как вызывать hailuo-2.3/text-to-video через API HiAPI: curl, Python и рабочие примеры запросов
-
Руководство
Использование Kandinsky 6.0 Pro для преобразования текста в видео на HiAPI: руководство по curl и Python
Практическая демонстрация с упором на запросы: построение вызова от промпта до видеоклипа, отправка запроса, опрос статуса завершения и скачивание результата