Timeline output fps: omit it to follow your clips, or get a warning
Leave output.fps out and Timeline 1.0 follows your longest video sources. Force 30 on 24 fps clips and the job warns output_fps_resamples_sources.

Leave output.fps out of a Timeline 1.0 render and the job follows the frame rate of your sources. The docs say the longest video sources decide. If you force a rate that differs from a source, the job repeats or drops a frame every few frames, which causes judder on motion, and the result carries the warning output_fps_resamples_sources with the rate that the sources wanted.
How the rate is chosen
The default output is a 1080x1920 MP4. The rate follows this order, from the Timeline docs.
| Case | Resulting rate |
|---|---|
| output.fps omitted, sources have a rate | the rate of the longest video sources |
| output.fps omitted, only stills | stills have no rate; 30 applies only when no source has a rate |
| output.fps set to 24, 25, 30 or 60, same as the sources | no resample |
| output.fps set and different from a source | frames repeated or dropped; warning output_fps_resamples_sources |
| any other output.fps value | refused: allowed values are 24, 25, 30, 60 |
A worked example
Say you have three AI-generated clips at 24 fps and one 30 fps screen recording of the same length. The longest sources decide, so if the three AI clips are longer in total than the recording, the output follows 24 fps. The 30 fps recording is then resampled to 24. If you want to avoid that, record or re-encode the screen capture at 24 fps before you import it.
If you set output.fps to 30 for the same job, the three AI clips are resampled instead. Neither choice is wrong, but the warning tells you which part of the picture moved from its native rate. Read the warnings[] in GET /v1/jobs/:id/result and decide before you publish.
The same warning in compose
Timeline compose has the same behaviour for a single shot. Its default output is 1080x1920 at the frame rate of the video layer, which the docs call the only rate that does not repeat or drop a frame. An explicit output.fps that differs from the clip warns output_fps_resamples_sources. Compose is a flat $0.02 per job and the render step that follows is $0.10 per ceil(output minute).
Why judder shows up
Moving from 24 to 30 fps means that every fourth frame must be shown twice. The eye sees that as an uneven rhythm on pans and walking subjects, even if each frame is sharp. Static shots and talking heads hide it. That is why the warning matters most for camera moves in generated clips.
A practical rule
Find the rate of each clip first. Video inspect returns probe facts for a Sume-hosted clip, and you can pass frames: false if you want no stills. Then pick one of these:
- All clips share one rate: omit
output.fps. - Clips have mixed rates and one rate dominates by length: omit
output.fpsand accept that the minority is resampled. - The destination needs a fixed rate: set
output.fpsand expect the warning if any source differs. - Only stills and a silent spine: the job uses 30 when no source has a rate.
Sources
Related posts
More in Media tools
- A 7:30 Timeline render bills 8 minutes: cut 30 s to save $0.10
Timeline 1.0 charges $0.10 per ceil(output minute). A 450-second render is 8 minutes, $0.80; trimming it to 420 seconds bills 7 minutes, $0.70. Table and code.
- Timeline render_strategy_unsafe: why single fails above 12 slots
Timeline returns render_strategy_unsafe when strategy single is used with over 12 slots. Leave it on auto, which chunks past 12 segments. Limits and the fix.
- Timeline too_many_chained_transitions: 8 fades, then a hard cut
Sume Timeline allows at most 8 adjacent fades and returns too_many_chained_transitions past that. Each fade is 1 s or less and 50% of the shorter slot. The fix.
- Transcribe a video in one call: video-inspect with sentence segments
Skip detach: video-inspect with transcribe true returns a transcript with words and sentence segments, at $0.01 per audio minute plus the inspect's compute.
Written by Sume