Xây dựng · Tự động hóa Ghost Mannequin
Tự động hóa tác vụ tách ghost mannequin cho danh mục sản phẩm của bạn
Tóm tắt trong một câu
Lấy phần delta của danh mục kể từ lần chạy trước, POST một mảng product_images (mỗi item là một URL ảnh kèm theo back_image tùy chọn) với một style duy nhất tới /api/v1/ghost-mannequin/batch, polling batch ID mỗi 3 giây cho đến khi mọi item đều ở trạng thái completed hoặc failed, sau đó cập nhật từng dòng sản phẩm với output_url tương ứng. Số lượng batch chạy đồng thời bị giới hạn theo từng plan.
- Credits: 4 credits ở 2K · 5 credits ở 4K
- Thời gian điển hình: 1.5–4 min
- Xử lý: async, polling
Mọi số liệu trên trang này đều lấy từ tài liệu Photta API · đã kiểm tra
Tách mannequin khỏi mọi ảnh PDP mà không cần chạm đến designer. Endpoint ghost-mannequin của Photta hỗ trợ xử lý batch rất tự nhiên — một cron job chạy hàng đêm sẽ chuyển đổi feed 50K SKU thành danh mục invisible-mannequin chỉ trong vài giờ thay vì nhiều tuần.
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"]Cơ chế hoạt động
Chạy hàng đêm trên quy mô toàn danh mục
Năm thành phần bạn cần để xây dựng hệ thống tự động hóa vận hành không cần giám sát.
Bước 1
Lập bản đồ danh mục sản phẩm
Xác định rõ những dòng sản phẩm nào cần ảnh ghost mannequin, những dòng nào đã có, và những danh mục nào bị giới hạn quyền truy cập. Lưu một timestamp last_photographed_at để job hàng đêm chỉ xử lý phần delta.
Bước 2
Chọn 3D hoặc flat-lay theo từng danh mục
`3d` cho các trang phục cần độ phồng — áo khoác ngoài, đồ denim, đồ may đo. `flat_lay` cho phụ kiện và đồ dệt kim vốn hiển thị đẹp hơn khi chụp trải phẳng. Lưu trữ style theo từng danh mục sản phẩm để bộ dựng batch tự động chọn đúng kiểu mà không cần tinh chỉnh thủ công.
Bước 3
Gửi batch phần delta
POST tới /api/v1/ghost-mannequin/batch với một mảng product_images — mỗi item chứa image, back_image tùy chọn và image_side — kèm theo một style, background_color và resolution cho toàn bộ batch. Tự duy trì bảng ánh xạ từ vị trí trong mảng sang product ID; response trả về một generation ID cho mỗi item theo đúng thứ tự đó.
Bước 4
Polling batch cha
Endpoint batch trả về các bộ đếm tổng hợp (total, processing, completed, failed). Thực hiện polling mỗi 3 giây cho đến khi completed + failed bằng total. Photta xử lý các item song song bên trong batch, vì vậy bạn không cần polling từng generation riêng lẻ.
Bước 5
Lưu dữ liệu vào cơ sở dữ liệu của bạn
Duyệt qua status.data.items theo thứ tự — batch giữ nguyên thứ tự mảng ban đầu của bạn — và cập nhật từng dòng sản phẩm với output_url tương ứng. Ghi log các trường hợp lỗi — chúng hầu như luôn xuất phát từ ảnh nguồn bị lỗi trong feed, bạn có thể sửa và gửi lại trong lần chạy tiếp theo.
Ba bước với Python
Trích xuất delta, gửi batch, polling batch cha — giải pháp tự động hóa danh mục khả thi tối thiểu.
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),
)Câu hỏi thường gặp từ developer
Vận hành ghost mannequin ở quy mô toàn danh mục
Một batch đơn lẻ có thể lớn đến mức nào?
Theo tài liệu, endpoint batch chấp nhận tối đa vài trăm item cho mỗi lượt gọi. Đối với lần chạy hàng đêm cho 50K SKU, hãy chia nhỏ delta thành các batch từ 100–200 item và gửi lần lượt để luôn nằm trong giới hạn rate limit của plan.
Một batch có thể kết hợp cả 3D và flat-lay không?
Có — style là trường áp dụng cho từng item, vì vậy một batch đơn lẻ có thể chứa cả hai. Trên thực tế, hầu hết các đội ngũ vẫn tách theo danh mục vì logic lưu dữ liệu ở hạ nguồn sẽ đơn giản hơn khi mọi dòng trong một batch đều ghi vào cùng một cột cơ sở dữ liệu.
Điều gì xảy ra với các item bị lỗi?
Các item bị lỗi trong một batch sẽ được tự động hoàn lại credits và đi kèm error_code + error_message trong payload cuối cùng của item đó. Hãy ghi log các lỗi và thử lại vào đêm tiếp theo sau khi đội ngũ của bạn có thời gian sửa ảnh nguồn hoặc đánh dấu dòng đó là dữ liệu đầu vào lỗi vĩnh viễn.
Làm cách nào để ánh xạ kết quả ngược lại với product ID của tôi?
Hãy tự duy trì bảng ánh xạ từ vị trí trong mảng sang product ID khi gửi: response của batch trả về một generation ID cho mỗi item theo đúng thứ tự của product_images, và trạng thái batch cũng liệt kê các item theo đúng thứ tự đó.
Tôi có thể lên lịch chạy tác vụ này dưới dạng daily cron không?
Có — một daily cron đơn giản kéo phần delta trong 24 giờ qua, chia nhỏ thành các chunk, gửi batch và ghi kết quả vào cơ sở dữ liệu của bạn là kiến trúc chịu tải chuẩn mực cho các đội ngũ quản lý catalog quy mô lớn. Hãy giữ cho runner có tính idempotent để khi có một đêm gặp sự cố, bạn vẫn có thể chạy lại an toàn.
Các trang liên quan
Tài liệu tham khảo
Tính năng
API ghost mannequin dành cho ảnh sản phẩm kiểu người vô hình
AI ghost mannequin endpoint. Xóa bỏ mannequin khỏi ảnh chụp trang phục và bảo toàn chi tiết bên trong. Dạng 3D hoặc flat-lay, xử lý hàng loạt, 4 credits ở 2K.
ĐọcBắt đầu nhanh
Tạo ảnh Photta đầu tiên trong vòng chưa đầy năm phút.
Đăng ký, tạo API key, chạy lệnh cURL đầu tiên, polling cho đến khi hoàn thành, lưu trữ kết quả. Năm bước, có tài liệu hướng dẫn trọn gói từ đầu đến cuối.
ĐọcNgôn ngữ
Python walkthrough
Đọc
Mọi số liệu trên trang này đều lấy từ tài liệu Photta API · đã kiểm tra
Triển khai ghost mannequin quy mô catalog ngay đêm nay
Ba hàm Python, một cron, 50K ảnh. Lấy một API key và trỏ nó vào catalog của bạn.