Przejdź do treści głównej

Rozwiązanie API edycji

Edytuj zdjęcie, które już masz, a nie wymyślone przez model.

Endpointy edycji przyjmują co najmniej dwa wejścia: obraz i instrukcję. To właśnie na wprowadzeniu obrazu – jako publicznego adresu, jako zatwierdzonego pliku albo jako osadzonego data URI – grzęźnie większość wdrożeń.

Wyzwanie

Wprowadzenie referencji to ta trudniejsza połowa

Prompt jest łatwy. Trudniejszy jest plik, który leży w telefonie użytkownika, musi dotrzeć do modelu bez odsłaniania prywatnego zasobnika i musi zmieścić się w limitach egzekwowanych, zanim zadanie w ogóle powstanie.

01

Są trzy drogi do środka i każda zawodzi inaczej

Zadeklarowane pole obrazu przyjmuje publiczny adres HTTPS, zatwierdzony identyfikator pliku spicy:// albo osadzony data URI. Osadzanie ma limit 1 MiB po dekodowaniu i 8 388 608 pikseli na obraz, w treści żądania do 2 MiB. Wszystko większe musi przejść przez bilet przesyłania.

02

Podpisany HTTPS-URL działa, gdy plik jest dostępny

Podpisany link może prowadzić do prywatnego bucketu, jeśli nasze serwery pobiorą plik bez cookies i osobnego logowania. Musi być ważny podczas przetwarzania. Prywatne IP, loopback i dane user:password w URL są odrzucane.

03

Edycja to inne zadanie niż generowanie

Publiczna nazwa wywołania kończy się na /edit, schemat zwykle wymaga image_url albo image_urls, a część endpointów dokłada mask_url lub strength. Wartość model z generowania z tekstu wstawiona do przepływu edycji nie przechodzi walidacji, zamiast działać w okrojony sposób.

Podejście

Prześlij raz, zatwierdź, potem podawaj identyfikator pliku

Dla plików użytkowników poproś o bilet przesyłania, wykonaj PUT z dokładną liczbą bajtów i wszystkimi zwróconymi nagłówkami, zatwierdź, a potem podaj zwrócony identyfikator spicy:// w polu obrazu danego modelu. Referencja należy wtedy do twojego konta, jest sprawdzana raz i da się jej użyć w wielu zadaniach bez ponownego przesyłania.

Bilet, PUT, zatwierdzenie, utworzenie. Media dostępne już publicznie pomijają trzy pierwsze kroki.

Ticket → PUT → commit → create

POST /api/v1/common/upload-url
{ "contentType": "image/png", "bytes": 482113 }
→ { "fileId": "fil_01k3…", "uploadUrl": "https://…", "method": "PUT", "headers": { … } }

PUT <uploadUrl>            # exactly 482113 bytes, every returned header replayed
POST /api/v1/files/fil_01k3…/commit
→ { "status": "ready", "uri": "spicy://f/fil_01k3…", "sha256": "…" }

POST /api/v1/jobs/createTask

{
  "model": "<publisher>/<model>/edit",
  "input": {
    "prompt": "Replace the background with an overcast beach at dusk",
    "image_urls": ["spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3"]
  }
}

Kontrakt

Co warto ustalić na starcie

API edycji obrazu: praca na referencji — Co warto ustalić na starcie
Pole lub nagłówekWartość lub limit
POST /api/v1/common/upload-urlJPEG · PNG · WebP · GIF ≤ 10 MiB
POST /api/v1/files/{fileId}/commitreturns spicy://f/fil_…
inline data URI≤ 1 MiB decoded · ≤ 8192 px per side
request body≤ 2 MiB · ≤ 16 images

Przesuń w poziomie, żeby zobaczyć wszystkie kolumny.

Integracja

Od pierwszego wywołania do produkcji

  1. 01POST /api/v1/common/upload-url z contentType i dokładną liczbą bajtów; obrazy do 10 MiB jako JPEG, PNG, WebP albo GIF.
  2. 02Wyślij bajty metodą PUT na podpisany adres, powtarzając wszystkie nagłówki zwrócone przez bilet, a potem POST /api/v1/files/{fileId}/commit.
  3. 03Wyślij createTask z wartością model dla edycji oraz identyfikatorem spicy:// w image_url albo image_urls.
  4. 04Odczytaj output.assets z wywołania zwrotnego albo z recordInfo i zapisz edytowany plik u siebie.

Dopasowanie

Kiedy ta droga jest właściwa

Wybierz to, gdy

  • Twój produkt zaczyna się od zdjęć użytkowników: retusz, wymiana tła, zmiana stylu, usuwanie obiektów.
  • Ta sama referencja wraca w kilku zadaniach i nie powinna być przesyłana za każdym razem od nowa.

Poszukaj gdzie indziej, gdy

  • Nie masz obrazu źródłowego. Generowanie z tekstu to tańszy i prostszy kontrakt.
  • Potrzebujesz edycji wideo z dokładnością do klatki. Endpointy edycji zwracają nieruchome obrazy.

Dowody

Co możesz sprawdzić samodzielnie

Przesłane pliki są przypisane do konta i sprawdzane przy zatwierdzeniu

Zatwierdzenie porównuje zapisaną liczbę bajtów i typ mediów z biletem, weryfikuje sygnaturę obrazu i liczy SHA-256, zanim plik w ogóle da się przywołać.

Osadzone obrazy nigdy nie wracają w rekordzie

Data URI zapisujemy jako pliki przypisane do konta. Znormalizowane wejście zwracane przez recordInfo zawiera identyfikatory plików, nigdy oryginalnych bajtów Base64.

Materiał źródłowy i wyniki mają osobne zegary

Przesłany materiał trzymamy jeden dzień, a wygenerowane wyniki 14 dni. Oba okna są publikowane, a nie negocjowane dla pojedynczego konta.

Przed startem

Zachowania platformy do potwierdzenia

  • Ustal, kto potwierdza prawa do obrazu źródłowego – platforma nie sprawdza go za ciebie.
  • Zweryfikuj typ i rozmiar pliku po swojej stronie, zanim poprosisz o bilet: taniej jest uniknąć błędu 413, niż go obsłużyć.
  • Zachowaj identyfikatory spicy:// przy własnych rekordach, jeśli to samo źródło będzie edytowane ponownie.
  • Traktuj invalid_asset jak błąd pokazywany użytkownikowi, a nie jak awarię.

FAQ

O co pytają na tej stronie

Jedno albo drugie. Publicznie dostępny adres HTTPS trafia wprost do pola obrazu w modelu. Bilety przesyłania są dla plików niepublicznych i dla wszystkiego powyżej limitów osadzania.