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

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.

  1. 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á.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

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.