Xây dựng · SaaS chụp ảnh AI
Xây dựng dịch vụ chụp ảnh sản phẩm bằng AI
Tóm tắt trong một câu
Cấp một khóa API Photta cho từng tenant (hoặc dùng chung một pool nếu lưu lượng nhỏ), phân nhánh xử lý danh mục của từng khách hàng vào một hàng đợi, gọi /api/v1/tryon/apparel cho mỗi sản phẩm, poll các generation ID trong một worker pool, lưu kết quả vào bucket của khách hàng, và lập hóa đơn cho từng đơn vị tính phí (credit hoặc hình ảnh đã render) kèm theo biên lợi nhuận trên chi phí credit của Photta.
- Credits: 5 credits ở 2K · 6 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
Phân nhánh xử lý trên danh mục sản phẩm của khách hàng, điều phối các job try-on theo từng sản phẩm, xuất hóa đơn theo credit. Các thành phần nền tảng mà Photta cung cấp cho từng lập trình viên hoàn toàn có thể kết hợp thành một SaaS white-label — nếu bạn kiểm soát tốt các giới hạn.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/tryon/apparel",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": True,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
},
)
data = res.json()["data"] # data["id"], data["status"]Cơ chế hoạt động
Từ một khóa đơn lẻ đến dịch vụ multi-tenant
Năm quyết định kiến trúc bạn cần đưa ra trước khi viết code production.
Bước 1
Xác định quy chuẩn sản phẩm của bạn
Quyết định xem khách hàng của bạn nhận được gì trên mỗi đơn vị thanh toán: một hình ảnh được render? Một batch? Một gói credit theo tháng? Câu trả lời của bạn sẽ định hình mọi thứ còn lại — độ sâu hàng đợi, chính sách thử lại, nội dung trang giá.
Bước 2
Cấp khóa Photta theo từng tenant
Quy mô nhỏ: dùng chung một khóa, theo dõi mức sử dụng của từng tenant trong cơ sở dữ liệu của bạn. Quy mô lớn hơn: một khóa Photta cho mỗi tenant, quản lý qua dashboard của Photta — phân định trách nhiệm rõ ràng hơn, giảm thiểu phạm vi ảnh hưởng khi bị lộ khóa.
Bước 3
Phân nhánh xử lý thông qua hàng đợi
Với mỗi sản phẩm trong feed của khách hàng, hãy đưa một photo job vào hàng đợi. Đừng bao giờ gửi đồng bộ trong quá trình import CSV — bạn sẽ chạm ngưỡng rate limit 600-requests-per-minute và làm mất job do lỗi 429.
Bước 4
Biên lợi nhuận cộng thêm trên giá credit
Mỗi lần render trang phục chuẩn 4K tốn của bạn 6 credits. Mọi hóa đơn bạn gửi đi phải là số credits × biên lợi nhuận của bạn. Hãy ghi lại chi phí credit gốc vào sổ cái để bộ phận tài chính có thể đối soát hóa đơn của Photta với doanh thu của bạn.
Bước 5
Giám sát độ trễ và tỷ lệ lỗi
Theo dõi thời gian hoàn thành + tỷ lệ lỗi theo từng tenant. Khi ảnh của một khách hàng liên tục mất hơn 4 phút hoặc thất bại liên tiếp, nguyên nhân hầu như luôn là do dữ liệu đầu vào không hợp lệ (URL bị hỏng, product_type không được hỗ trợ) — chứ không phải lỗi từ Photta.
Ba kiến trúc mẫu bạn sẽ cần
Phân nhánh xử lý, điều phối theo từng tenant, sổ cái thanh toán — những phần chịu lực cốt lõi của một SaaS chụp ảnh.
// For each product in the customer's feed, kick off a try-on.
for (const product of catalog) {
await photoQueue.add("photo", {
customerId: product.customer_id,
productUrl: product.image,
productType: product.type, // "top" | "bottom" | "top_and_bottom" | "one_piece"
});
}const res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.status// A completed apparel job costs 5 credits at 2K and 6 at 4K.
// Record it to your billing pipeline so you can margin on top of it.
await billingLedger.append({
customer: data.customerId,
sku: "photo-4k",
quantity: 1,
wholesaleCost: 6, // credits, = your Photta spend
});Câu hỏi thường gặp từ developer
Vận hành một dịch vụ trên nền tảng Photta
Tôi có cần một khóa API Photta riêng cho từng tenant không?
Không bắt buộc, nhưng việc này rất hữu ích khi mở rộng quy mô. Dưới vài khách hàng, một khóa dùng chung kèm theo tính năng theo dõi mức sử dụng của từng tenant trong cơ sở dữ liệu riêng là đủ. Vượt mức đó, một khóa cho mỗi tenant giúp bạn phân định chi phí rõ ràng hơn, thu hồi khóa dễ dàng hơn và thu hẹp phạm vi ảnh hưởng khi có sự cố lộ khóa.
Tôi phải làm gì khi hết credits?
API sẽ trả về mã 402 insufficient_credits kèm theo số lượng required và available. Hãy thiết lập một ngưỡng cảnh báo tối thiểu (ví dụ: 100 credits) và nạp thêm tự động trước khi các job bắt đầu thất bại. Các job thất bại sẽ được hoàn lại credits, vì vậy một đợt phát sinh lỗi 402 hàng loạt sẽ không làm trầm trọng thêm thiệt hại.
Tôi nên định giá dịch vụ của mình như thế nào?
Photta tính 5 credits ở độ phân giải 2K, 6 credits ở 4K. Hãy quy đổi mức đó sang đơn vị tiền tệ bán lẻ của bạn (chi phí × biên lợi nhuận × tỷ lệ quy đổi credit) và quyết định tính phí theo từng ảnh, theo batch hay theo tháng. Hầu hết các sản phẩm SaaS chụp ảnh đều chọn cách tính phí theo từng ảnh kèm theo mức phí tối thiểu hàng tháng.
Photta cung cấp những SLA nào?
Thời gian hoàn thành được Photta công bố là từ 1.5 đến 4 phút cho mỗi job. Không có SLA cứng về uptime được công bố. Nếu SaaS của bạn tự cam kết thời gian xử lý riêng, hãy dự phòng khoảng đệm vào hợp đồng của bạn (ví dụ: "ảnh được bàn giao trong vòng 1 giờ" giúp bạn có khoảng đệm gấp 10 lần) và theo dõi độ trễ theo từng tenant để phát hiện sớm các hiện tượng sụt giảm hiệu năng.
Tôi có thể white-label kết quả đầu ra không?
Có. Các ảnh trả về không chứa thương hiệu của Photta. Bạn có thể chuyển chúng trực tiếp vào bucket của khách hàng và đặt domain CDN riêng của bạn ở phía trước — khách hàng của bạn không bao giờ cần biết rằng pipeline của Photta đã tạo ra chúng. Bản thân API không phải là white-label — API key và dashboard đều mang thương hiệu Photta.
Các trang liên quan
Tài liệu tham khảo
Tính năng
Virtual try-on API cho trang phục
REST API giúp mặc trang phục lên mannequin AI. Bất đồng bộ, thời gian tạo 1.5–4 phút, 5 credits ở 2K, 6 ở 4K. Kèm ví dụ cURL, Node.js và Python.
Đọ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.
ĐọcTí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.
Đọc
Mọi số liệu trên trang này đều lấy từ tài liệu Photta API · đã kiểm tra
Xây dựng và phát hành SaaS chụp ảnh trên nền tảng Photta
Cùng một API, thương hiệu của bạn, biên lợi nhuận của bạn. Lấy một API key, tích hợp ba mô hình trên vào các worker của bạn, và bạn đã hoàn thành một nửa chặng đường để ra mắt.