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.

Sume Timeline accepts at most 8 chained fades. A ninth adjacent transition returns too_many_chained_transitions, and the fix is to leave one slot's transition out, which makes a hard cut and starts the count again.
Transition rules
| Rule | Limit |
|---|---|
| Allowed on | Slots after the first only |
| Types | fade, wipeleft, wiperight, slideup, slidedown, dissolve |
| Duration | 1 s or less, 50% of the shorter neighbor at most, at least one frame |
| Adjacent chain | 8 at most |
| Output edge fade in and out | 0 to 5 s each, sum no larger than the output |
Breaking up a long fade chain
In a 20-shot trailer, fade between shots 1 to 8, leave shot 9 without a transition, then fade again. The cut reads as a beat, which suits a trailer. Declared start values stay authoritative, because the compiler compensates for the overlap of a fade and does not pre-shift.
Short slots need short fades. A 0.4 second slot with a neighbor of 1 second can carry a fade of 0.2 seconds at most, since the cap is half of the shorter slot.
Related errors
invalid_segment_timingorsegment_overlap: starts do not increase, or slots overlap past the fade.edge_fades_exceed_output: the start and end fades are longer than the output.duck_requires_audio_spine:soundtrack.duck_dbwas set with silence.
Counting a chain
Count adjacent slots that each carry a transition. Slots 2 through 9 with a fade each make a chain of eight, which is allowed. Put a fade on slot 10 as well and the chain is nine, which is refused. Leaving slot 10 without a transition makes a cut between slot 9 and 10, and slot 11 can start a new chain.
A style point: fades on every cut feel soft and slow. A mix of mostly hard cuts with a fade at a scene change is easier to watch and avoids the limit.
Check before you send
A quick script can count the run of transitions in your video[] array and warn at eight. It takes a few lines, and it saves a failed request on a 100-slot montage.
A small checker
The check is a loop over the slots. Count consecutive entries that have a transition and report the first index where the count passes eight.
def first_overlong_chain(video, limit=8):
run = 0
for i, slot in enumerate(video):
run = run + 1 if slot.get("transition") else 0
if run > limit:
return i
return NoneFade length
The fade duration must be 1 second or less and at most half of the shorter neighbor. For a 24-shot trailer with 1.25-second shots the largest fade is 0.625 seconds, so ask for 0.5. Keep the value inside the stated limits.
Why the cap exists
Each fade overlaps two neighbors, and a long chain of overlaps makes the filter graph for the render large. The limit keeps requests predictable. The docs do not give a deeper reason, so treat the number as a contract: 8 chained fades are fine, 9 are refused, and a hard cut resets the count.
Sources
Related posts
More in Media tools
- 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.
- Transcribe and probe in one call: video-inspect STT at $0.01/min
Add transcribe: true to a video-inspect request for sentence segments and word timings at $0.01 per audio minute. The duration hint, 600 s cap and refusals.
- Transparent product cutout, GPT Image 2.5: webp alpha, 7 cents
Send background transparent and output_format webp or png on Sume's GPT Image 2.5 to get a product cutout with alpha, about 7 cents at high quality.
- Transparent sticker: GPT Image 2.5 background field or Nano Banana 2.1
Only GPT Image 2.5 lists a background field on Sume. Nano Banana 2.1 does not, so a transparent PNG there is $0.10 plus a $0.0225 background-removal step.
Written by Sume