Przejdź do treści głównej

Rozbij obraz na warstwy przez API: Seedream 5.0 Flash kontra Pro

Zamień jeden obraz w czysty podkład plus nawet 16 przezroczystych warstw PNG: realne wyniki, składnia bbox, koszty i sposób sklejania warstw.

Autor
SpicyAPI Engineering
Opublikowano
Czas czytania
11 min czytania
Zaktualizowano
Plakat LATE SHIFT rozłożony na warstwy: czysta deszczowa ulica, bar, tytuł, slogan, kobieta w czerwonym płaszczu i bilet ADMIT ONE, każdy w swojej złotej ramce

Krótka odpowiedź: wyślij jeden obraz i otrzymaj naprawiony podkład (obraz z usuniętymi wyodrębnionymi elementami i wypełnionym tłem) plus nawet 16 przezroczystych warstw PNG, po jednej na element. Każda warstwa ma name i boundingBox, więc warstwy układają się z powrotem na swoich miejscach. SpicyAPI uruchamia to na Seedream 5.0 Flash za 0,026 $ za obraz wyjściowy w dowolnej rozdzielczości oraz na Seedream 5.0 Pro za 0,042 $ za obraz (1K, 1.5K) lub 0,084 $ (2K, auto). Zacznij od Flasha: jest tańszy i w naszych testach ukończył wszystkie kategorie z wejściami dla dorosłych. Pro jest droższy i odmawia obrazów intymnej sceny między dwiema dorosłymi osobami.

W 30 sekund

  • Wynik: podkład pod indeksem 0, potem warstwy. Warstwy to zawsze przezroczyste PNG; output_format zmienia tylko podkład (JPEG lub PNG).
  • Limit i rozliczenie: najwyżej 17 obrazów na uruchomienie (podkład plus 16 warstw), a płacisz za zwrócone obrazy, w tym podkład. Gdy zadanie zostaje przyjęte, blokujemy cenę za 17 obrazów i zwracamy różnicę, gdy tylko poznamy rzeczywistą liczbę.
  • Prompt opcjonalny. Jeśli go nie podasz, model wybierze główne elementy; jeśli napiszesz, rozdzieli to, co nazwałeś. Nie ma ustawienia liczby warstw.
  • Nie jest natychmiastowe: uruchomienie trwa od około 45 do 100 sekund na obu modelach.
  • Skopiuj pliki do własnej pamięci, gdy uruchomienie się zakończy.

Jak to wygląda

Wychodziliśmy z plakatu wygenerowanego przez Seedream 5.0 Flash.

Plakat LATE SHIFT: kobieta w czerwonym płaszczu trzymająca papierowy kubek przed barem pod czerwonym neonem, kremowy tytuł szeryfowy u góry i żółty bilet ADMIT ONE w prawym dolnym rogu

Flash, bez promptu w ogóle

Wysłaliśmy plakat bez promptu i z resolution ustawionym na auto. Wróciło 8 obrazów: podkład plus siedem warstw, czyli bar, daleki samochód, czerwony neon, kobieta w czerwonym płaszczu, slogan, tytuł LATE SHIFT i bilet ADMIT ONE.

Widok rozstrzelony warstw wyniku LATE SHIFT: podkład z deszczowej ulicy i siedem warstw (bar, samochód, neon, kobieta, slogan, tytuł, bilet) rozwinięte w złotych ramkach, z ponumerowaną listą po prawej

Podkład to deszczowa ulica, z której zniknęły bar, kobieta i cały tekst, a ulica została wypełniona. To, co było za usuniętym elementem, model domalowuje, więc wygląda to dobrze, ale nie są to pierwotne piksele.

Podkład z Flasha: deszczowa nocna ulica bez baru, kobiety i całego tekstu, z wypełnionym tłem

Dwie warstwy z Flasha osobno (szachownica, którą zobaczyłbyś w edytorze, to tylko przezroczystość):

Przezroczysta warstwa z tytułem LATE SHIFT osobno
Przezroczysta warstwa z kobietą w czerwonym płaszczu osobno

Pro, z nazwaniem elementów

Pro dostał ten sam plakat z promptem wymieniającym pięć elementów, w 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

Wróciło sześć obrazów: podkład i pięć warstw o nazwach Diner building, Tagline text, LATE SHIFT title, Woman in red trench coat oraz ADMIT ONE ticket stub. Ułożone według ramek odtwarzają oryginalny plakat.

Kontaktówka wyniku Pro: podkład i pięć przezroczystych warstw — bar, slogan, tytuł, kobieta i bilet

Pro poradził sobie też z wcześniej zrobioną reklamą perfum. Nazwaliśmy cztery elementy (nagłówek NOIR ÉTÉ, flakon, złotą wstążkę i małą linijkę „eau de parfum”) i dostaliśmy pięć obrazów: pusty czarny marmurowy postument jako podkład plus cztery warstwy. To zdjęcie produktowe, które możesz przestawić na nowym tle bez generowania czegokolwiek od nowa.

Kontaktówka wyniku Pro z perfum: pusty czarny marmurowy podkład i cztery warstwy — złota wstążka, flakon, nagłówek i drobny tekst

Flash czy Pro?

FlashPro
Cena za obraz wyjściowy0,026 $ w każdej rozdzielczości0,042 $ (1K, 1.5K), 0,084 $ (2K i auto)
Domyślna resolutionauto1.5k
Nazwy i ramkiname i boundingBox w każdej warstwiename i boundingBox w każdej warstwie
Ten sam plakat, rozdzielenie automatyczne7 warstw plus podkład8 warstw plus podkład
Wejściowe obrazy dla dorosłych (NSFW, do intensywnych tematów)AkceptowaneAkceptowane
Intymna scena między dwiema dorosłymi osobamiAkceptowanaOdrzucona, bez naliczenia
PromptOpcjonalny; co najmniej 3 znaki, jeśli zapisanyOpcjonalny

Domyślnie wybieraj Flash: jest tańszy i ukończył wszystkie przetestowane tutaj kategorie z wejściami dla dorosłych. Wybierz Pro, gdy rozdzielenie w Flashu pomija potrzebny ci element, a twoje wejście nie jest intymną sceną między dwiema dorosłymi osobami (zakryta wersja tej samej sceny dzieli się normalnie). W Pro odrzucony obraz wraca jako nieudane zadanie z ogólnym błędem i bez naliczenia; nie ponawiaj tego samego obrazu, wyślij go do Flasha. Oba modele dają nazwy i ramki, więc oba pasują do tych samych zadań:

  • edycja nagłówka plakatu i wstawienie go z powrotem;
  • podmiana samego tła przy zachowaniu produktu lub postaci;
  • zamiana wycięć w naklejki lub wielorazowe zasoby projektowe;
  • zbudowanie sceny z paralaksą lub szkieletu animacji z jednej ilustracji.

Jak napisać prompt, który nazywa to, czego chcesz

Bez promptu model sam decyduje, co jest elementem. Z promptem rozdziela to, co wymienisz. Dwie rzeczy sprawiły, że wyniki stały się przewidywalne:

  • Nazwij każdy element, który cię interesuje, krótką frazą nominalną: "the LATE SHIFT title", "the woman in the red trench coat". To, co pominiesz, zależy od modelu, więc nazwij to, co zamierzasz przesunąć. Jeśli poprosisz o mniej elementów, dostaniesz mniej warstw; limit to 16.
  • Wskaż region przez <bbox>. Współrzędne to x1 y1 x2 y2, znormalizowane do siatki od 0 do 1000 z początkiem w lewym górnym rogu, niezależnie od rozmiaru obrazu:
text
Separate the title text <bbox>179 58 809 197</bbox> and the parrot
<bbox>330 274 641 991</bbox> into independent layers

To rozstrzyga przypadek, gdy dwie rzeczy wyglądają podobnie albo na siebie zachodzą. Na obrazie 1536×2048 ramka od 100 do 900 w poziomie obejmuje piksele od 154 do 1382.

Ile to kosztuje

Płacisz za każdy zwrócony obraz, a podkład też się liczy. Typowe plakaty i reklamy zwracają od 3 do 11 obrazów: od 0,078 $ do 0,286 $ na Flashu, a uruchomienie Pro z 6 obrazami w 1.5K kosztuje 6 × 0,042 $ = 0,252 $. Poza tym nic nie jest naliczane za warstwę.

Kwota zablokowana przy akceptacji to cena za 17 obrazów: 0,442 $ na Flashu, 0,714 $ na Pro w 1K lub 1.5K i 1,428 $ na Pro w 2K lub auto. Po zakończeniu uruchomienia jest zwalniana do rzeczywistej liczby. W Pro ustaw resolution na 1k lub 1.5k, jeśli rozdzielenie ma działać; auto jest naliczane według stawki 2K, więc żądanie skopiowane z przykładu dla Flasha z auto kosztuje w Pro dwukrotnie więcej.

Najpierw wypróbuj w Playground

  1. Otwórz stronę rozbijania na warstwy we Flashu i zostań w zakładce Playground, w widoku Form. Zaloguj się kontem z saldem, aby uruchomić.
  2. Dodaj swój plakat lub reklamę w polu Input image (plik albo Asset URL).
  3. Zostaw Prompt puste, niech model wybierze główne elementy, albo nazwij te, które chcesz przesunąć, używając <bbox> tam, gdzie dwie rzeczy wyglądają podobnie.
  4. Dla Flasha zostaw Resolution na auto, a potem uruchom model. Wynik otworzy się jako widok warstw, w którym możesz ukrywać warstwy, pobrać jedną warstwę lub wszystkie jako zip albo wyeksportować widoczny stos jako jeden PNG. Obraz wygenerowany w serwisie możesz wysłać wprost do rozbijania na warstwy.
  5. Jeśli rozdzielenie coś pominie, uruchom ten sam obraz na stronie Pro; tam ustaw Resolution na 1k lub 1.5k, bo auto jest naliczane według stawki 2K.

Potem uruchom to z kodu

Zainstaluj Python SDK (pip install spicyapi), ustaw SPICY_API_KEY w środowisku serwera i uruchom:

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")

Dla Pro użyj bytedance/seedream-5.0-pro/layer-decomposition z "resolution": "1.5k". Trzymaj obraz źródłowy poniżej 10 MB. Tworzenie, oczekiwanie, pobieranie, ponowne próby i treść callbacka opisuje przewodnik po zadaniach oraz referencja Python SDK.

Albo niech to uruchomi Agent

Gdy rozdzielenie ma wykonać asystent, wszystkie trzy oficjalne narzędzia pokazują cenę i pytają o zgodę przed płatnym wywołaniem.

  • CLI. Umieść ten sam obiekt input w input.json, a potem:

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

Zobacz dokumentację CLI; npx @spicyapi/cli działa bez instalowania.

  • Serwer MCP. Dodaj serwer MCP do swojego asystenta, a potem zapytaj: "Split this poster into layers with Seedream 5.0 Flash and name the title, the tagline and the woman." Wywołuje spicyapi_task_create, które zatrzymuje się na potwierdzenie ceny, a następnie spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill instaluje Agent Skill, który każe asystentowi programistycznemu odczytać aktualny schemat modelu zamiast zgadywać nazwy pól.

Złóż warstwy z powrotem

Warstwa PNG ma zwykle wyższą rozdzielczość niż ramka, którą zajmuje (na przykład ramka 671×139 z PNG 1233×256), więc przeskaluj każdą warstwę do jej ramki, a potem rysuj je od najniższego zIndex do najwyższego. Działa to zarówno na wyniku Flasha, jak i Pro.

Python z 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)

To samo w przeglądarce przez 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);
}

Aby podmienić tytuł plakatu, pomiń tę warstwę w pętli, narysuj własny tekst w tę samą ramkę i zostaw resztę. Aby zmienić tylko tło, podmień assets[0] na własny obraz o tym samym rozmiarze.

Inne sposoby rozbijania obrazu na warstwy

Większość stron, które pojawiają się przy tym wyszukiwaniu, to narzędzia przeglądarkowe z rozliczeniem za kredyty i bez API. Główną otwartą alternatywą jest Qwen-Image-Layered (Apache 2.0, 20B parametrów), który możesz postawić sam na GPU albo wywołać przez fal za 0,05 $ za obraz wyjściowy (domyślne uruchomienie z 4 warstwami kosztuje około 0,20 $, jeśli każda warstwa jest naliczana). Tam ustawiasz liczbę warstw (domyślnie 4) i dostajesz przezroczyste obrazy w całej powierzchni płótna, bez nazw i pozycji, a kontrola bezpieczeństwa fal jest włączona domyślnie i zwraca czarne obrazy dla oznaczonych wejść. Wybierz je, gdy potrzebujesz stałej liczby warstw albo własnego hostingu. Wybierz rozbijanie na warstwy Seedream, gdy chcesz przyciętych warstw z nazwą i pozycją każdej, promptu nazywającego elementy oraz akceptowanych obrazów wejściowych dla dorosłych; przy 0,026 $ za obraz na Flashu jest też tańsze za obraz.

FAQ

Ile warstw dostanę?

Tyle, ile model znajdzie, maksymalnie 16 plus podkład. Nie możesz ustawić liczby. Nazywaj elementy, aby kontrolować ich liczbę, a jeśli jednego brakuje, nazwij go (albo podaj jego <bbox>) i uruchom ponownie; powtórne uruchomienie jest rozliczane jak nowe.

Czy mogę rozbić obraz, który nie powstał w SpicyAPI?

Tak, każdy pojedynczy obraz w granicach ze strony modelu. Aby uzyskać materiał na plakat, który dzieli się czysto, zacznij od Seedream 5.0 Flash tekst na obraz.

Czy wyniki są powtarzalne?

Nie. Nie ma parametru seed, więc wykonaj rozdzielenie raz, zachowaj pliki i edytuj je.

Dokąd iść dalej

Wypróbuj plakat, który już Ci się podoba, w rozbijaniu na warstwy we Flashu; jeśli jego rozdzielenie coś pominie, przepuść ten sam obraz przez Pro.

Także w językach English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano

Wypróbuj samodzielnie

Płacisz tylko za to, co uruchomisz — bez planów i subskrypcji.

Zrobione w MiniMax H3 · ByteDance Seedance 2.0 Fast