Wdrożenie · Automatyzacja efektu ghost mannequin
Zautomatyzuj wycinanie manekina (ghost mannequin) w swoim katalogu
W jednym zdaniu
Pobierz deltę katalogu od ostatniego uruchomienia, wyślij POST z tablicą product_images (każdy element to URL zdjęcia plus opcjonalny back_image) z jednym parametrem style na endpoint /api/v1/ghost-mannequin/batch, odpytuj identyfikator batcha co 3 sekundy, aż każdy element osiągnie status completed lub failed, a następnie zaktualizuj każdy wiersz produktu o jego output_url. Liczba równoległych batchy jest ograniczona w zależności od planu.
- Credits: 4 credits w 2K · 5 credits w 4K
- Typowy czas: 1.5–4 min
- Przetwarzanie: asynchroniczne, polling
Każda liczba na tej stronie pochodzi z dokumentacji API Photta · sprawdzono
Usuwaj manekina z każdego zdjęcia PDP bez angażowania grafika. Endpoint ghost-mannequin w Photta natywnie obsługuje przetwarzanie wsadowe — nocny cron przekształci feed z 50K SKU w katalog z niewidocznym manekinem w kilka godzin, a nie tygodni.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/ghost-mannequin", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/ghost-mannequin",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
},
)
data = res.json()["data"] # data["id"], data["status"]Jak to działa
Nocne uruchomienie dla całego katalogu
Pięć elementów niezbędnych do w pełni bezobsługowej automatyzacji.
Krok 1
Zmapuj swój katalog
Ustal, które wiersze produktów wymagają zdjęcia ghost mannequin, które już je mają, a które należą do wykluczonych kategorii. Przechowuj znacznik czasu last_photographed_at, aby nocne zadanie przetwarzało wyłącznie deltę.
Krok 2
Wybierz 3D lub flat-lay dla każdej kategorii
`3d` dla ubrań wymagających objętości — odzież wierzchnia, denim, krawiectwo. `flat_lay` dla akcesoriów i dzianin, które wyglądają lepiej sfotografowane na płasko. Zapisz styl przypisany do kategorii produktu, aby mechanizm tworzący wsad automatycznie wybierał właściwy wariant bez ręcznej konfiguracji.
Krok 3
Wyślij deltę w trybie wsadowym
Wyślij POST na /api/v1/ghost-mannequin/batch z tablicą product_images — każdy element zawiera image, opcjonalny back_image oraz image_side — wraz ze zdefiniowanymi parametrami style, background_color i resolution dla całego batcha. Zachowaj własne mapowanie indeksu tablicy na ID produktu; odpowiedź zwraca identyfikator generowania dla każdego elementu w tej samej kolejności.
Krok 4
Odpytuj nadrzędny batch
Endpoint batcha zwraca zagregowane liczniki (total, processing, completed, failed). Wykonuj polling co 3 sekundy, dopóki suma completed + failed nie zrówna się z total. Photta przetwarza elementy wewnątrz batcha równolegle, więc nie musisz odpytywać pojedynczych generowań.
Krok 5
Zapisz dane w swojej bazie
Przejdź po status.data.items w kolejności — wsad zachowuje kolejność z Twojej tablicy — i zaktualizuj każdy wiersz produktu o właściwy output_url. Loguj błędy — prawie zawsze wynikają z uszkodzonego zdjęcia źródłowego w feedzie, które można poprawić i przesłać ponownie przy kolejnym uruchomieniu.
Trzy kroki w Python
Wyodrębnienie delty, wysyłka wsadowa, polling nadrzędny — minimalna działająca automatyzacja katalogu.
from datetime import datetime, timedelta
yesterday = datetime.utcnow() - timedelta(days=1)
rows = db.execute(
"SELECT id, source_image_url FROM products WHERE updated_at > %s",
(yesterday,),
).fetchall()import os, requests
res = requests.post(
"https://api.photta.app/api/v1/ghost-mannequin/batch",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_images": [
{
"image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/shirt-front.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/trousers-front.jpg",
"image_side": "front"
}
],
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, buttoned up",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
},
)
data = res.json()["data"] # data["id"], data["status"]import os, time, requests
BASE = "https://api.photta.app/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"}
# data["items"] comes back in the order of the product_images you submitted.
batch_id = data["batch_id"]
for _ in range(240): # 240 × 3s = 12 minutes
status = requests.get(f"{BASE}/ghost-mannequin/batch/{batch_id}", headers=HEADERS).json()["data"]
if status["completed"] + status["failed"] == status["total"]:
break
time.sleep(3)
for row, item in zip(rows, status["items"]):
if item["status"] == "completed":
db.execute(
"UPDATE products SET ghost_image_url = %s WHERE id = %s",
(item["output_url"], row.id),
)Pytania zadawane przez programistów
Uruchamianie ghost mannequin na pełną skalę katalogu
Jak duży może być pojedynczy batch?
Zgodnie z dokumentacją endpoint wsadowy przyjmuje do kilkuset elementów w jednym wywołaniu. W przypadku nocnego przetwarzania 50K SKU podziel deltę na batche po 100–200 elementów i wysyłaj je sekwencyjnie, aby bezpiecznie zmieścić się w limitach zapytań (rate limit) Twojego planu.
Czy jeden batch może łączyć warianty 3D i flat-lay?
Tak — style to pole definiowane per element, więc pojedynczy wsad może zawierać oba warianty. W praktyce większość zespołów i tak dzieli dane według kategorii, ponieważ logika zapisu jest prostsza, gdy każdy wiersz z danego batcha trafia do tej samej kolumny w bazie danych.
Co dzieje się z elementami, które zakończą się błędem?
Za elementy w batchu zakończone błędem automatycznie zwracane są credits, a finalny payload danego elementu zawiera pola error_code i error_message. Zaloguj te błędy i ponów próbę następnej nocy, dając zespołowi czas na poprawienie zdjęcia źródłowego lub oznaczenie wiersza jako trwale nieprawidłowe dane wejściowe.
Jak zmapować wyniki z powrotem na identyfikatory moich produktów?
Podczas wysyłania zachowaj własne mapowanie pozycji w tablicy na ID produktu: odpowiedź batcha zwraca identyfikatory generowania w dokładnie takiej samej kolejności jak w tablicy product_images, a status batcha wymienia elementy w tym samym porządku.
Czy mogę zaplanować to jako codzienny cron?
Tak — prosty codzienny cron, który pobiera deltę z ostatnich 24 godzin, dzieli ją na części, przesyła batche i zapisuje wyniki w Twojej bazie danych, to kluczowy wzorzec dla zespołów pracujących w skali całego katalogu. Zadbaj o idempotencję runnera, aby nieudaną noc można było bezpiecznie powtórzyć.
Powiązane strony
Dokumentacja referencyjna
Możliwości
Ghost mannequin API do zdjęć produktowych typu hollow-man
Endpoint AI ghost mannequin. Usuń manekina ze zdjęcia odzieży i zachowaj detale wnętrza. 3D lub flat-lay, przetwarzanie wsadowe, 4 credits w 2K.
CzytajSzybki start
Pierwszy obraz z Photta w mniej niż pięć minut.
Zarejestruj się, wygeneruj klucz API, wykonaj pierwsze wywołanie cURL, odpytuj aż do ukończenia, zapisz wynik. Pięć kroków opisanych od początku do końca.
CzytajJęzyki
Python walkthrough
Czytaj
Każda liczba na tej stronie pochodzi z dokumentacji API Photta · sprawdzono
Wdróż efekt ghost mannequin w skali katalogu jeszcze dziś
Trzy funkcje w Python, jeden cron, 50K zdjęć. Pobierz klucz API i skieruj go na swój katalog.