Seedream 5.0 Pro API: генерация изображений на Python
Один POST с model Dola-Seedream-5.0-pro создаёт задачу на картинку. Ниже — код запроса, поведение размеров и метки, которое мы видели, и два изображения, сделанные 29 октября 2026 года.
На этой странице
- Какой id модели и какие операции использовать
- Код запроса
- Какие размеры и форматы мы запускали и что вернулось
- Метка и как её отключить
- Ошибки и ограничения
- Seedream или GPT Image 2.5 для работы с API?
- FAQ
- Какой id модели передавать в API?
- Почему на картинке метка "AI generated"?
- Какие размеры принимает API?
- Можно ли получить PNG вместо JPEG?
- Можно ли редактировать готовую картинку через Seedream?
Отправьте один POST на https://api.omniakey.com/v1/media/tasks с model равным Dola-Seedream-5.0-pro и операцией generate, затем опрашивайте id задачи, пока статус не станет succeeded, и скачайте assets[0].url. По умолчанию в углу картинки стоит метка "AI generated". 29 октября 2026 года мы отправили этот запрос и одну правку в 1024x1024, и оба файла вернулись как PNG 1024×1024.
Дальше идут id и две операции, код запроса, который мы запускали без изменений, список запрошенных размеров рядом с пикселями, прочитанными в каждом файле, метка, настройка, которая её выключает (её мы не запускали), и две ошибки, из-за которых создание задачи не проходит. Обе картинки — те, что мы сделали в тот день.
Какой id модели и какие операции использовать
Возьмите Dola-Seedream-5.0-pro — id со страницы модели Seedream 5.0 Pro (проверено 29 октября 2026 года). Страница перечисляет две операции: текст в изображение и правка изображения. Там же сказано, что генерация и правка идут по одному тарифу и что ни выбранный размер, ни приложенные референсы его не увеличивают. Актуальные тарифы — на странице цен.
Вот поля, которые задают запрос до промпта:
model:Dola-Seedream-5.0-prooperation:generateилиeditparameters.size:1K,1.5K,2Kлибоwidthxheightсо строчнойxoutput_format:pngилиjpeg, иjpeg— значение по умолчанию
Поля размера и формата лежат внутри parameters. Вывод останавливается на 2K: размера 4K на странице модели (проверено 29 октября 2026 года) нет. Seedream принимает строчную x между сторонами, а Qwen и Wan — звёздочку, поэтому в клиенте, который обращается к обоим, держите эти формы раздельно. В наших запусках была форма widthxheight с 1024x1024 и PNG, а три ступени размера остались в стороне.
ByteDance продаёт ту же модель в BytePlus ModelArk под другим id — dola-seedream-5-0-pro-260628. Этот id принадлежит BytePlus, поэтому запрос в OmniaKey хочет id выше.
Код запроса
Скрипт ниже — тот самый, что мы запускали 29 октября 2026 года, без изменений: два помощника, один вызов генерации, один вызов правки, только стандартная библиотека Python. Ключ он читает из OMNIAKEY_API_KEY, а каждый PNG пишет в папку, из которой вы его запускаете. В документации по API изображений описаны те же три шага.
import base64
import json
import os
import time
import urllib.error
import urllib.request
import uuid
API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
MODEL = "Dola-Seedream-5.0-pro"
def request(method, url, body=None, extra_headers=None):
headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
data = None
if body is not None:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode()
headers.update(extra_headers or {})
req = urllib.request.Request(url, data=data, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.load(resp)
def poll(url, attempts=5):
for attempt in range(attempts):
try:
return request("GET", url)
except urllib.error.HTTPError as err:
if err.code < 500 or attempt == attempts - 1:
raise
except urllib.error.URLError:
if attempt == attempts - 1:
raise
time.sleep(5 * (attempt + 1))
def run_task(body, out_path):
task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
print("task", task, flush=True)
for _ in range(150):
time.sleep(4)
state = poll(f"{API}/{task}")
if state["status"] not in ("queued", "processing"):
break
if state["status"] != "succeeded":
raise RuntimeError(state.get("error") or state["status"])
asset_url = state["assets"][0]["url"] # signed link: short-lived, so download now
req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
with urllib.request.urlopen(req, timeout=120) as resp, open(out_path, "wb") as f:
f.write(resp.read())
return task
def generate_image(prompt, out_path, size="1024x1024"):
body = {
"model": MODEL,
"type": "image",
"operation": "generate",
"input": {"prompt": prompt},
"parameters": {"size": size, "output_format": "png"},
}
return run_task(body, out_path)
def edit_image(source_path, prompt, out_path, size="1024x1024"):
with open(source_path, "rb") as f:
image = base64.b64encode(f.read()).decode()
body = {
"model": MODEL,
"type": "image",
"operation": "edit",
"input": {"prompt": prompt, "image": {"data": image, "mime_type": "image/jpeg"}},
"parameters": {"size": size, "output_format": "png"},
}
return run_task(body, out_path)
if __name__ == "__main__":
task = generate_image(
"A glass bottle of cold-pressed orange juice on a pale stone counter, morning light from the left, "
"a single orange slice beside it, shallow depth of field, no text, no logos.",
"juice-bottle.png",
)
print("generate task", task)
task = edit_image(
"cafe-base.jpg",
"Change the red bicycle to matte black. Keep everything else exactly the same: "
"the table, the cup, the window frame and the daylight. Photorealistic, no text, no logos.",
"cafe-edited.png",
)
print("edit task", task)
Три шага собраны в run_task: создать задачу со свежим ключом идемпотентности, опрашивать URL задачи, пока статус не выйдет из queued и processing, и скачать URL первого ассета. Вызов создания отвечает HTTP 202 и возвращает id, который начинается с task_, а статус стартует как queued (документация, проверено 29 октября 2026 года). Задача, которая перешла в failed, выбрасывает ошибку из ответа, поэтому причина видна прямо в терминале.
Какие размеры и форматы мы запускали и что вернулось
Оба запуска просили одну и ту же строку размера и один и тот же формат, и оба файла вернулись как PNG 1024×1024.
- Генерация — Запрошенный размер:
1024x1024; Пиксели в файле: 1024×1024; Формат: PNG; Дата: 2026-10-29 - Правка — Запрошенный размер:
1024x1024; Пиксели в файле: 1024×1024; Формат: PNG; Дата: 2026-10-29
Пиксели читайте в файле, который скачали. Строка размера — это то, что вы попросили; файл — это то, что вы получили. Мы открыли каждый PNG, прочитали ширину и высоту и посмотрели на картинку рядом с промптом, который её создал.
Правка интереснее. Мы отправили JPEG 1024×683 с окном кафе и одну инструкцию, а вернулось квадратное изображение. Велосипед теперь тёмный, стол, чашка и растение остались в кадре, а поскольку вывод квадратный, окно и край стола вписаны иначе.
Change the red bicycle to matte black. Keep everything else exactly the same: the table, the cup, the window frame and the daylight. Photorealistic, no text, no logos.

Метка и как её отключить
Каждый вывод несёт метку "AI generated" в углу, если не задать watermark в false внутри parameters, — так пишет страница модели (проверено 29 октября 2026 года). Страница ставит метку в правый нижний угол, и именно там она на выводе по умолчанию ниже: бледная и мелкая. Не указывайте watermark в запросе — и метка останется.
A glass bottle of cold-pressed orange juice on a pale stone counter, morning light from the left, a single orange slice beside it, shallow depth of field, no text, no logos.
Вот этот вывод, сделанный с настройками по умолчанию:

Вариант с watermark false мы не запускали: лимит расходов на один запуск в инструменте блога остановил вызов до отправки.
Ошибки и ограничения
Пройдёт ли вызов создания, решают два заголовка: bearer token и Idempotency-Key.
| Что вы отправляете | Что приходит |
|---|---|
| Создание без ключа идемпотентности | 400 missing_idempotency_key |
| Тот же ключ и то же тело, ещё раз | 200 с существующей задачей, повторно не списывается |
| Тот же ключ, изменённое тело | 409 idempotency_key_reused |
Тот же ключ с тем же телом — это нужный ретрай: возвращается существующая задача, и ничего нового не списывается. Тот же ключ с изменённым промптом или размером даёт 409, поэтому на каждый новый запрос делайте новый ключ. Длина ключа — до 255 символов (документация, проверено 29 октября 2026 года).
Держите тело запроса меньше 1 MiB вместе с картинкой в Base64 и уменьшайте крупное исходное фото перед отправкой. Когда задача завершается успешно, ссылка на скачивание в ответе — подписанная и живёт около часа, по документации, поэтому забирайте файл сразу или опросите задачу ещё раз за новой ссылкой.
Один заголовок удивил нас 29 октября 2026 года. POST с User-Agent по умолчанию из urllib в Python вернул HTTP 403 с телом error code: 1010 от Cloudflare. Наш собственный заголовок User-Agent дошёл до API, и ничего не списали.
User-Agent, например omniakey-example/1. Стандартный из Python получил тот самый 403 29 октября 2026 года.Seedream или GPT Image 2.5 для работы с API?
Решает задача. В нашей правке Seedream 5.0 Pro изменил тот объект, который мы назвали, — велосипед, — и сохранил большую часть сцены, хотя кадр поменялся; оба наших запуска — окно кафе и бутылка сока. Запрос — это одно тело с operation в generate или edit, а исходником может быть публичный URL или Base64 внутри запроса (документация, проверено 29 октября 2026 года).
Чтобы увидеть результат одного промпта рядом с GPT Image 2, откройте сравнение Seedream 5.0 Pro и GPT Image 2: там оба вывода. Чтобы повторить ту же схему «генерация плюс правка» на другой модели, в руководстве по API GPT Image 2.5 разобраны запрос и размеры. Прогоните свой самый сложный промпт на кандидате до переезда пайплайна, а потом сверьте тарифы.
FAQ
Какой id модели передавать в API?
Dola-Seedream-5.0-pro — id из примера запроса на странице модели (проверено 29 октября 2026 года). Собственный dola-seedream-5-0-pro-260628 от ByteDance принадлежит BytePlus ModelArk, а OmniaKey принимает id выше.
Почему на картинке метка "AI generated"?
Каждый вывод Seedream 5.0 Pro несёт метку в правом нижнем углу, если не задать watermark в false, — так пишет страница модели (проверено 29 октября 2026 года). Наш запуск с настройками по умолчанию 29 октября 2026 года пришёл с меткой.
Какие размеры принимает API?
Ступени 1K, 1.5K и 2K либо форма widthxheight со строчной x между сторонами (страница модели, проверено 29 октября 2026 года). Вывод останавливается на 2K, а оба наших запуска просили 1024x1024.
Можно ли получить PNG вместо JPEG?
Да. output_format принимает png или jpeg, и JPEG — значение по умолчанию (документация, проверено 29 октября 2026 года). В обоих запусках мы просили PNG и получали PNG.
Можно ли редактировать готовую картинку через Seedream?
Да: передайте operation в edit вместе с промптом и исходной картинкой — либо Base64 внутри запроса с mime type, либо публичный URL. Правка окна кафе показана в разделе про размеры выше.
Модели в этой статье
Похожие статьи
Seedream 5.0 Pro vs GPT Image 2: тест с одинаковым промптом и цена
Шесть задач, одинаковые промпты, три модели: что получилось у каждой и сколько это стоило.
GPT Image 2.5 API: генерация и редактирование изображений на Python
Один POST создаёт задачу, один GET читает результат. Ниже — код запроса, размеры из запусков 29 октября 2026 года и одно редактирование до и после.
Kling 3.0 API: генерация видео по тексту, код запроса и реальные клипы
Задача text-to-video — это один POST с моделью kling-3.0. Ниже код запроса, поля, которые он принимает, и два 5-секундных клипа, сделанные 29 октября 2026 года, с измерениями.
Недавние статьи
- Clapping Cat Meme AI: как заставить питомца хлопать через image-to-video
- Как использовать API Claude и GPT в DeepSeek Harness
- Альтернатива API FLUX Kontext: правка изображений с GPT Image 2
- Промпты для Kling 3.0: структура, примеры и реальные ролики
- Промпты для MiniMax H3: структура, примеры и реальные ролики