Vidu Q4 Preview has a seed field; Sume video models reject seed

Vidu Q4 Preview image-to-video takes a custom seed. Sume video models report seed false and return 400 unsupported_parameter if you send one.

4 min readSume
All posts

Vidu Q4 Preview's image-to-video endpoint takes a customizable random seed for reproducibility. Sume's /v1/videos does not: every model in the video catalog reports seed: false, and a request that includes seed returns 400 unsupported_parameter. If your code was written against Vidu and passes a seed on every call, remove it before you point the same payload at Sume, or you will get an error instead of a clip.

Why Sume rejects it

The Sume video contract is a copy of the OpenRouter video API with a short list of documented differences, and seed is one of them. No video family in the v1 catalog exposes a seed, so the API refuses the field instead of dropping it silently. Its own design notes say a loud 400 is better than generating something the caller did not ask for and charging for it. The same rule applies to size and to a non-empty provider.options.

Fields that differ, read 2026-10-08
FieldVidu Q4 Preview (image-to-video)Sume /v1/videos
seedAccepted400 unsupported_parameter
size (WxH)Not listed; resolution and duration are400 unsupported_parameter
provider.optionsNot applicable400 when non-empty
resolution540p, 720p, 1080p, 2K, 4KPer model, from supported_resolutions
IdempotencyNot documented on the page readIdempotency-Key header

What to use instead of a seed

Reproducibility on Sume comes from the request, not a seed. A pinned first frame, a fixed prompt, a named model and an Idempotency-Key give you a stable job: replaying the same key with the same body returns the original job, while the same key with a different body is a conflict.

Steps:

  • Strip seed from any payload ported from Vidu.
  • Pin the look with a first_frame image in frame_images.
  • Name the model, for example wan-3.0, rather than sume/auto, if you want a fixed family.
  • Send an Idempotency-Key per shot so a client retry does not create a second job.
{
  "model": "wan-3.0",
  "prompt": "Slow push-in on the sneaker, studio light",
  "resolution": "720p",
  "duration": 5,
  "frame_images": [
    {
      "type": "image_url",
      "image_url": {"url": "https://example.com/sneaker.png"},
      "frame_type": "first_frame"
    }
  ]
}

Handling the error in a shared client

If one client has to talk to both services, build the payload from a per-provider allow-list instead of one shared object. The Vidu path may include seed; the Sume path must not. A small function that drops unsupported keys before the call is enough, and a unit test that posts a payload with a seed and expects the key to be gone will stop the 400 from reaching production.

When the error does come back, read the body. Sume answers with the public error envelope and a code, unsupported_parameter, so you can match on the code rather than parsing the message. Log the code and the field name, and fail the shot instead of retrying, because a retry with the same body will fail the same way.

Repeatability without a seed

Without a seed, treat every generation as a new draw. Keep the prompt, the model id, the resolution and the output file together, and approve takes by watching them rather than by regenerating. If you need the same look across a series, use image or reference inputs where the row accepts them instead of relying on a number.

What Sume does not do

Sume does not give you bit-for-bit repeatable video. Even where a provider accepts a seed, the Sume docs note that the result is not deterministic on all providers. Treat every render as a new draw and keep the accepted file, not the recipe.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume