Руководство
Как использовать flux-2-klein-9b/text-to-image через hiapi API
slug: flux-2-klein-9b-text-to-image-api-guide locale: en title: Как использовать flux-2-klein-9b/text-to-image через hiapi API category: tutorial summary:
- Минимальные примеры curl и Python для вызова flux-2-klein-9b/text-to-image через единый эндпоинт /v1/tasks в hiapi.
- 'Полная таблица параметров: prompt, aspect_ratio, num_inference_steps, output_format и seed — строгая схема отклоняет неизвестные поля.'
- 'Замечания для продакшена: сравнение callback.url и опроса, заголовок Idempotency-Key, а также две структуры ответов с ошибками. takeaways:
- Создайте задачу с помощью POST /v1/tasks, затем опрашивайте GET /v1/tasks/{taskId} или используйте callback.url для получения результата.
- num_inference_steps принимает только 4-8 (целые числа); у этой модели нет полей size или n.
- При повторной попытке с тем же заголовком Idempotency-Key возвращается тот же taskId — его можно безопасно переиспользовать при таймауте.
- Ошибки 400 используют error_code, ошибки аутентификации 401 используют вложенный error.code — сначала проверяйте HTTP-статус. meta_title: Руководство по API генерации изображений из текста flux-2-klein-9b meta_description: Вызов flux-2-klein-9b/text-to-image с помощью curl и Python; создание задач, опрос изображений, а также обработка колбэков, идемпотентности и ошибок в продакшене. keywords:
- api генерации изображений из текста flux-2-klein-9b
- пример api flux-2-klein-9b
- api генерации изображений hiapi
- flux klein api curl python tags:
- api-guide
- image-generation
- flux author_name: hiapi is_published: false cover_image: https://static.hiapi.ai/blog/_default/recipe-cover.jpg
Как использовать flux-2-klein-9b/text-to-image через hiapi API
Что вы создадите
Скрипт, который отправляет промпт в flux-2-klein-9b/text-to-image, ждёт завершения генерации изображения и скачивает его — а также содержит производственные детали (колбэки, идемпотентность, структуры ошибок), необходимые перед запуском без присмотра.
Предварительные условия: Получите API-ключ в консоли hiapi. Каждый запрос ниже аутентифицируется с помощью Authorization: Bearer sk-<your-api-key>.
Минимальный рабочий пример
Генеративные модели hiapi работают за единым асинхронным эндпоинтом: POST /v1/tasks создаёт задачу и сразу возвращает taskId; затем вы опрашиваете GET /v1/tasks/{taskId}, пока она не достигнет терминального состояния.
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer sk-<your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-2-klein-9b/text-to-image",
"input": {
"prompt": "a red fox walking through fresh snow, golden hour light",
"aspect_ratio": "16:9"
}
}'
Возвращаемый результат:
{"code": 200, "data": {"taskId": "tk-hiapi-01K..."}, "message": "success"}
Опрашивайте ту же задачу, пока data.status не изменится с handling на success (по пути ненадолго проходя через archiving):
curl https://api.hiapi.ai/v1/tasks/tk-hiapi-01K... \
-H "Authorization: Bearer sk-<your-api-key>"
{
"code": 200,
"data": {
"status": "success",
"output": [
{"type": "image", "url": "https://temp.hiapi.ai/.../01K...-0.png", "expireAt": 1785941465}
]
},
"message": "success"
}
data.output[0].url — это сгенерированное изображение. Это временная ссылка — в тестах она истекает примерно через 7 дней после генерации — поэтому скачайте байты и сохраните их самостоятельно, а не ссылайтесь на неё напрямую.
Тот же процесс на Python (с опросом)
import time
import requests
API_KEY = "sk-<your-api-key>"
BASE = "https://api.hiapi.ai/v1"
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
resp = requests.post(f"{BASE}/tasks", headers=headers, json={
"model": "flux-2-klein-9b/text-to-image",
"input": {
"prompt": "a red fox walking through fresh snow, golden hour light",
"aspect_ratio": "16:9",
},
})
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
while True:
task = requests.get(f"{BASE}/tasks/{task_id}", headers=headers).json()["data"]
if task["status"] == "success":
image_url = task["output"][0]["url"]
break
if task["status"] == "failed":
raise RuntimeError(f"generation failed: {task}")
time.sleep(3)
image_bytes = requests.get(image_url).content
open("fox.png", "wb").write(image_bytes)
Важные параметры
flux-2-klein-9b/text-to-image имеет строгую входную схему — отправка полей, которые она не знает (size, n, negative_prompt или любых других полей, принимаемых другими моделями изображений hiapi), будет сразу отклонена, поэтому не копируйте параметры между моделями, не заглянув сначала на страницу модели.
| Поле | Обязательно | Описание |
|---|---|---|
prompt |
Да | Строка, описывающая изображение. |
aspect_ratio |
Нет | Одно из значений 1:1, 4:3, 3:4, 16:9, 9:16. По умолчанию 4:3, если не указано. |
num_inference_steps |
Нет | Целое число, 4–8. По умолчанию 4; более высокие значения обменивают скорость на немного большую детализацию. |
output_format |
Нет | Одно из значений jpeg, png, webp. По умолчанию png. |
seed |
Нет | Целое число. Повторное использование seed делает результаты нескольких вызовов воспроизводимыми. |
Полный справочник параметров см. на странице модели; текущие цены с оплатой за изображение см. на странице тарифов — проверяйте там, а не хардкодьте числа, поскольку тарифы на основе использования меняются.
Замечания для продакшена
Используйте колбэки вместо опроса. Для любого сценария, кроме быстрых скриптов, пропустите цикл опроса и добавьте callback.url (а также "when": "final") в тело запроса на создание задачи — hiapi отправит результат POST-запросом на ваш эндпоинт после завершения задачи, и структура его полезной нагрузки будет точно такой же, как у ответа GET /v1/tasks/{taskId}. Подробности о полях колбэка и проверке подписи см. в разделе Создание задачи.
{
"model": "flux-2-klein-9b/text-to-image",
"callback": {"url": "https://yourapp.com/hooks/hiapi", "when": "final"},
"input": {"prompt": "a red fox walking through fresh snow, golden hour light"}
}
Идемпотентность. Установите заголовок Idempotency-Key в вызове POST /v1/tasks (не более 255 байт). Повторная попытка того же запроса с тем же ключом в рамках одной учётной записи не создаст вторую задачу — вы получите исходный taskId. Именно поэтому можно безопасно повторять запросы, которые истекли по таймауту на вашей стороне, без двойного списания средств.
Обработка ошибок. На практике встречаются две разные структуры сбоев, поэтому проверяйте обе:
- Неверный
input(отсутствуетprompt,num_inference_stepsвне диапазона, неподдерживаемые поля) возвращает HTTP 400 и{"error_code": "INVALID_REQUEST", "message": "..."}. - Недействительный или неавторизованный API-ключ возвращает HTTP 401 с другой структурой ответа:
{"error": {"code": "permission_denied", "message": "...", "request_id": "..."}}.
Сначала ветвите обработку по HTTP-статусу, затем читайте фактически присутствующие поля ошибки — не предполагайте, что все сбои используют одну и ту же структуру ответа.
Связанные ресурсы
- Получение сведений о задаче — полный справочник по опросу
- Аутентификация — области действия API-ключа и формат заголовков
- flux-2-klein-9b/image-to-image — та же серия, редактирование входного изображения вместо генерации с нуля
- flux-2-klein-4b/text-to-image — меньшая и более быстрая модель в той же серии klein
Часто задаваемые вопросы
Поддерживает ли flux-2-klein-9b/text-to-image генерацию изображения из изображения?
Напрямую нет — это отдельная модель flux-2-klein-9b/image-to-image со своей собственной входной схемой.
В чём разница между flux-2-klein-9b и flux-2-klein-4b?
Оба являются эндпоинтами генерации изображений из текста в одной серии FLUX.2 [klein]; 9b — более крупная из двух, нацеленная на более сильный реализм, рендеринг текста и детализацию. Перед переключением см. страницу модели 4b, чтобы узнать её текущие цены и параметры.
Можно ли запросить несколько изображений за один вызов?
Нет — схема не принимает n или поля подсчёта. Отправляйте один запрос на каждое изображение.
Как долго действителен возвращённый URL изображения?
output[0].url — это временная ссылка с собственным временным меткой expireAt; считайте её короткоживущей (в тестах около недели) и скачивайте байты сразу после успешного завершения задачи, а не сохраняйте URL.
Почему я получаю ошибку 401 permission_denied?
Ваш ключ отсутствует, недействителен или не имеет доступа к этой модели. Убедитесь, что вы отправляете Authorization: Bearer sk-... с ключом из консоли, а не заглушку.
Нужно ли запускать собственный сервер для использования этого API?
Только если вам нужны колбэки. Опрос GET /v1/tasks/{taskId} из скрипта, планировщика или бессерверной функции вполне подходит для небольших объёмов использования; когда масштаб генерации вырастет, переключитесь на callback.url.
Похожие статьи
Все статьи →-
Руководство
Как вызвать 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
Практическая демонстрация с упором на запросы: построение вызова от промпта до видеоклипа, отправка запроса, опрос статуса завершения и скачивание результата