Bangun · Otomatisasi Ghost Mannequin

Otomatiskan ekstraksi ghost mannequin untuk katalog Anda

Ringkasan singkat

Tarik delta katalog sejak proses terakhir Anda, POST array product_images (setiap item berisi URL gambar plus back_image opsional) dengan satu style ke /api/v1/ghost-mannequin/batch, lakukan polling pada batch ID setiap 3 detik hingga setiap item berstatus completed atau failed, lalu perbarui setiap baris produk dengan output_url miliknya. Batch bersamaan dibatasi per paket.

  • Credits: 4 credits pada 2K · 5 credits pada 4K
  • Waktu umum: 1.5–4 min
  • Pemrosesan: async, polling

Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa

Hapus manekin dari setiap foto PDP tanpa melibatkan desainer. Endpoint ghost-mannequin Photta mendukung batching secara natural — cron harian dapat mengubah feed 50K-SKU menjadi katalog invisible-mannequin dalam hitungan jam, bukan minggu.

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

Cara kerja

Proses harian, untuk seluruh katalog

Lima bagian yang Anda butuhkan untuk otomatisasi yang berjalan tanpa pengawasan.

  1. Langkah 1

    Petakan katalog Anda

    Ketahui baris produk mana yang memerlukan gambar ghost mannequin, mana yang sudah memilikinya, dan mana yang memiliki kategori terbatas. Simpan timestamp last_photographed_at agar job harian hanya memproses deltanya saja.

  2. Langkah 2

    Pilih 3D atau flat-lay per kategori

    `3d` untuk pakaian yang membutuhkan volume — pakaian luar, denim, pakaian tailored. `flat_lay` untuk aksesori dan rajutan yang lebih bagus difoto terbentang rata. Simpan style per kategori produk sehingga batch builder dapat memilih opsi yang tepat tanpa penyesuaian manual.

  3. Langkah 3

    Kirim delta secara batch

    POST /api/v1/ghost-mannequin/batch dengan array product_images — setiap item memuat image, opsi back_image dan image_side — plus satu style, background_color, dan resolution untuk seluruh batch. Simpan pemetaan Anda sendiri dari posisi array ke ID produk; respons akan mengembalikan satu generation ID per item dalam urutan yang sama.

  4. Langkah 4

    Polling parent batch

    Endpoint batch mengembalikan penghitung agregat (total, processing, completed, failed). Lakukan polling setiap 3 detik hingga completed + failed sama dengan total. Photta memproses item secara paralel di dalam batch, jadi Anda tidak perlu melakukan polling pada generasi individual.

  5. Langkah 5

    Simpan ke database Anda

    Iterasi status.data.items secara berurutan — batch mempertahankan urutan array Anda — dan perbarui setiap baris produk dengan output_url miliknya. Catat kegagalan ke log — masalah ini hampir selalu disebabkan oleh foto sumber yang buruk di feed Anda, yang dapat Anda perbaiki dan kirim ulang pada proses berikutnya.

Tiga langkah dalam Python

Ekstraksi delta, kirim batch, polling parent — otomatisasi katalog minimum yang fungsional.

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

Pertanyaan umum developer

Menjalankan ghost mannequin pada skala katalog

Seberapa besar kapasitas satu batch?

Endpoint batch menerima hingga beberapa ratus item per panggilan menurut dokumentasi. Untuk proses harian 50K-SKU, bagi delta menjadi beberapa batch berisi 100–200 item dan jalankan secara berurutan agar Anda tetap berada di bawah rate limit paket dengan aman.

Bisakah satu batch mencampur 3D dan flat-lay?

Bisa — style adalah kolom per item, jadi satu batch dapat memuat keduanya. Dalam praktiknya, sebagian besar tim tetap memisahkannya berdasarkan kategori karena logika persistensi downstream menjadi lebih sederhana ketika setiap baris dalam batch masuk ke kolom database yang sama.

Apa yang terjadi pada item yang gagal?

Item yang gagal dalam batch akan mengembalikan credits secara otomatis dan menyertakan error_code + error_message pada payload item akhir. Catat kegagalan ke log dan coba lagi pada malam berikutnya setelah tim Anda sempat memperbaiki foto sumber atau menandai baris tersebut sebagai input yang rusak permanen.

Bagaimana cara memetakan kembali hasil ke ID produk saya?

Simpan pemetaan Anda sendiri dari posisi array ke ID produk saat Anda mengirim permintaan: respons batch mengembalikan satu generation ID per item dalam urutan yang sama persis seperti product_images, dan status batch juga mencantumkan item dalam urutan tersebut.

Bisakah saya menjadwalkannya sebagai cron harian?

Bisa — cron harian sederhana yang menarik delta 24 jam terakhir, membaginya menjadi beberapa bagian (chunking), mengirimkan batch, dan menuliskan hasilnya ke dalam database Anda adalah pola yang kokoh untuk tim berskala katalog. Pastikan runner tetap idempoten agar proses malam hari yang gagal dapat diulang dengan aman.

Rilis ghost mannequin skala katalog malam ini

Tiga fungsi Python, satu cron, 50K foto. Ambil API key dan arahkan ke katalog Anda.