edge_fades_exceed_output: fade in and out too long for the video
Timeline 1.0 refuses fades that are too long: each edge fade is 0 to 5 seconds and fade in plus fade out must not exceed the output length.

Timeline 1.0 returns edge_fades_exceed_output when output.fade_in_seconds plus output.fade_out_seconds is longer than the output. Each value is limited to 0 to 5 seconds, and the sum has to stay within audio.duration_seconds. Shorten one of them, or lengthen the render.
The limits come from the Timeline docs, read 2026-10-01.
What are the fade limits?
| Field | Limit | Refusal code |
|---|---|---|
output.fade_in_seconds / fade_out_seconds | 0-5 s each; sum <= output length | edge_fades_exceed_output |
soundtrack.fade_out_seconds | Up to 10 s; not longer than the spine | soundtrack_fade_exceeds_output |
video[].transition duration | Up to 1 s and 50% of the shorter neighbour | transition_too_long |
Why does a 6-second fade fail on a long video?
The 5-second cap is per edge, independent of how long the video is. A fade of 6 seconds is outside 0 to 5 even on a ten-minute render. A short render hits the other rule: on an 8-second output, a 5-second fade in and a 4-second fade out sum to 9, which is more than 8.
What about the music fade?
The optional soundtrack bed has its own fade_out_seconds, capped at 10. The docs list soundtrack_fade_exceeds_output for a fade longer than the spine, so a 10-second music fade on a 6-second render fails even though 10 is allowed in general. For ducking music under a voice, see Timeline duck.
How do I avoid the error before rendering?
Clamp in your own code before you submit: keep each edge fade at or below 5, and keep the sum at or below audio.duration_seconds. The unbilled plan call also runs the validation without creating a job or reserving credits.
One related note from the Descript changelog (September 17): smart transitions no longer fade in on the first scene, so a video does not open on black. In Timeline the first slot cannot carry a transition at all (transition_on_first_segment); an opening fade is set with output.fade_in_seconds.
Sources
Related posts
More in Developers
- x-fal-billable-units header: WebSocket billing vs Sume receipts
fal bills WebSocket sessions via x-fal-billable-units headers. Sume has no such header: cost is a per-job ledger row you read back by job or run.
- Fix lens distortion in video by API with lenscorrection
Sume's video filter allowlists ffmpeg's lenscorrection, so barrel distortion from a wide action-cam clip can be corrected by coefficients you choose and test.
- FLUX.2 JSON prompt: on Sume it is text in the prompt field
BFL says FLUX.2 accepts JSON-structured prompts. On Sume, prompt is a plain string, so JSON goes in as text; other fields are typed.
- FLUX.2 LoRA API: finetune_id on BFL, not on Sume
BFL serves klein LoRAs through -finetuned endpoints with finetune_id. Sume rejects provider-specific parameters, so use reference images instead.
Written by Sume