Bouwen · Ghost Mannequin Automatisering
Automatiseer ghost mannequin-extractie voor je catalogus
In één zin
Haal het catalogusdelta op sinds je laatste run, POST een product_images-array (elk item een afbeeldings-URL plus optionele back_image) met één stijl naar /api/v1/ghost-mannequin/batch, poll het batch-ID elke 3 seconden totdat elk item completed of failed is, en werk vervolgens elke productrij bij met de bijbehorende output_url. Gelijktijdige batches zijn gemaximeerd per abonnement.
- Credits: 4 credits bij 2K · 5 credits bij 4K
- Typische duur: 1.5–4 min
- Verwerking: async, polling
Elk getal op deze pagina is afkomstig uit de Photta-API-documentatie · gecontroleerd
Verwijder de paspop uit elke PDP-foto zonder tussenkomst van een ontwerper. Photta's ghost-mannequin-endpoint verwerkt batches van nature — een nachtelijke cron verandert een feed van 50K-SKU's binnen enkele uren in een catalogus met onzichtbare paspoppen, in plaats van weken.
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"]Hoe het werkt
Nachtelijke run, catalogusbreed
Vijf onderdelen die je nodig hebt voor een automatisering die onbemand draait.
Stap 1
Breng je catalogus in kaart
Weet welke productrijen een ghost mannequin-afbeelding nodig hebben, welke er al een hebben, en welke afgeschermde categorieën bevatten. Sla een last_photographed_at-tijdstempel op zodat de nachtelijke job alleen het delta verwerkt.
Stap 2
Kies 3D of flat-lay per categorie
`3d` voor kledingstukken die volume nodig hebben — bovenkleding, denim, maatwerk. `flat_lay` voor accessoires en gebreide kleding die plat neergelegd beter fotograferen. Sla de stijl op per productcategorie, zodat de batchbouwer automatisch de juiste kiest zonder handmatig afstellen.
Stap 3
Verzend het delta in batch
POST /api/v1/ghost-mannequin/batch met een product_images-array — elk item bevat image, optionele back_image en image_side — plus één style, background_color en resolution voor de gehele batch. Houd je eigen mapping bij van arraypositie naar product-ID; het antwoord retourneert één generatie-ID per item in dezelfde volgorde.
Stap 4
Poll de bovenliggende batch
Het batch-endpoint retourneert geaggregeerde tellers (total, processing, completed, failed). Poll elke 3 seconden totdat completed + failed gelijk is aan total. Photta verwerkt items binnen de batch parallel, dus je hoeft individuele generaties niet te pollen.
Stap 5
Opslaan in je database
Itereer over status.data.items op volgorde — de batch behoudt je arrayvolgorde — en werk elke productrij bij met de bijbehorende output_url. Log fouten — deze wijzen vrijwel altijd op een ondeugdelijke bronfoto in je feed, die je kunt herstellen en opnieuw kunt verzenden bij de volgende run.
Drie stappen in Python
Delta ophalen, batch verzenden, bovenliggende batch pollen — de minimaal levensvatbare catalogusautomatisering.
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),
)Veelgestelde vragen van developers
Ghost mannequin draaien op catalogusschaal
Hoe groot kan een enkele batch zijn?
Het batch-endpoint accepteert volgens de documentatie tot enkele honderden items per call. Voor een nachtelijke run van 50K-SKU's splits je het delta op in batches van 100–200 en verzend je deze sequentieel, zodat je ruim onder de rate limit van je abonnement blijft.
Kan een batch 3D en flat-lay combineren?
Ja — style is een veld per item, dus een enkele batch kan beide bevatten. In de praktijk splitsen de meeste teams toch per categorie, omdat de downstream-opslaglogica eenvoudiger is wanneer elke rij in een batch in dezelfde databasekolom terechtkomt.
Wat gebeurt er met mislukte items?
Voor mislukte items in een batch worden de credits automatisch gerestitueerd en ze bevatten een error_code + error_message in de uiteindelijke itempayload. Log de fouten en probeer ze de volgende nacht opnieuw, nadat je team de kans heeft gehad de bronfoto te herstellen of de rij te markeren als permanent ongeldige invoer.
Hoe koppel ik resultaten terug aan mijn product-ID's?
Houd bij het verzenden je eigen mapping bij van arraypositie naar product-ID: de batchrespons retourneert één generatie-ID per item in dezelfde volgorde als product_images, en de batchstatus vermeldt items eveneens in die volgorde.
Kan ik dit inplannen als een dagelijkse cron?
Ja — een simpele dagelijkse cron die het delta van de afgelopen 24 uur ophaalt, opdeelt in chunks, batches verstuurt en resultaten wegschrijft naar je database is een dragend patroon voor teams die op catalogusschaal werken. Houd de runner idempotent, zodat een mislukte nacht veilig opnieuw kan worden uitgevoerd.
Gerelateerde pagina's
Referentie
Mogelijkheden
Ghost mannequin API voor hollow-man-productfoto's
AI ghost mannequin endpoint. Verwijder de paspop uit een kledingfoto en behoud interne details. 3D of flat-lay, batchverwerking, 4 credits bij 2K.
LezenSnelstartgids
Eerste Photta-afbeelding in minder dan vijf minuten.
Registreer je, genereer een API-sleutel, voer je eerste cURL-call uit, poll totdat deze is voltooid, sla het resultaat op. Vijf stappen, end-to-end gedocumenteerd.
LezenTalen
Python walkthrough
Lezen
Elk getal op deze pagina is afkomstig uit de Photta-API-documentatie · gecontroleerd
Lever vanavond nog ghost mannequin op catalogusschaal op
Drie Python-functies, één cron, 50K foto's. Vraag een API key aan en richt hem op je catalogus.