One approved backdrop for 200 product photos: reference edit cost

Use one approved scene as the first reference and each product shot as the second, in Ideogram 4.5 on Sume. 200 photos cost $7.50 at low and $15 at medium.

5 min readSume
All posts

To give 200 product photos the same background, approve one scene first, then send it as the first reference with each product photo as the second. On Sume's Ideogram 4.5 that is 200 calls at $0.075 each at medium quality, or $15, and $7.50 at low. The first reference is the image the model edits; the rest are references, so the order matters: the scene goes first, the product second.

Why the scene goes first

In the Image API docs, a call with references edits the first image and uses up to four more. If you put the product first, the model edits the product photo and may keep its table, wall and light. Put the approved scene first and tell the prompt to place the product from the second image into it.

Pick the scene with the products in mind. A busy scene with strong colour will tint white products and compete with labels; a plain surface with one clear light direction is easier for the model to match. Save the approved scene at the size you want outputs, since the output shape follows it.

Do not set aspect_ratio unless you want a change; an edit without it keeps the source shape, which here is the scene's shape. Every output then shares one frame, which is what a catalog grid wants.

The loop

The script below runs up to four requests at once with a semaphore. It reads the key from SUME_API_KEY and prints each HTTP status. The Image API answers synchronously for 30 seconds and then returns a 202 job envelope, so a production loop should handle both a 200 with images and a 202 with a job to poll; this sketch only reports the status code.

import asyncio, os
import httpx

BACKDROP = "https://example.com/approved-backdrop.jpg"  # your approved scene
PRODUCTS = [
    "https://example.com/p/001.jpg",
    "https://example.com/p/002.jpg",
]
PROMPT = ("Place the product from the second image into the scene from the "
          "first image, centred on the table, with a soft shadow.")

async def one(client, sem, url):
    async with sem:
        r = await client.post(
            "https://api.sume.com/v1/images",
            headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
            json={"model": "ideogram/ideogram-v4.5", "prompt": PROMPT, "quality": "low",
                  "input_references": [
                      {"type": "image_url", "image_url": {"url": BACKDROP}},
                      {"type": "image_url", "image_url": {"url": url}}]},
        )
        return url, r.status_code

async def main():
    sem = asyncio.Semaphore(4)
    async with httpx.AsyncClient(timeout=60) as client:
        for url, status in await asyncio.gather(*(one(client, sem, u) for u in PRODUCTS)):
            print(status, url)

asyncio.run(main())

Budget by quality

Ideogram's per-image price does not change with size, so the count drives the bill. The prices come from the provider list ($0.03, $0.06 and $0.22) multiplied by Sume's 1.25.

200 reference edits on Ideogram 4.5 at Sume prices (read 2026-10-07)
QualityPer image200 images
low$0.0375$7.50
medium$0.075$15.00
high$0.275$55.00

Approve in rounds

Do not send all 200 at once. Run ten products across different shapes: tall bottles, flat boxes, shiny items. Look for products that float, lose their label or pick up the scene's colours. Fix the prompt on those ten, then run the rest. A failed generation is not billed under the Sume docs, but a successful image with a floating bottle is, and you pay for it.

Write the prompt once and freeze it. If the wording changes halfway through, the first 100 and the last 100 will not match, and you cannot tell afterwards which prompt made which image. Store the prompt string with each output URL.

Name the files after the product code and keep the source URL in a sheet, so a client who rejects photo 117 can be answered with the exact request that made it. Retries are then a lookup, not a hunt.

Expect to spend more on the awkward ten per cent. Rerun those at high quality instead of raising the whole batch. For a batch that varies one setting at a time, n variants in one call lists the per-model limits.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume