Перейти к основному контенту

Разложить изображение на слои через API: Seedream 5.0 Flash или Pro

Превратите одно изображение в чистое базовое изображение и до 16 прозрачных слоёв PNG: реальные результаты, синтаксис bbox, цены и обратная сборка.

Автор
SpicyAPI Engineering
Опубликовано
Время чтения
11 мин чтения
Обновлено
Постер LATE SHIFT, разобранный на слои: чистая дождливая улица, закусочная, заголовок, слоган, женщина в красном плаще и билет ADMIT ONE, каждый в своей золотой рамке

Коротко: отправьте одно изображение и получите исправленное базовое изображение (исходник, из которого убраны выделенные элементы, а фон дорисован) плюс до 16 прозрачных слоёв PNG, по одному на элемент. У каждого слоя есть name и boundingBox, поэтому слои складываются обратно на свои места. SpicyAPI выполняет разложение на Seedream 5.0 Flash по $0.026 за выходное изображение в любом разрешении и на Seedream 5.0 Pro по $0.042 за изображение (1K, 1.5K) или $0.084 (2K, auto). Начните с Flash: он дешевле и в наших тестах справился со всеми категориями взрослого ввода. Pro дороже и отклоняет изображения интимной сцены между двумя взрослыми.

За 30 секунд

  • Результат: базовое изображение под индексом 0, затем слои. Слои всегда прозрачные PNG; output_format меняет только базовое изображение (JPEG или PNG).
  • Лимит и тарификация: не более 17 изображений за один запуск (базовое изображение плюс 16 слоёв), вы платите за возвращённые изображения, включая базовое. Когда задача принята, мы удерживаем цену за 17 изображений и возвращаем разницу, как только известно реальное количество.
  • Prompt необязателен. Если его не указывать, модель сама выберет основные элементы; если написать, она разделит то, что вы назвали. Настройки количества слоёв нет.
  • Не мгновенно: запуск занимает примерно от 45 до 100 секунд на обеих моделях.
  • Скопируйте файлы в своё хранилище после окончания запуска.

Как это выглядит

Мы взяли постер, сгенерированный с помощью Seedream 5.0 Flash.

Постер LATE SHIFT: женщина в красном плаще с бумажным стаканчиком перед закусочной под красной неоновой вывеской, кремовый заголовок с засечками сверху и жёлтый билет ADMIT ONE в правом нижнем углу

Flash, вообще без промпта

Мы отправили постер без промпта и с resolution в значении auto. Вернулось 8 изображений: базовое изображение и семь слоёв — закусочная, далёкая машина, красная неоновая вывеска, женщина в красном плаще, слоган, заголовок LATE SHIFT и билет ADMIT ONE.

Развёрнутый вид слоёв результата LATE SHIFT: базовое изображение дождливой улицы и семь слоёв (закусочная, машина, неон, женщина, слоган, заголовок, билет), расставленных веером в золотых рамках, с нумерованным списком справа

Базовое изображение — это дождливая улица, с которой убраны закусочная, женщина и все надписи, а улица дорисована. То, что было позади удалённого элемента, модель дорисовывает сама, поэтому картинка выглядит правильно, но это не исходные пиксели.

Базовое изображение от Flash: дождливая ночная улица без закусочной, женщины и всего текста, фон дорисован

Два слоя Flash отдельно (шахматная доска, которую вы увидели бы в редакторе, — это просто прозрачность):

Прозрачный слой с заголовком LATE SHIFT отдельно
Прозрачный слой с женщиной в красном плаще отдельно

Pro, с названиями элементов

Pro получил тот же постер с промптом, в котором названы пять элементов, в 1.5K:

text
Separate the LATE SHIFT title, the tagline, the woman in the red trench coat,
the diner building and the ADMIT ONE ticket stub into their own layers

Вернулось шесть изображений: базовое изображение и пять слоёв с именами Diner building, Tagline text, LATE SHIFT title, Woman in red trench coat и ADMIT ONE ticket stub. Сложенные по своим рамкам, они воспроизводят исходный постер.

Контактный лист результата Pro: базовое изображение и пять прозрачных слоёв — закусочная, слоган, заголовок, женщина и билет

Pro справился и с рекламой парфюма, которую мы сделали раньше. Мы назвали четыре элемента (заголовок NOIR ÉTÉ, флакон, золотую ленту и маленькую строку "eau de parfum") и получили пять изображений: пустой чёрный мраморный постамент как базовое изображение плюс четыре слоя. Это предметная съёмка, которую можно переставить на новом фоне, ничего не генерируя заново.

Контактный лист результата Pro с парфюмом: пустое чёрное мраморное базовое изображение и четыре слоя — золотая лента, флакон, заголовок и мелкий текст

Flash или Pro?

FlashPro
Цена за выходное изображение$0.026 в любом разрешении$0.042 (1K, 1.5K), $0.084 (2K и auto)
resolution по умолчаниюauto1.5k
Имена и рамкиname и boundingBox у каждого слояname и boundingBox у каждого слоя
Тот же постер, автоматическое разложение7 слоёв плюс базовое изображение8 слоёв плюс базовое изображение
Входные изображения для взрослых (NSFW, вплоть до интенсивных тем)ПринимаютсяПринимаются
Интимная сцена между двумя взрослымиПринимаетсяОтклоняется, без списания
PromptНеобязателен; не менее 3 символов, если указанНеобязателен

По умолчанию выбирайте Flash: он дешевле и справился со всеми проверенными здесь категориями взрослого ввода. Выбирайте Pro, когда разложение в Flash пропускает нужный вам элемент, а вход не является интимной сценой между двумя взрослыми (прикрытая версия той же сцены разбирается нормально). На Pro отклонённое изображение возвращается как неуспешная задача с обобщённой ошибкой и без списания; не повторяйте то же изображение, отправьте его в Flash. Обе модели дают имена и рамки, поэтому обе подходят для одних и тех же задач:

  • изменить заголовок постера и вернуть его на место;
  • заменить только фон, сохранив продукт или человека;
  • превратить вырезанные фрагменты в стикеры или переиспользуемые дизайн-ресурсы;
  • собрать сцену с параллаксом или анимационный риг из одного рисунка.

Как написать промпт, в котором названо нужное

Без промпта модель сама решает, что считать элементом. С промптом она разделяет то, что вы перечислили. Две привычки сделали результаты предсказуемыми:

  • Называйте каждый нужный вам элемент коротким именным сочетанием: "the LATE SHIFT title", "the woman in the red trench coat". Всё, что вы не назвали, остаётся на усмотрение модели, поэтому называйте то, что планируете двигать. Если запросить меньше элементов, слоёв будет меньше; предел — 16.
  • Указывайте на область через <bbox>. Координаты — x1 y1 x2 y2, нормализованные по сетке от 0 до 1000 с началом в левом верхнем углу, независимо от размера изображения:
text
Separate the title text <bbox>179 58 809 197</bbox> and the parrot
<bbox>330 274 641 991</bbox> into independent layers

Это снимает случай, когда две вещи похожи или перекрываются. На изображении 1536×2048 рамка от 100 до 900 по горизонтали охватывает пиксели с 154 по 1382.

Сколько это стоит

Вы платите за каждое возвращённое изображение, и базовое изображение тоже считается. Типичные постеры и реклама возвращают от 3 до 11 изображений: от $0.078 до $0.286 на Flash, а запуск Pro на 6 изображений при 1.5K стоит 6 × $0.042 = $0.252. Больше за слой ничего не списывается.

Удерживаемая при приёме сумма равна цене 17 изображений: $0.442 на Flash, $0.714 на Pro при 1K или 1.5K и $1.428 на Pro при 2K или auto. Когда запуск завершается, лишнее освобождается и списывается только реальное количество. На Pro задайте resolution в 1k или 1.5k, чтобы разложение работало; auto тарифицируется по цене 2K, поэтому запрос, скопированный из примера для Flash с auto, на Pro обойдётся вдвое дороже.

Сначала попробуйте в Playground

  1. Откройте страницу разложения на слои в Flash и оставайтесь во вкладке Playground в представлении Form. Войдите под аккаунтом с балансом, чтобы запустить.
  2. Добавьте постер или рекламу в Input image (файл или Asset URL).
  3. Оставьте Prompt пустым, чтобы модель выбрала основные элементы, или назовите те, которые хотите двигать, добавив <bbox> там, где две вещи похожи.
  4. Для Flash оставьте Resolution в auto, затем запустите модель. Результат откроется как вид слоёв, где можно скрывать слои, скачать один слой или все в виде zip, а также экспортировать видимый стек одним PNG. Изображение, созданное на сайте, можно отправить прямо в разложение на слои.
  5. Если разложение что-то пропустило, запустите то же изображение на странице Pro; там задайте Resolution в 1k или 1.5k, потому что auto тарифицируется по цене 2K.

Затем запустите из кода

Установите Python SDK (pip install spicyapi), задайте SPICY_API_KEY в окружении сервера и выполните:

python
import uuid
from spicyapi import SpicyClient, output_assets

client = SpicyClient()  # reads SPICY_API_KEY from the environment

task = client.create_task(
    model="bytedance/seedream-5.0-flash/layer-decomposition",
    input_data={
        "image_url": "https://your-cdn.example/poster.png",
        "prompt": "Separate the LATE SHIFT title, the tagline, the woman in the red trench coat, "
                  "the diner building and the ADMIT ONE ticket stub into their own layers",
        "resolution": "auto",
        "output_format": "png",
    },
    idempotency_key=str(uuid.uuid4()),
)

print("Resume task:", task["taskId"], flush=True)
final = client.wait_for_terminal(task["taskId"])  # a run takes about 45 to 100 seconds
if final["state"] != "succeeded":
    raise RuntimeError(f"{task['taskId']} ended as {final['state']}: {final.get('errorCode')}")
assets = output_assets(final)  # assets[0] is the base plate; copy the files to your own storage now
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
    raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")

Для Pro используйте bytedance/seedream-5.0-pro/layer-decomposition с "resolution": "1.5k". Держите исходное изображение меньше 10 MB. Создание, ожидание, скачивание, повторы и тело callback описаны в руководстве по задачам и справочнике Python SDK.

Или пусть запустит Agent

Когда разложение должен выполнить ассистент, все три официальных инструмента показывают цену и спрашивают подтверждение перед платным вызовом.

  • CLI. Поместите тот же объект input в input.json, затем:

``bash spicyapi tasks create --model bytedance/seedream-5.0-flash/layer-decomposition --input-file input.json --wait ``

См. документацию по CLI; npx @spicyapi/cli работает без установки.

  • MCP-сервер. Добавьте MCP-сервер к своему ассистенту, затем спросите: "Split this poster into layers with Seedream 5.0 Flash and name the title, the tagline and the woman." Он вызывает spicyapi_task_create, который останавливается для подтверждения цены, затем spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill устанавливает Agent Skill, который заставляет ассистента для программирования читать актуальную схему модели вместо догадок о полях.

Соберите слои обратно

Слой PNG обычно имеет большее разрешение, чем занимает его рамка (например, рамка 671×139 с PNG 1233×256), поэтому масштабируйте каждый слой под его рамку, а затем рисуйте их от самого низкого zIndex к самому высокому. Это работает с выводом и Flash, и Pro.

Python с Pillow:

python
import io
import requests
from PIL import Image

def fetch(url):
    return Image.open(io.BytesIO(requests.get(url, timeout=60).content)).convert("RGBA")

assets = output_assets(final)                      # from the finished task above
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
    raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")
canvas = fetch(assets[0]["url"])                   # base plate, zIndex 0

for a in sorted(assets[1:], key=lambda a: a["layer"]["zIndex"]):
    box = a["layer"].get("boundingBox")
    if not box:
        continue                                   # no position: place this one by hand
    x1, y1, x2, y2 = [round(v) for v in box]
    layer = fetch(a["url"]).resize((x2 - x1, y2 - y1), Image.LANCZOS)
    canvas.paste(layer, (x1, y1), layer)           # alpha-aware paste

canvas.convert("RGB").save("recomposed.jpg", quality=95)

То же самое в браузере через canvas:

js
async function load(url) {
  const img = new Image();
  img.crossOrigin = "anonymous";
  img.src = url;
  await img.decode();
  return img;
}

const assets = task.data.output.assets;           // task: the finished task's JSON
const base = await load(assets[0].url);
const canvas = document.createElement("canvas");
canvas.width = base.naturalWidth;
canvas.height = base.naturalHeight;
const ctx = canvas.getContext("2d");
ctx.drawImage(base, 0, 0);

const layers = assets.slice(1).sort((a, b) => a.layer.zIndex - b.layer.zIndex);
for (const a of layers) {
  const box = a.layer.boundingBox;
  if (!box) continue;                              // no position: place this one by hand
  const [x1, y1, x2, y2] = box;
  ctx.drawImage(await load(a.url), x1, y1, x2 - x1, y2 - y1);
}

Чтобы заменить заголовок постера, исключите этот слой из цикла, нарисуйте собственный текст в ту же рамку и оставьте остальное. Чтобы изменить только фон, замените assets[0] своим изображением того же размера.

Другие способы разложить изображение на слои

Большинство страниц, которые выдаются по этому запросу, — браузерные инструменты с оплатой по кредитам и без API. Главная открытая альтернатива — Qwen-Image-Layered (Apache 2.0, 20B параметров): её можно развернуть самостоятельно на GPU или вызвать через fal по $0.05 за выходное изображение (запуск по умолчанию на 4 слоя стоит около $0.20, если тарифицируется каждый слой). Там вы задаёте количество слоёв (по умолчанию 4) и получаете прозрачные изображения во весь холст, без имён и позиций, а проверка безопасности fal включена по умолчанию и возвращает чёрные изображения для помеченных входных данных. Выбирайте её, если нужен фиксированный набор слоёв или собственное размещение. Выбирайте разложение на слои Seedream, если нужны обрезанные слои с именем и позицией у каждого, промпт, в котором названы элементы, и принятые изображения для взрослых; при $0.026 за изображение на Flash оно ещё и дешевле за изображение.

FAQ

Сколько слоёв я получу?

Столько, сколько найдёт модель, до 16 плюс базовое изображение. Задать число нельзя. Называйте элементы, чтобы управлять количеством, и если одного не хватает, назовите его (или укажите его <bbox>) и запустите ещё раз; повторный запуск тарифицируется как новый.

Можно ли разложить изображение, созданное не в SpicyAPI?

Да, любое одиночное изображение в пределах ограничений на странице модели. Чтобы получить материал для постера, который разбирается чисто, начните с Seedream 5.0 Flash текст в изображение.

Повторяемы ли результаты?

Нет. Параметра seed нет, поэтому выполните разложение один раз, сохраните файлы и редактируйте их.

Что делать дальше

Попробуйте понравившийся постер в разложении на слои во Flash; если разложение что-то пропустит, пропустите то же изображение через Pro.

Другие языки English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Italiano · Polski