AI Product Photo Editor Serverless API

AI Product Photo Editor leverages advanced image-based ML techniques to generate high-quality product visuals using text prompts, product images, and background images.

~15.50s
POST /v2/ai-product-photo-editor · submit + poll
 1# pip install "segmind>=1.1.0"
 2# export SEGMIND_API_KEY="YOUR_API_KEY"
 3import segmind
 4
 5# Async (v2): submit to the queue and block until COMPLETED.
 6# run() returns the final result dict (600s deadline, 1.0s poll by default).
 7result = segmind.run(
 8    "ai-product-photo-editor",
 9    product_image="https://segmind-sd-models.s3.amazonaws.com/display_images/ppv3-test/main-ip.jpeg",
10    background_image="https://segmind-sd-models.s3.amazonaws.com/display_images/ppv3-test/bg6.png",
11    prompt="photo of a mixer grinder in modern kitchen",
12    negative_prompt="illustration, bokeh, low resolution, bad anatomy, painting, drawing, cartoon, bad quality, low quality",
13    num_inference_steps=21,
14    guidance_scale=6,
15    seed=2566965,
16    sampler="dpmpp_3m_sde_gpu",
17    scheduler="karras",
18    samples=1,
19    ipa_weight=0.3,
20    ipa_weight_type="linear",
21    ipa_start=0,
22    ipa_end=0.5,
23    ipa_embeds_scaling="V only",
24    cn_strenght=0.85,
25    cn_start=0,
26    cn_end=0.8,
27    dilation=10,
28    mask_threshold=220,
29    gaussblur_radius=8,
30    base64=False,
31)
32print(result["status"])                      # COMPLETED
33print(result.get("output"))                  # model output (e.g. media URL)
34print(result["metrics"]["inference_time"])   # server compute seconds
35
36# --- Or submit + poll manually (track request_id, control the cadence) ---
37from segmind import SegmindClient, InferenceFailed, InferenceTimeout
38
39client = SegmindClient()                      # reads SEGMIND_API_KEY
40payload = {
41    "product_image": "https://segmind-sd-models.s3.amazonaws.com/display_images/ppv3-test/main-ip.jpeg",
42    "background_image": "https://segmind-sd-models.s3.amazonaws.com/display_images/ppv3-test/bg6.png",
43    "prompt": "photo of a mixer grinder in modern kitchen",
44    "negative_prompt": "illustration, bokeh, low resolution, bad anatomy, painting, drawing, cartoon, bad quality, low quality",
45    "num_inference_steps": 21,
46    "guidance_scale": 6,
47    "seed": 2566965,
48    "sampler": "dpmpp_3m_sde_gpu",
49    "scheduler": "karras",
50    "samples": 1,
51    "ipa_weight": 0.3,
52    "ipa_weight_type": "linear",
53    "ipa_start": 0,
54    "ipa_end": 0.5,
55    "ipa_embeds_scaling": "V only",
56    "cn_strenght": 0.85,
57    "cn_start": 0,
58    "cn_end": 0.8,
59    "dilation": 10,
60    "mask_threshold": 220,
61    "gaussblur_radius": 8,
62    "base64": False,
63}
64job = client.submit_async("ai-product-photo-editor", **payload)
65print(job.request_id)                         # available immediately
66try:
67    result = job.wait(timeout=600, interval=1.0)
68except InferenceTimeout as e:
69    print("still running:", e.request_id)
70except InferenceFailed as e:
71    print("failed:", e.detail)

API Endpoint

POSThttps://api.segmind.com/v1/ai-product-photo-editor

Parameters

background_imagerequired
string (uri)

Background Reference Image

Default: "https://segmind-sd-models.s3.amazonaws.com/display_images/ppv3-test/bg6.png"
num_inference_stepsrequired
integer

Number of steps to generate image

Default: 21Range: 20 - 100
product_imagerequired
string (uri)

Product Image

Default: "https://segmind-sd-models.s3.amazonaws.com/display_images/ppv3-test/main-ip.jpeg"
promptrequired
string

Prompt for image generation

Default: "photo of a mixer grinder in modern kitchen"
samplerrequired
string

Sampler

Default: "dpmpp_3m_sde_gpu"
Allowed values (27 total):
"euler""euler_pp""euler_ancestral""euler_ancestral_pp""heun""heunpp2""dpm_2""dpm_2_ancestral""lms""dpm_fast"+17 more
base64optional
boolean

Output as base64

Default: false
cn_endoptional
number

ControlNet end value

Default: 0.8Range: 0 - 1
cn_startoptional
number

ControlNet start value

Default: 0Range: 0 - 1
cn_strenghtoptional
number

ControlNet strength

Default: 0.85Range: 0 - 2
dilationoptional
integer

Dilation value

Default: 10Range: -100 - 100
gaussblur_radiusoptional
integer

Gaussian blur radius

Default: 8Range: 0 - 20
guidance_scaleoptional
number

Scale for classifier-free guidance

Default: 6Range: 0 - 10
ipa_embeds_scalingoptional
string

IP Adapter embedding scaling

Default: "V only"
Allowed values :
"V only""K+V""K+V w/ C penalty""K+mean(V) w/ C penalty"
ipa_endoptional
number

IP Adapter end value

Default: 0.5Range: 0 - 1
ipa_startoptional
number

IP Adapter start value

Default: 0Range: 0 - 1
ipa_weightoptional
number

IP Adapter weight

Default: 0.3Range: 0 - 2
ipa_weight_typeoptional
string

Type of IP Adapter weight

Default: "linear"
Allowed values (14 total):
"linear""ease in""ease out""ease in-out""reverse in-out""weak input""weak output""weak middle""strong middle""style transfer"+4 more
mask_thresholdoptional
integer

Mask threshold value

Default: 220Range: 0 - 255
negative_promptoptional
string

Negative prompt

Default: "illustration, bokeh, low resolution, bad anatomy, painting, drawing, cartoon, bad quality, low quality"
samplesoptional
integer

Number of samples to generate

Default: 1
scheduleroptional
string

Scheduler

Default: "karras"
Allowed values :
"normal""karras""exponential""sgm_uniform""simple""ddim_uniform"
seedoptional
integer

Seed number for image generation

Default: 2566965

Response Type

Returns: Image

Asynchronous requests (v2)

Use Async for video, long-running (>~60s), or high-concurrency workloads; Sync is simplest for fast image & LLM calls. Async submits a request and you poll it to completion.

  1. 1
    POST /v2/ai-product-photo-editor

    Submitreturns request_id, status_url, response_url

  2. 2
    GET /v2/requests/{id}/status

    Polluntil COMPLETED or FAILED

  3. 3
    GET /v2/requests/{id}

    Resultfinal response body

Status states

QUEUEDAccepted, waiting for a worker
PROCESSINGRunning on a worker
COMPLETEDDone — result body is ready
FAILEDErrored (incl. content/RAI blocks)
  • A FAILED request is served as HTTP 422 — the body still carries the error detail.
  • An unknown or expired request_id returns HTTP 404.
  • Results are retained for 1 hour, then expire.
  • Content / RAI blocks surface as FAILED, not a separate state.
  • Track completion by polling the status endpoint.

Common Error Codes

The API returns standard HTTP status codes. Detailed error messages are provided in the response body.

400

Bad Request

Invalid parameters or request format

401

Unauthorized

Missing or invalid API key

403

Forbidden

Insufficient permissions

404

Not Found

Model or endpoint not found

406

Insufficient Credits

Not enough credits to process request

429

Rate Limited

Too many requests

500

Server Error

Internal server error

502

Bad Gateway

Service temporarily unavailable

504

Timeout

Request timed out