Seedream 5.0 Pro API: разделение на слои, PSD и цена вызова
Разделение на слои включается параметром layer_decomposition у Seedream 5.0 Pro и Flash. Счёт идёт за каждое возвращённое изображение: от 2 до 17 за вызов.
Содержание

Разделение на слои (layer decomposition) в Seedream 5.0 — не отдельная модель, а режим обычного эндпоинта генерации изображений: в тело запроса добавляется "layer_decomposition": true и ровно одно входное изображение. В ответ приходит базовое изображение (base image, z_index: 0) и до 16 слоёв PNG с альфа-каналом, у каждого — рамка bounding_box, имя и описание. Режим поддерживают только Seedream 5.0 Pro и Seedream 5.0 Flash, а платите вы за каждое возвращённое изображение, включая базовое.
Что стоит за цифрами ниже. 2 октября 2026 года выполнены три вызова через api.laozhang.ai на размере 1K, все на одном образце из учебника BytePlus: Flash без prompt, Pro без prompt и Flash с названными элементами. Затем скрипт на Python собрал из каждого ответа PNG-слои, превью и PSD. Не запускались: BytePlus ModelArk напрямую, размеры 1.5K, 2K и auto, теги bbox, плакаты с большим количеством текста, сценарии ошибок и открытие PSD в Photoshop. Всё, что касается этих случаев, пересказано по документации и так и помечено. Параметры и ограничения взяты из учебника BytePlus по Seedream 5.0 pro / flash — он существует только на английском, русские формулировки здесь являются пересказом оригинала.
Три вызова на 1K: 14, 14 и 3 изображения за 35–111 секунд
Входной файл — layer_auto.png из учебника BytePlus: трёхмерная иллюстрация без текста, 2784×3441 пикселей, 9,9 МБ. По одному запуску на конфигурацию, поэтому это отдельные наблюдения, а не средние значения.
| Вызов | Модель | prompt | Время до ответа | Изображений в ответе | Базовое изображение | Сумма по прайсу LaoZhang |
|---|---|---|---|---|---|---|
| 1 | seedream-5-0-flash-260915 | нет | 94,8 с | 14 (базовое + 13 слоёв) | 880×1088, jpeg | 14 × $0,018 = $0,252 |
| 2 | seedream-5-0-pro-260628 | нет | 110,6 с | 14 (базовое + 13 слоёв) | 880×1088, jpeg | 14 × $0,12 = $1,68 |
| 3 | seedream-5-0-flash-260915 | названы два элемента | 34,8 с | 3 (базовое + 2 слоя) | 880×1088, jpeg | 3 × $0,018 = $0,054 |
Все три запроса вернули HTTP 200. Суммы получены умножением опубликованной цены на поле usage.generated_images; журнал списаний в консоли не открывался.
Три вывода, которые меняют работу с этим API. Число изображений определяет модель, а не вы: параметра «сколько слоёв» нет, и счёт заранее известен только как диапазон. Названные в prompt элементы сократили ответ с 14 изображений до 3, время — с 94,8 до 34,8 с, сумму — с $0,252 до $0,054. Flash и Pro нашли по 13 слоёв, но разные: Flash вынес деревянную сцену в отдельный слой, Pro оставил сцену в базовом изображении и отделил укулеле.
Запрос: layer_decomposition, одно изображение и size без пикселей
Рабочий запрос — это обычный вызов генерации изображения с тремя отличиями: layer_decomposition: true, поле image с одним изображением и size из списка 1K, 1.5K, 2K, auto. Точные размеры вида «ширина x высота» в этом режиме не принимаются.
Вот тело, которое отправлялось в первом вызове:
{
"model": "seedream-5-0-flash-260915",
"image": "https://arkdocs-en.tos-ap-southeast-1.volces.com/images/image-generation/layer_auto.png",
"layer_decomposition": true,
"size": "1K",
"response_format": "url",
"watermark": false
}Тот же вызов на Python с библиотекой requests. Адрес, заголовок, тело и таймаут 420 с совпадают с отправленными; в тестовом варианте ключ читался из файла, а в таком сокращённом виде, с переменной окружения, файл не запускался.
import json
import os
from pathlib import Path
import requests
body = {
"model": "seedream-5-0-flash-260915",
"image": "https://arkdocs-en.tos-ap-southeast-1.volces.com/images/image-generation/layer_auto.png",
"layer_decomposition": True,
"size": "1K",
"response_format": "url",
"watermark": False,
}
resp = requests.post(
"https://api.laozhang.ai/v1/images/generations",
headers={"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"},
json=body,
timeout=420,
)
print("HTTP", resp.status_code)
Path("response.json").write_text(json.dumps(resp.json(), indent=2, ensure_ascii=False))У BytePlus ModelArk тот же JSON уходит на другой адрес и с другим ID модели — с префиксом dola-. Официальный пример из учебника выглядит так; он приведён как первичная форма и здесь не запускался:
curl https://ark.ap-southeast.bytepluses.com/api/v3/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "dola-seedream-5-0-pro-260628",
"image": "https://arkdocs-en.tos-ap-southeast-1.volces.com/images/image-generation/layer_auto.png",
"size": "2K",
"layer_decomposition": true,
"watermark": false
}'Чтобы запрос прошёл с первого раза, проверьте вход по таблице ограничений BytePlus:
| Что проверять | Требование в режиме слоёв |
|---|---|
| Число входных изображений | ровно одно; несколько изображений дают ошибку |
| Формат | только png и jpeg (обычная генерация принимает ещё webp, bmp, tiff, gif, heic, heif) |
| Число пикселей | от 512×512 до 6000×6000 |
| Соотношение сторон | от 1/16 до 16 |
| Размер файла | не больше 30 МБ |
| Способ передачи | доступный URL или Base64 в виде data:image/png;base64,..., формат строчными буквами |
size | 1K, 1.5K, 2K, auto; по умолчанию auto |
output_format | png или jpeg, по умолчанию jpeg; действует только на базовое изображение, слои всегда png |
watermark | по умолчанию true: надпись «AI-generated» в правом нижнем углу |
Значение auto работает так: вход от 921 600 до 4 624 220 пикселей возвращается в исходных размерах, меньший приводится к 1K, больший — к 2K. В тесте 1K для входа 2784×3441 дал базовое изображение 880×1088 с тем же соотношением сторон.
В маршруте LaoZhang есть два собственных условия из документации шлюза: в теле не должно быть полей sequential_image_generation и stream (ответ HTTP 400), а ключ должен работать в режиме оплаты за вызов — «Usage first» или «Per-call» в настройках токена.
Свои правила разбиения: названия элементов в prompt или теги bbox
Задать, что именно станет слоем, можно двумя способами: перечислить элементы обычными словами или указать рамки координатами. Без prompt модель сама выбирает главные объекты, текст, фон и декоративные детали.
Автоматический режим. В запросах через cURL, Java или Go поле prompt просто не передаётся. Учебник BytePlus отдельно предупреждает, что Python SDK и OpenAI SDK требуют prompt; для них советуют общую инструкцию вроде «разложи основные визуальные элементы». В тесте запрос шёл через requests, без SDK, и без prompt прошёл.
Названные элементы. Третий вызов отличался одним полем:
"prompt": "Separate only the central toast lead singer with sunglasses and the toast-shaped electric guitar."В ответе оказались ровно два слоя с именами «toast-shaped electric guitar» и «central toast lead singer with sunglasses». Базовое изображение сохранило всё остальное, а на месте вокалиста модель дорисовала фургон: лобовое стекло и решётку радиатора. По учебнику, элементы можно дополнительно пометить прямо на входной картинке — каракулями или выделением.
Точные рамки. В prompt вставляются теги bbox с четырьмя числами в шкале 0–1000: левая, верхняя, правая и нижняя граница. Пример из учебника BytePlus (в тестах этот режим не проверялся):
Perform precise layer separation on the image. The text regions to separate are at <bbox>180 64 812 198</bbox>, <bbox>757 210 939 280</bbox>, <bbox>63 212 320 282</bbox>, <bbox>178 714 826 810</bbox>, <bbox>814 819 949 894</bbox>, and <bbox>326 824 669 930</bbox>; the parrot is at <bbox>347 305 642 997</bbox>.Числа для тегов удобно брать из поля bounding_box.normalized предыдущего ответа: оно в той же шкале.
Пустая строка в prompt — спорное место. Документация LaoZhang утверждает, что поле можно опустить или отправить пустую строку с одинаковым результатом. Руководство EvoLink от 15 августа 2026 года пишет обратное: с пустой строкой автоматическое определение теряется. Речь о двух разных шлюзах, вариант с пустой строкой в тестах не отправлялся, поэтому безопасный выбор один — не передавать ключ prompt вовсе.
Ещё одно ограничение из учебника: если попросить больше слоёв, чем допускает предел в 16, часть информации о слоях может потеряться.
Что приходит в ответе: z_index, bounding_box и файлы крупнее рамок
Массив data содержит базовое изображение и все слои, а порядок наложения задаёт z_index: 0 — база, дальше по возрастанию снизу вверх. Вот ответ третьего вызова; ссылки и описания сокращены, остальное без изменений:
{
"model": "dola-seedream-5-0-flash-260915",
"created": 1790953817,
"data": [
{
"url": "https://ark-acg-ap-southeast-1.tos-ap-southeast-1.volces.com/...",
"size": "880x1088",
"output_format": "jpeg",
"z_index": 0
},
{
"url": "https://ark-acg-ap-southeast-1.tos-ap-southeast-1.volces.com/...",
"size": "764x698",
"output_format": "png",
"z_index": 1,
"bounding_box": {
"absolute": [356, 585, 612, 820],
"normalized": [405, 538, 694, 753]
},
"name": "toast-shaped electric guitar",
"description": "Extract only the toast-shaped light yellow electric guitar..."
},
{
"url": "https://ark-acg-ap-southeast-1.tos-ap-southeast-1.volces.com/...",
"size": "774x710",
"output_format": "png",
"z_index": 2,
"bounding_box": {
"absolute": [248, 293, 657, 668],
"normalized": [282, 269, 745, 613]
},
"name": "central toast lead singer with sunglasses",
"description": "Extract only the central anthropomorphic toast character..."
}
],
"usage": {
"input_images": 1,
"generated_images": 3,
"output_tokens": 11924,
"total_tokens": 11924
}
}Как читать поля:
bounding_box.absolute—[left, top, right, bottom]в пикселях базового изображения.bounding_box.normalized— та же рамка в шкале 0–1000 от ширины и высоты базы.nameиdescription— английская подпись и описание, которые пишет модель. Между запусками они меняются: один и тот же фургон назван «Light green minivan» у Flash и «Light green minibus» у Pro.usage.generated_imagesвключает базовое изображение: 14 означает 13 слоёв.- У базового изображения нет ни
name, ниbounding_box. В автоматических вызовахz_indexшёл от 1 до 13 без пропусков.
Главная ловушка — размер файла слоя не равен размеру его рамки. Гитара пришла файлом 764×698, а её рамка — 256×235 пикселей. В первом вызове стойка микрофона — файл 271×1037 при рамке 103×394, шезлонг — 660×940 при рамке 118×169, то есть примерно в 5,6 раза больше по каждой стороне. Если вставить слой по координатам без масштабирования, он перекроет полкадра.

Правило сборки из учебника BytePlus: базовое изображение — фон; слои сортируются по возрастанию z_index; для каждого x = left, y = top, w = right − left, h = bottom − top; слой масштабируется до w × h и ставится в точку (x, y). Для собственного холста размером W×H берутся нормализованные координаты:
x = left / 1000 × W
y = top / 1000 × H
w = (right − left) / 1000 × W
h = (bottom − top) / 1000 × HBytePlus предупреждает, что нормализованные координаты — целые числа, и пересчёт даёт ошибку округления. Из размеров файлов следует полезное свойство: в слое пикселей больше, чем занимает его рамка на базе 1K, так что на холсте немного крупнее слой можно разместить без увеличения. Запас у каждого слоя свой: на холсте шириной 2784, как у исходника, рамка стойки микрофона будет около 320 пикселей в ширину при файле в 271. Это вывод из чисел; глазами на большом холсте он не проверялся.
Ссылки из ответа живут 24 часа, так что файлы нужно скачать сразу. По документации LaoZhang ссылки не отдают заголовки CORS, и клиенту в браузере стоит запрашивать response_format: "b64_json".
PSD API не отдаёт: скрипт на Python собирает его из ответа
Готового PSD в ответе нет: API возвращает JSON и ссылки на отдельные изображения. Утверждение «каждый результат — это PSD», которое встречается на сайтах онлайн-сервисов, описывает их собственную обёртку, а не API. Файл со слоями собирается на вашей стороне.
Скрипт ниже прошёл на всех трёх ответах (Python 3.12, Pillow 12.3.0, psd-tools 1.23.0). Он скачивает изображения, сохраняет каждый слой как layer-NN-имя.png, собирает плоское превью recomposed.png и пишет layers.psd, где каждый слой назван по полю name и стоит по своим координатам absolute.
python3 -m pip install pillow psd-tools
python3 layers_to_psd.py response.json out_dir"""Сохраняет все изображения из ответа Seedream с разделением на слои,
собирает плоское превью и записывает PSD со слоями.
Запуск: python3 layers_to_psd.py response.json out_dir
Нужны: python3 -m pip install pillow psd-tools
"""
import base64
import json
import re
import sys
import urllib.request
from io import BytesIO
from pathlib import Path
from PIL import Image
from psd_tools import PSDImage
response = json.loads(Path(sys.argv[1]).read_text())
response = response.get("response", response) # подойдёт и запись, где ответ вложен в поле response
out = Path(sys.argv[2])
out.mkdir(parents=True, exist_ok=True)
def load(item):
if item.get("b64_json"):
value = item["b64_json"].split(",", 1)[-1]
return base64.b64decode(value + "=" * (-len(value) % 4))
with urllib.request.urlopen(item["url"], timeout=120) as download:
return download.read()
items = sorted(response["data"], key=lambda item: item["z_index"])
base_item, layer_items = items[0], items[1:]
assert base_item["z_index"] == 0 and "bounding_box" not in base_item
content = load(base_item)
ext = "png" if base_item.get("output_format") == "png" else "jpg"
(out / f"layer-00-base.{ext}").write_bytes(content)
base = Image.open(BytesIO(content)).convert("RGBA")
canvas = base.copy()
psd = PSDImage.new("RGBA", base.size)
psd.append(psd.create_pixel_layer(base, name="base", top=0, left=0))
for item in layer_items:
content = load(item)
slug = re.sub(r"[^a-z0-9]+", "-", item.get("name", "layer").lower()).strip("-") or "layer"
(out / f"layer-{item['z_index']:02d}-{slug}.png").write_bytes(content)
left, top, right, bottom = item["bounding_box"]["absolute"]
# PNG обычно крупнее своей рамки: сначала масштабируем его до рамки.
layer = Image.open(BytesIO(content)).convert("RGBA").resize((right - left, bottom - top), Image.LANCZOS)
canvas.alpha_composite(layer, (left, top))
psd.append(psd.create_pixel_layer(layer, name=item.get("name", slug), top=top, left=left))
print(f"z={item['z_index']:>2} file={item['size']:>9} box={right - left}x{bottom - top} at ({left},{top}) {item.get('name')}")
canvas.save(out / "recomposed.png")
psd.save(out / "layers.psd")
print(f"Saved {len(layer_items)} layers + base, recomposed.png and layers.psd in {out}")Код совпадает с тем, что запускался; на русский переведены только строка документации и комментарии. Результат на тестовых ответах: PSD 880×1088 с 14 именованными пиксельными слоями для автоматических вызовов и с 3 — для вызова с названными элементами. Проверка была одна: файл заново открыт библиотекой psd-tools, сведён в плоское изображение и сравнён с recomposed.png — среднее абсолютное расхождение не больше 0,001. В Photoshop, Photopea и GIMP этот PSD не открывался.
Два ограничения результата. Слои в PSD хранятся в размере рамки на базе 1K, а исходные, более крупные PNG лежат рядом в папке. И все слои растровые: в ответе API нет ничего, что стало бы редактируемым текстовым слоем.
Если PSD нужен без кода, есть браузерный инструмент layerpsd.com того же владельца, что и этот блог. По описанию на сайте, он делит JPG, PNG или WebP на PSD со слоями по цене от $0,018 за слой, без подписки и с одной бесплатной попыткой после входа через Google; в тестах он не участвовал.
Совпадёт ли сборка с оригиналом: расходятся от 4 до 30 % пикселей
Нет, сборка слоёв по bounding_box.absolute в порядке z_index не воспроизводит входное изображение пиксель в пиксель. Мера в таблице — доля пикселей, у которых хотя бы один канал отличается от уменьшенного оригинала больше чем на 32 из 255.
| Вызов | Вынуто слоёв | Доля отличающихся пикселей | Среднее абсолютное расхождение |
|---|---|---|---|
Flash, без prompt | 13 | 30,2 % | 20,6 |
Pro, без prompt | 13 | 12,6 % | 13,6 |
| Flash, два названных элемента | 2 | 4,0 % | 6,7 |

Причина видна в самих файлах. Каждый слой — законченный объект: скрытые части дорисованы, иначе его нельзя было бы сдвинуть. Базовое изображение перерисовано за каждым вынутым элементом. Поэтому это не вырезание фона и не маска сегментации, а новая генерация, близкая к оригиналу.
У Flash в автоматическом режиме расхождения заметны глазом. Два размытых персонажа на переднем плане вернулись резкими и с другой формой. Музыкант слева перерисован целым и более крупным. Сцена стала полным диском и закрыла траву, которая была видна в оригинале. Летающие пузыри пропали и из базы, и из слоёв. Pro сохранил размытие переднего плана и пузыри и визуально близок к оригиналу, отличия остались на краях.
Это одна стилизованная трёхмерная картинка и по одному запуску на модель, а не общая оценка качества. Для работы из неё следуют два правила: чем меньше элементов вынимается, тем меньше меняется картинка, и результат нужно смотреть глазами рядом с оригиналом до того, как он уйдёт в макет. Утверждение из руководства EvoLink, что такая сборка воспроизводит оригинал в точности, на этом образце не подтвердилось.
Сколько стоит вызов: цена изображения × от 2 до 17 изображений
Цена вызова равна цене одного изображения, умноженной на число возвращённых изображений, то есть на базовое плюс слои: от 2 до 17. Точную сумму до запуска узнать нельзя, зато известны её границы.
Цены за изображение по состоянию на 2 октября 2026 года:
| Маршрут и модель | Цена за изображение | Источник |
|---|---|---|
| BytePlus, Seedream 5.0 Flash | $0,018 | прайс BytePlus |
| BytePlus, Seedream 5.0 Pro, слой до 2,61 млн пикселей (1.5K и ниже) | $0,0225 | прайс BytePlus |
| BytePlus, Seedream 5.0 Pro, слой больше 2,61 млн пикселей | $0,045 | прайс BytePlus |
| LaoZhang, Seedream 5.0 Flash | $0,018 | документация LaoZhang |
| LaoZhang, Seedream 5.0 Pro | $0,12, без градации по пикселям | документация LaoZhang |
Те же цены, умноженные на число изображений:
| Маршрут и модель | 3 изображения | 14 изображений | 17 изображений (максимум) |
|---|---|---|---|
| Flash, BytePlus или LaoZhang | $0,054 | $0,252 | $0,306 |
| Pro, BytePlus, все до 2,61 млн пикселей | $0,0675 | $0,315 | $0,3825 |
| Pro, BytePlus, все больше 2,61 млн пикселей | $0,135 | $0,63 | $0,765 |
| Pro, LaoZhang | $0,36 | $1,68 | $2,04 |
Оговорки к расчёту для BytePlus. Прайс описывает цену слоя и не говорит отдельно, по какой ставке считается базовое изображение; generated_images его включает, поэтому в таблице оплачиваемым считается каждое изображение. Слои одного запроса могут попасть в разные ценовые ступени, и каждый считается по своей. На 1K все изображения теста были далеко от границы 2,61 млн пикселей, но база 2048×2048 при 2K — это уже 4,19 млн пикселей и верхняя ступень. Входное изображение у BytePlus в этом режиме бесплатно: оно одно, а первое не оплачивается. Изображения, заблокированные модерацией, в счёт не идут. Налоги и скидки в расчёт не включены.
Счётом управляют два рычага. Первый — prompt с названными элементами: в тесте он уменьшил число изображений с 14 до 3. Второй — модель: на том же 14-слойном результате Flash стоит $0,252 на любом из двух маршрутов.
Flash или Pro: начните с Flash, а Pro берите напрямую у BytePlus
Начинайте с Flash и переходите на Pro, когда собранная картинка должна оставаться близкой к оригиналу. На тестовом образце Flash ответил быстрее (94,8 с против 110,6 с) и стоит дешевле, но изменил 30,2 % пикселей против 12,6 % у Pro и потерял часть деталей.
Маршрут зависит от модели:
- Flash. Цена у LaoZhang равна прайсу BytePlus, $0,018 за изображение. Шлюз ничего не добавляет к счёту и избавляет от заведения аккаунта BytePlus.
- Pro. У LaoZhang изображение стоит $0,12, у BytePlus в режиме слоёв — $0,0225 или $0,045. Разница — 0,12 / 0,0225 ≈ 5,3 раза на нижней ступени и 0,12 / 0,045 ≈ 2,7 раза на верхней. Для регулярной работы с Pro дешевле прямой доступ к BytePlus ModelArk; шлюз оправдан для разовой проверки, когда 14 изображений за $1,68 обходятся дешевле времени на новый аккаунт.
У BytePlus обе модели размещены только в регионе ap-southeast-1; европейского эндпоинта для них в списке моделей нет. Если выбор ещё шире и вопрос в том, какую из двух моделей запускать первой — Nano Banana Pro или Seedream 5.0 Pro, он разобран отдельно, с официальными ценами.
По размеру BytePlus пишет, что 1.5K стоит столько же, сколько 1K, и даёт лучшее качество. Это утверждение документации: в тестах был только 1K.
Почему так долго и что будет при сбое: таймаут от 300 секунд
Вызов синхронный и занимает десятки секунд, причём время растёт вместе с числом изображений: 3 изображения пришли за 34,8 с, 14 — за 94,8 с у Flash и за 110,6 с у Pro. Потоковый режим stream у обеих моделей не поддерживается, поэтому до конца генерации клиент ничего не получает.
Сценарии ошибок в тестах не воспроизводились; ниже — то, что написано в документации.
| Ситуация | Что происходит | Откуда |
|---|---|---|
| Клиентский таймаут | Для 1K ставьте не меньше 300 с. Запрос на 2K может идти долго и оплачивается, даже если клиент отключился | LaoZhang |
| Один из слоёв не сгенерировался | Проваливается весь запрос, частичного успеха нет | BytePlus |
| Изображение не удалось разложить | HTTP 400, без списания, можно повторить | LaoZhang |
Старая модель (seedream-5-0-260128, seedream-4-5-251128) | HTTP 400 с кодом InvalidParameter | LaoZhang |
В теле есть sequential_image_generation или stream | HTTP 400 | LaoZhang |
| Ссылки из ответа | Действуют 24 часа | BytePlus |
Для пакетной обработки важен лимит. У аккаунта BytePlus по умолчанию 500 IPM (изображений в минуту) на версию модели, и каждый запрос с разделением на слои сразу резервирует 17 IPM — под максимум из базы и 16 слоёв. Лишнее возвращается только после завершения запроса. Отсюда расчёт: 500 / 17 = 29 запросов можно начать за минуту на свежей квоте (29 × 17 = 493), а не 500, как при обычной генерации по одному изображению. BytePlus называет эти лимиты теоретическим максимумом; у шлюза лимиты могут быть свои.
Полученный слой можно править дальше. По учебнику BytePlus, PNG слоя отправляется как единственный вход обычного запроса Seedream с "background": "transparent" и выходом png — так объект перекрашивается с сохранением прозрачности. Jpeg на входе или output_format: "jpeg" в этом режиме дают ошибку. В тестах этот шаг не выполнялся.
Когда разделение на слои через API не подходит
Режим не подходит, если нужна точная копия исходника, разложенная по слоям: объекты и фон дорисовываются, и собранная картинка отличается от оригинала. Есть и другие случаи:
- Нужен редактируемый текст. Все слои растровые. В примерах BytePlus группы текста выделяются в отдельные слои, но это картинки с буквами, а не текстовые объекты. Плакаты с большим количеством текста в тестах не проверялись.
- Нужен один вырезанный объект. Платить за набор слоёв незачем: проще сделать прозрачный фон PNG и проверить, что он настоящий.
- Исходник в WebP, HEIC или другом формате. Режим принимает только png и jpeg, файл придётся перекодировать заранее.
- Нужно больше 16 слоёв или холст больше 2K. Предел — базовое изображение плюс 16 слоёв, а
sizeограничен значениями1K,1.5K,2Kиauto. Упоминания «нативного 4K» для Seedream 5.0 Pro с документацией BytePlus расходятся. - Требуется обработка в европейском регионе. У BytePlus обе модели доступны только в
ap-southeast-1. - Нужна твёрдая цена за файл. Число изображений выбирает модель, и по документации LaoZhang оно может отличаться между запусками на одном и том же входе.
Для первого запуска на своём материале хватит одной картинки и модели Flash на самом маленьком размере. Вызов без prompt на 1K покажет, что модель считает слоями и сколько это стоит, а второй вызов с названными элементами или рамками из normalized оставит только нужное. Дальше ответ сохраняется в response.json и передаётся скрипту — на выходе будут PNG-слои, превью для сверки с оригиналом и PSD.





