Seedream 4.5 edit: swap a product with up to 10 references

fal describes Seedream 4.5 edit as multi-reference product replacement and text overlay with no masking tool. The same shape of call on Sume.

5 min readSume
All posts

To swap a product in a photo with Seedream 4.5, send the scene and the new product as reference images and say in the prompt which goes where. fal's page for the edit endpoint says you can reference up to 10 images per edit, that spatial directions come from the prompt with no manual masking, and that it targets e-commerce product composites. On Sume the same model is bytedance-seed/seedream-4.5, and references go in input_references.

Model facts are from fal's Seedream 4.5 edit page, read 2026-10-03. Sume request rules are from the Image API docs.

What fal says about the edit endpoint

The page unifies generation and editing under natural-language instructions and names product replacement and text overlay composition as examples of the multi-image workflow. It lists a maximum output of 4MP (2048x2048), configurable dimensions of 1920 to 4096 pixels per axis, PNG output, a price of $0.04 per edit and roughly 60 seconds per request on fal.

Seedream 4.5 edit facts on fal's page (read 2026-10-03)
ItemValue
References per editUp to 10 images
Price$0.04 per edit
Maximum output4MP (2048x2048)
Typical processingAbout 60 seconds per request on fal

The call on Sume

The Sume docs use Seedream 4.5 as their own catalog example with input_references from 0 to 10 and note that reference URLs must be public HTTPS. For an edit, the docs advise aspect_ratio: "auto" to match the reference; omitting the field is not the same as auto, and a model only accepts the values its descriptors list. Put the scene first and the product second, and name both in the prompt.

import os
import requests

key = os.environ["SUME_API_KEY"]
payload = {
    "model": "bytedance-seed/seedream-4.5",
    "prompt": "Image 1 is the room. Replace the lamp on the table with the lamp in image 2; keep everything else unchanged",
    "input_references": [
        {
            "type": "image_url",
            "image_url": {
                "url": "https://example.com/room.png"
            }
        },
        {
            "type": "image_url",
            "image_url": {
                "url": "https://example.com/lamp.png"
            }
        }
    ],
    "aspect_ratio": "auto"
}
resp = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {key}"},
    json=payload,
    timeout=60,
)
if resp.status_code == 200:
    print([item["url"] for item in resp.json()["data"]])
elif resp.status_code == 202:
    print("still running:", resp.json()["data"]["status_url"])
else:
    print(resp.status_code, resp.text)

Limits

A 60-second edit on fal's page is longer than Sume's 30-second blocking wait, so expect a 202 job envelope for some calls and read the result from the job result endpoint. Check the catalog before relying on aspect_ratio: "auto" for this model; the docs say descriptors decide which values are accepted. Product swaps change pixels, so compare label text and logos against the real product before publishing.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume