Omni and Seedance clips in one timeline: the fps resample warning
Clips from two video models can have different frame rates. Sume's timeline warns with output_fps_resamples_sources; probe each clip, then set output.fps.

If you join clips from two models in one Sume timeline, set output.fps yourself after you check each clip's rate. If you omit it, the render uses the rate of the sources (the longest video sources decide). When that rate differs from a source's own rate, the job repeats or drops a frame every few frames, which shows as judder on motion, and the job reports a soft warning, output_fps_resamples_sources, with the rate the sources wanted.
When this happens
A 40-second cut that mixes a Seedance 2.5 shot with Omni clips is a plausible plan. Seedance 2.5 gives up to 30 seconds per generation (ByteDance Seed, read 2026-10-05), and Sume lists seedance-2.5 at 4 to 30 seconds (Sume docs: Video generation, read 2026-10-05). A 30-second Seedance shot plus one 10-second Omni clip makes 40 seconds with one seam, as Google's own 40-second extension ceiling would (Google, read 2026-10-05).
Different models can output different frame rates. This post does not claim what either model emits. Read the rates from your own files.
Find each clip's rate
POST /v1/video-inspect returns a probe and stills for one media.sume.com clip. Send frames: false for the probe only. Read the frame rate of each clip from it (Sume docs: Video inspect, read 2026-10-05). Inspect bills its Modal compute and holds a ceiling at submit, so check the receipt for the amount.
Pick a rate and conform the outlier
Only 24, 25, 30 and 60 are valid for output.fps; any other value is a 400. A trim with output needs precision: exact, which re-encodes the clip.
| Option | How | Cost | Trade-off |
|---|---|---|---|
| Accept the majority rate | Set output.fps to 24, 25, 30 or 60 to match most clips | None | The outlier clip is resampled |
| Conform the outlier first | POST /v1/video-trim with output: { fps } on that clip, exact precision | $0.02 per job | One extra job and a re-encode |
| Leave it unset | Omit output.fps | None | The sources decide; you get the warning if they disagree |
Read the warning, do not hide it
Soft warnings are not failures. The render still completes. Treat output_fps_resamples_sources as a prompt to look at the cut on a fast pan, where judder shows. If the shots are mostly static or slow, a resample can pass unnoticed, and the warning is a note, not a fix. If you are cutting a fast action sequence, conform first.
Keep a small table of source rates by model in your own notes, built from probes. When a model updates, re-probe: a rate you measured on one release is not a promise for the next.
A practical order of work: generate the clips, inspect each, pick the rate most of the footage already has, conform the rest, then plan the timeline with output.fps set. The plan is unbilled, so it is a safe place to check slot starts before you spend on the render.
One more point on stills. A still image slot has no frame rate, so it never counts toward the rate the sources want. If your cut has a title still between two clips, only the clips decide the rate when you omit output.fps.
Sources
Related posts
More in Developers
- mode subscribe on Sume images is a 30-second wait: poll instead
On Sume, mode subscribe is an alias of sync with one wait of at most 30 seconds and no events. For a longer wait, submit async and poll status in your client.
- Model calls image-generations_create? Use generate_image
New LLMs may emit old Sume tool names. The hosted server maps dots to underscores and documents two retired aliases that now point at new names.
- 'model_params has an empty allowlist': omit it or send {}
Video Router v1 has no pass-through knobs. model_params with any key gets a 400; {} is fine. /v1/videos refuses provider.options the same way. What to change.
- Move an edit call from /v1/image-1.0/generate to POST /v1/images
Field map for moving an image edit call from the retiring Image 1.0 URL to POST /v1/images: image_urls becomes input_references, num_images becomes n.
Written by Sume