- Когда использовать этот быстрый старт
- Шаг 1: Получите ключ API Novita
- Шаг 2: Подтвердите конечные точки
- Шаг 3: Отправьте первый запрос
- Шаг 4: Опрашивайте результат
- Шаг 5: Проверьте цены, лимиты и частые ошибки
- Пример на Python
- Генерация с LoRA
- Ключевые параметры
- Устранение неполадок
- Часто задаваемые вопросы
- Рекомендуемые статьи
Z Image Turbo доступен на Novita AI через два асинхронных эндпоинта: POST https://api.novita.ai/v3/async/z-image-turbo для стандартной генерации изображений по тексту, и POST https://api.novita.ai/v3/async/z-image-turbo-lora для генерации с использованием LoRA-стилей. Оба следуют стандартному асинхронному шаблону Novita AI — отправьте запрос, получите task_id, затем опрашивайте GET /v3/async/task-result до готовности изображения. Это руководство охватывает оба эндпоинта полностью: первый запрос, цикл опроса, использование LoRA и справочник параметров, необходимый перед написанием production-кода.
Когда использовать этот быстрый старт
Используйте это руководство, когда вам нужен проверенный работающий запрос для Z Image Turbo перед добавлением обработки ошибок, пакетирования или production-логики.
Z Image Turbo спроектирован для высокой пропускной способности. Он подходит для сценариев, где:
- Скорость важнее максимального качества — прототипирование пайплайнов, пакетная генерация превью или real-time приложения с жесткими ограничениями по задержке.
- Вы хотите перенос стиля на основе LoRA без настройки полного набора параметров
txt2img. Выделенный LoRA-эндпоинт принимает массивlorasи обрабатывает остальное. - Вам нужен простой интерфейс «промпт на входе — изображение на выходе» с минимальным телом запроса.
Z Image Turbo не подходит, когда вам нужна полная поверхность конфигурации Stable Diffusion — steps, guidance_scale, sampler_name, negative_prompt, hires_fix, рефайнеры и т.д. Для такого уровня управления используйте стандартный эндпоинт POST /v3/async/txt2img.
Это руководство охватывает только путь API, размещенного на Novita AI. Оно не рассматривает самостоятельный хостинг или тонкую настройку.
Шаг 1: Получите ключ API Novita
Создайте аккаунт Novita AI и перейдите в управление ключами API. Сгенерируйте ключ и экспортируйте его:
export NOVITA_API_KEY="your_api_key_here"
Не храните ключ в системах контроля версий, клиентских сборках и слоях Docker-образов.
Шаг 2: Подтвердите конечные точки
Z Image Turbo на Novita AI использует две отдельные точки отправки и одну общую точку получения результата:
| Базовая T2I | LoRA T2I | |
|---|---|---|
| Отправка | POST https://api.novita.ai/v3/async/z-image-turbo |
POST https://api.novita.ai/v3/async/z-image-turbo-lora |
| Опрос результата | GET https://api.novita.ai/v3/async/task-result?task_id=<id> |
GET https://api.novita.ai/v3/async/task-result?task_id=<id> |
| Справочник API | Документация Z Image Turbo | Документация Z Image Turbo LoRA |
Обе точки отправки возвращают только task_id. Точка опроса результата идентична для обоих — если цикл опроса работает для одной, он работает и для другой.
Шаг 3: Отправьте первый запрос
Базовый эндпоинт требует prompt и size. Начните с этого, прежде чем добавлять необязательные параметры:
curl -s -X POST https://api.novita.ai/v3/async/z-image-turbo \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Футуристический городской пейзаж в сумерках, неоновые огни, фотореалистично, ультрадетально",
"size": "1024*1024"
}'
Успешный ответ 200 возвращает:
{
"task_id": "abc123..."
}
Сохраните task_id. Больше ничего при отправке не возвращается — генерация выполняется асинхронно.
В базовом эндпоинте доступны два необязательных параметра:
seed(целое число): фиксатор для воспроизводимых результатов. Одинаковая комбинация промпта и seed дает постоянные результаты.enable_base64_output(логическое): еслиtrue, результат включает изображение в виде строки в формате base64, а не размещенного URL.
Шаг 4: Опрашивайте результат
Выполните GET-запрос к точке получения результата с task_id в качестве параметра запроса:
curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
-H "Authorization: Bearer $NOVITA_API_KEY"
Завершенная задача возвращает:
{
"task": {
"task_id": "abc123...",
"status": "TASK_STATUS_SUCCEED",
"progress_percent": 100,
"eta": 0
},
"images": [
{
"image_url": "https://...",
"image_url_ttl": 3600,
"image_type": "png"
}
]
}
Опрашивайте каждые 1–2 секунды, пока task.status не станет TASK_STATUS_SUCCEED или TASK_STATUS_FAILED. Поле task.eta показывает оценочное оставшееся время в секундах, когда задача еще в очереди.
image_url_ttl — это время жизни URL в секундах. Загрузите и сохраните изображение до истечения TTL — размещенный URL не является постоянным.
Шаг 5: Проверьте цены, лимиты и частые ошибки
Текущие цены на Z Image Turbo указаны на странице цен Novita AI и странице модели Z Image Turbo. Проверьте тарифы перед составлением сметы, так как цены могут меняться.
Частые ошибки:
| Ошибка | Причина | Исправление |
|---|---|---|
| 401 Unauthorized | Отсутствует или некорректен ключ API | Убедитесь, что заголовок Authorization: Bearer <key> |
| 400 Bad Request | Некорректное тело запроса | Проверьте, что prompt и size — строки; seed должен быть целым числом, если указан |
TASK_STATUS_FAILED |
Генерация отклонена или произошла ошибка | Прочитайте task.reason в ответе результата для конкретного сообщения об ошибке |
| URL изображения возвращает 403 или истек | URL запрошен после истечения TTL | Загрузите и сохраните изображение до истечения image_url_ttl секунд |
Пример на Python
Полный рабочий процесс — отправка, опрос, возврат URL изображения:
import os
import time
import requests
API_KEY = os.environ["NOVITA_API_KEY"]
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def generate_image(prompt: str, size: str = "1024*1024", seed: int = None) -> str:
payload = {"prompt": prompt, "size": size}
if seed is not None:
payload["seed"] = seed
resp = requests.post(
"https://api.novita.ai/v3/async/z-image-turbo",
json=payload,
headers=HEADERS,
)
resp.raise_for_status()
task_id = resp.json()["task_id"]
while True:
result = requests.get(
f"https://api.novita.ai/v3/async/task-result?task_id={task_id}",
headers=HEADERS,
)
result.raise_for_status()
data = result.json()
status = data["task"]["status"]
if status == "TASK_STATUS_SUCCEED":
return data["images"][0]["image_url"]
if status == "TASK_STATUS_FAILED":
raise RuntimeError(f"Generation failed: {data['task'].get('reason', 'unknown')}")
time.sleep(1)
if __name__ == "__main__":
url = generate_image(
"Футуристический городской пейзаж в сумерках, неоновые огни, фотореалистично",
size="1024*1024",
seed=42,
)
print(url)
Генерация с LoRA
LoRA-эндпоинт добавляет в запрос массив loras. Каждый элемент содержит path (идентификатор LoRA-модели из хаба моделей Novita AI) и scale (вес влияния):
curl -s -X POST https://api.novita.ai/v3/async/z-image-turbo-lora \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "портрет в аниме-стиле, мягкое освещение, детализированное лицо",
"size": "768*1024",
"loras": [
{
"path": "<путь-к-lora-модели>",
"scale": 0.8
}
],
"seed": 42
}'
Замените <путь-к-lora-модели> на подтвержденный путь из хаба моделей Novita AI. Формат path и совместимые LoRA-модели перечислены в справочнике API Z Image Turbo LoRA — не угадывайте пути моделей; используйте только проверенные записи из хаба, чтобы избежать TASK_STATUS_FAILED из-за неразрешимых путей.
Опрос результата LoRA работает идентично базовому эндпоинту.
Версия того же LoRA-процесса на Python:
import os
import time
import requests
API_KEY = os.environ["NOVITA_API_KEY"]
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def generate_with_lora(
prompt: str,
lora_path: str,
lora_scale: float = 0.8,
size: str = "1024*1024",
seed: int = None,
) -> str:
payload = {
"prompt": prompt,
"size": size,
"loras": [{"path": lora_path, "scale": lora_scale}],
}
if seed is not None:
payload["seed"] = seed
resp = requests.post(
"https://api.novita.ai/v3/async/z-image-turbo-lora",
json=payload,
headers=HEADERS,
)
resp.raise_for_status()
task_id = resp.json()["task_id"]
while True:
result = requests.get(
f"https://api.novita.ai/v3/async/task-result?task_id={task_id}",
headers=HEADERS,
)
result.raise_for_status()
data = result.json()
status = data["task"]["status"]
if status == "TASK_STATUS_SUCCEED":
return data["images"][0]["image_url"]
if status == "TASK_STATUS_FAILED":
raise RuntimeError(f"Generation failed: {data['task'].get('reason', 'unknown')}")
time.sleep(1)
Рекомендации по параметру scale
scale контролирует, насколько сильно применяется стиль LoRA. Значение 0.8 — разумное значение по умолчанию. Уменьшите (0.4–0.6), если стиль LoRA переопределяет детали промпта; увеличьте (0.9–1.0), если стиль проявляется недостаточно сильно. Использование нескольких LoRA с высокими значениями scale может снизить согласованность — сначала тестируйте каждую LoRA отдельно.
Некоторые LoRA-модели требуют слов-триггеров в промпте для активации своего стиля. Проверьте описание модели в хабе Novita AI на наличие обязательных ключевых слов перед тестированием.
Ключевые параметры
Базовый эндпоинт (/v3/async/z-image-turbo)
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt |
string | Да | Текстовое описание целевого изображения |
size |
string | Да | Размеры вывода в формате "ширина*высота", например "1024*1024" |
seed |
integer | Нет | Фиксатор воспроизводимости; одинаковый seed + промпт дают постоянные результаты |
enable_base64_output |
boolean | Нет | Если true, возвращает изображение в виде строки base64 вместо URL |
LoRA-эндпоинт (/v3/async/z-image-turbo-lora)
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt |
string | Да | Текстовый промпт; при необходимости включите слова-триггеры LoRA |
size |
string | Да | Размеры вывода в формате "ширина*высота" |
loras |
array | Да | Один или несколько объектов LoRA |
loras[].path |
string | Да | Путь к LoRA-модели из хаба моделей Novita AI |
loras[].scale |
number | Да | Вес влияния; 0.8 — обычная отправная точка |
seed |
integer | Нет | Фиксатор воспроизводимости |
enable_base64_output не указан для LoRA-эндпоинта в текущей документации. Используйте URL результата из опроса для получения изображения.
Устранение неполадок
Задача остается в статусе TASK_STATUS_PENDING дольше ожидаемого. Глубина очереди варьируется в зависимости от загрузки платформы. Поле task.eta в ответе опроса возвращает расчетное время ожидания в секундах. Для чувствительных к задержкам production-сценариев рассмотрите возможность параллельной отправки запросов и опроса нескольких task_id.
TASK_STATUS_FAILED немедленно или после короткого ожидания. Прочитайте task.reason в результате. Распространенные причины: неверный формат строки size, неразрешимый path LoRA или промпт, вызвавший фильтрацию контента. Изолируйте с помощью минимального запроса.
URL изображения возвращает 403. Время жизни URL определяется image_url_ttl (в секундах). Если вы запрашиваете URL после истечения этого окна, доступ запрещен. Загрузите и сохраните данные изображения сразу после успешного опроса.
Стиль LoRA не отображается в выводе. Попробуйте увеличить scale до 1.0. Проверьте, не требуются ли для LoRA слова-триггеры — если да, добавьте их в промпт.
400 Bad Request на LoRA-эндпоинте. Убедитесь, что поле loras является массивом (а не объектом), и что в каждой записи присутствуют и path, и scale.
Часто задаваемые вопросы
Для чего предназначен Z Image Turbo?
Z Image Turbo оптимизирован для быстрой генерации изображений по тексту. Он подходит для приложений, требующих высокой пропускной способности: генерация превью, пакетные пайплайны и сценарии, где стилизация на основе LoRA важнее тонкого управления диффузией в полном рабочем процессе SDXL.
Какие размеры поддерживает Z Image Turbo?
Параметр size принимает строку "ширина*высота". Подтвержденные поддерживаемые значения перечислены на странице модели Z Image Turbo. Квадратный (1024*1024) и портретный (768*1024) форматы — безопасная отправная точка, соответствующая другим эндпоинтам изображений Novita AI.
Можно ли применить несколько LoRA в одном запросе?
Массив loras принимает несколько записей. На практике объединение LoRA с высокими значениями scale часто снижает качество вывода. Сначала тестируйте каждую LoRA отдельно, затем комбинируйте с консервативными значениями scale (0.5–0.7 на запись).
Где найти совместимые пути LoRA?
Просмотрите хаб моделей Novita AI и проверьте справочник API Z Image Turbo LoRA для подтвержденного формата пути. Не используйте пути из внешних источников, предварительно не убедившись, что они разрешаются на платформе Novita.
Поддерживается ли negative_prompt?
Ни один из эндпоинтов Z Image Turbo не содержит параметр negative_prompt в текущей документации. Если вам нужно исключить объекты или стили, используйте положительные формулировки в промпте, чтобы отойти от нежелательного контента, или рассмотрите стандартный эндпоинт txt2img, который поддерживает negative_prompt напрямую.
Можно ли сгенерировать несколько изображений за один вызов?
Текущая документация не содержит параметр image_num ни для одного из эндпоинтов Z Image Turbo. Для пакетной генерации отправляйте несколько запросов параллельно и опрашивайте их task_id одновременно — каждый запрос независим.
Как Z Image Turbo сравнивается со стандартным эндпоинтом txt2img?
Стандартный эндпоинт txt2img поддерживает широкую поверхность конфигурации: steps, guidance scale, семплер, negative prompt, Hi-Res Fix и рефайнеры. Z Image Turbo обменивает эту конфигурируемость на скорость и простую форму запроса. Используйте txt2img, когда важен контроль параметров; используйте Z Image Turbo, когда приоритетом является пропускная способность или простота.
