Ideogram 4.5 seed on Sume returns 400: how to repeat an edit

Ideogram's own API takes a seed for 4.5 edits, but Sume returns 400 unsupported_parameter for seed on every image model. Keep the output URL, not the seed.

4 min readSume
All posts

Sending seed to POST /v1/images returns 400 unsupported_parameter on Sume, whatever the model, so you cannot ask for the same edit twice and get the same pixels back. If you need a repeatable result, store the output URL of the version you liked and use it as the next input instead of trying to re-roll it.

What the two APIs do

Ideogram's reference for 4.5 Precise Edit lists a seed field (Ideogram API reference, read 2026-10-05). The Sume Image API does not pass one through: the code rejects seed and output_compression with the message that no image model advertises the parameter in v1. stream: true is refused too, with streaming_not_supported.

Fields that fail on POST /v1/images (read 2026-10-05, Sume main)
FieldResultCode
seed400unsupported_parameter
output_compression400unsupported_parameter
stream: true400streaming_not_supported
any unknown field400unsupported_parameter

A repeatable workflow without a seed

The Sume result for an image is a durable URL on media.sume.com, and usage.cost on the response shows what was billed (Jobs and results). Treat each accepted result as an asset:

  • Save the URL, the prompt and the model id together when you accept a result.
  • To change one thing, send the saved URL as the first input_references entry with a one-line prompt. The edit starts from the pixels you approved, not from a random draw.
  • To compare options, ask for n up to 4 in one call and pick one. That is the Sume way to get variety, and the choice is stored as a URL.
  • Do not re-run the original prompt to recover a lost image. Without a seed it is a new draw.

Example: strip the field before you call

If a client library adds seed by default, drop it before the request or you will get the 400 on every call.

import os, requests

body = {
    "model": "ideogram/ideogram-v4.5",
    "prompt": "Make the label text sharper",
    "input_references": [{"image_url": {"url": "https://example.com/v2.png"}}],
}
body.pop("seed", None)
r = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json=body,
    timeout=120,
)
print(r.status_code)

When this is a real limit

If your process needs bit-exact reproduction, for example an audit trail that regenerates an image, Sume's image route does not fit. Keep the generated file itself as the record. For ordinary editing work, the saved URL is the better record anyway because it is the exact pixels a person approved.

A small record to keep

Store one row per accepted image: model id, quality, prompt, the input URL and the output URL. With that row you can explain any image later and you can branch from it, which is what a seed would have given you in a tool that supports one.

Review the row before you branch. If the prompt that produced the approved image used several changes at once, split them into separate edits on the next turn so each change can be judged alone.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume