Rakenna · Ghost Mannequin -automaatio

Automatisoi ghost mannequin -irrotus katalogillesi

Yhdellä lauseella

Hae katalogin delta edellisestä ajostasi, tee POST taulukolla product_images (jokaisessa kohteessa kuvan URL sekä valinnainen back_image) yhdellä tyylillä endpointiin /api/v1/ghost-mannequin/batch, pollaa erän ID:tä 3 sekunnin välein, kunnes jokainen kohde on tilassa completed tai failed, ja päivitä sitten kukin tuoterivi sen arvolla output_url. Samanaikaisten erien määrä on rajoitettu tilaustason mukaan.

  • Credits: 4 credits resoluutiolla 2K · 5 credits resoluutiolla 4K
  • Tyypillinen kesto: 1.5–4 min
  • Käsittely: asynkroninen, polling

Jokainen luku tällä sivulla on peräisin Photta-rajapinnan dokumentaatiosta · tarkistettu

Poista mallinukke jokaisesta tuotesivun kuvasta ilman graafikon työtä. Phottan ghost-mannequin-endpoint tukee luonnostaan eräajoa — öinen cron muuttaa 50K-SKU-syötteen näkymättömien mallinukkejen katalogiksi tunneissa, ei viikoissa.

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

Miten se toimii

Öinen ajo, koko katalogi

Viisi osaa, jotka tarvitset itsenäisesti pyörivään automaatioon.

  1. Vaihe 1

    Kartoita katalogisi

    Tiedä mitkä tuoterivit tarvitsevat ghost mannequin -kuvan, millä sellainen jo on ja millä on rajatut kategoriat. Tallenna last_photographed_at-aikaleima, jotta öinen työ käsittelee vain deltan.

  2. Vaihe 2

    Valitse 3D tai flat-lay per kategoria

    `3d` vaatteille, jotka tarvitsevat tilavuutta — ulkovaatteet, farkut, räätälöidyt vaatteet. `flat_lay` asusteille ja neuleille, jotka näyttävät paremmilta laakeana kuvattuna. Tallenna tyyli tuotekategorioittain, jotta erän muodostaja valitsee oikean ilman manuaalista säätöä.

  3. Vaihe 3

    Lähetä delta eränä

    POST /api/v1/ghost-mannequin/batch taulukolla product_images — jokainen kohde sisältää kentät image, valinnainen back_image ja image_side — sekä koko erälle määritetyt style, background_color ja resolution. Pidä oma kartoitus taulukon indeksistä tuotetunnisteeseen; vastaus palauttaa yhden luontitunnisteen (generation ID) per kohde samassa järjestyksessä.

  4. Vaihe 4

    Pollaa pääerää

    Batch-endpoint palauttaa yhteenvedon laskureista (total, processing, completed, failed). Pollaa 3 sekunnin välein, kunnes completed + failed on yhtä suuri kuin total. Photta käsittelee kohteet rinnakkain erän sisällä, joten sinun ei tarvitse pollata yksittäisiä luonteja.

  5. Vaihe 5

    Tallenna tietokantaasi

    Käy status.data.items läpi järjestyksessä — erä säilyttää taulukkosi järjestyksen — ja päivitä kukin tuoterivi sen arvolla output_url. Kirjaa epäonnistumiset lokiin — ne johtuvat lähes aina syötteen viallisesta lähdekuvasta, jonka voit korjata ja lähettää uudelleen seuraavassa ajossa.

Kolme vaihetta Pythonilla

Deltan haku, erän lähetys, pääerän pollaus — minimaalinen toimiva katalogiautomaatio.

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

Kehittäjien usein kysymää

Ghost mannequinin ajaminen katalogimittakaavassa

Kuinka suuri yksittäinen erä voi olla?

Batch-endpoint tukee dokumentaation mukaan jopa muutamaa sataa kohdetta per kutsu. Jaa 50K-SKU:n öisessä ajossa delta 100–200 kohteen eriin ja lähetä ne peräkkäin, jotta pysyt sujuvasti tilaustasosi rate limitin alapuolella.

Voiko erässä yhdistää 3D- ja flat-lay-tyylejä?

Kyllä — style on kohteen kenttä, joten yksittäinen erä voi sisältää molempia. Käytännössä useimmat tiimit jakavat erät kuitenkin kategorioittain, koska jatkokäsittelyn tallennuslogiikka on suoraviivaisempaa, kun erän jokainen rivi päätyy samaan tietokantasarakkeeseen.

Mitä epäonnistuneille kohteille tapahtuu?

Erän epäonnistuneet kohteet hyvittävät credits-yksikkönsä automaattisesti ja sisältävät kentät error_code ja error_message lopullisessa kohteen payloadissa. Kirjaa virheet lokiin ja yritä niitä uudelleen seuraavana yönä, kun tiimisi on ehtinyt korjata lähdekuvan tai merkitä rivin pysyvästi virheelliseksi syötteeksi.

Miten kohdistan tulokset takaisin tuotetunnisteisiini?

Ylläpidä lähetettäessä omaa kartoitusta taulukon sijainnista tuotetunnisteeseen: batch-vastaus palauttaa yhden luontitunnisteen per kohde samassa järjestyksessä kuin product_images, ja myös erän tila listaa kohteet tässä samassa järjestyksessä.

Voinko ajastaa tämän päivittäiseksi cron-työksi?

Kyllä — yksinkertainen päivittäinen cron, joka hakee viimeisen 24 tunnin deltan, pilkkoo sen osiin, lähettää erät ja kirjoittaa tulokset tietokantaasi, on vankka malli katalogikokoluokan tiimeille. Pidä suorittaja idempotenttina, jotta epäonnistunut yö voidaan ajaa turvallisesti uudelleen.

Julkaise katalogikokoluokan ghost mannequin tänä yönä

Kolme Python-funktiota, yksi cron, 50K kuvaa. Ota API-avain ja osoita se katalogiisi.