Fast-cut Shorts in Timeline: eight chained fades, then a hard cut

Timeline refuses more than 8 adjacent fades with too_many_chained_transitions. Transitions must be 1 s or less and half the shorter neighbour. How to plan cuts.

5 min readSume
All posts

In a Timeline render you can chain at most eight adjacent fades; a ninth is refused with too_many_chained_transitions, and the docs tell you to insert a hard cut. A hard cut is a slot with no transition. Each transition must be at most 1 second, at most 50% of the shorter neighbouring slot, and at least one output frame. So a fast-cut Short with many slots needs a mix: transitions where you want softness, hard cuts everywhere else.

Transitions are optional and are set per slot after the first. video[0] cannot carry one; that is refused with transition_on_first_segment.

The rules in one place

The types are fade, wipeleft, wiperight, slideup, slidedown and dissolve. The duration sits in the transition object. Because the compiler compensates for the crossfade overlap and never pre-shifts the declared starts, you keep writing each slot's start as the moment it begins on the spine.

The 50% rule bites with short clips. For two neighbours of 0.8 and 2 seconds, the shorter is 0.8, so the transition cannot exceed 0.4 seconds. At 30 fps one output frame is 1/30 = 0.033 seconds, so very small durations are also refused as transition_not_frame_aligned.

Transition limits in Timeline 1.0 (read 2026-10-07 from the Sume docs)
RuleLimitRefusal code
Maximum transition length1 stransition_too_long
Relative to neighboursAt most 50% of the shorter onetransition_too_long
MinimumAt least one output frametransition_not_frame_aligned
Adjacent fades in a row8too_many_chained_transitions
On the first slotNot allowedtransition_on_first_segment

Planning a 30-slot Short

YouTube's three-minute Shorts page says Shorts can run up to 3 minutes. A Short of that length built from 6-second clips has 30 slots. If you gave every slot a fade you would hit the limit at slot nine, so group the slots: fade within a scene of four or five clips, then hard-cut between scenes.

Past 12 slots the render strategy matters as well. render.strategy: auto, the default, chunks the job; single above 12 is refused with render_strategy_unsafe. Leave it on auto for a long cut.

import json, os, urllib.request

body = {
    "audio": {"mode": "silence", "duration_seconds": 12},
    "video": [
        {"source_url": "https://media.sume.com/artifacts/artf_demo/a.mp4",
         "start": 0, "duration": 4},
        {"source_url": "https://media.sume.com/artifacts/artf_demo/b.mp4",
         "start": 4, "duration": 4,
         "transition": {"type": "fade", "duration": 0.5}},
        {"source_url": "https://media.sume.com/artifacts/artf_demo/c.mp4",
         "start": 8, "duration": 4},
    ],
}
req = urllib.request.Request(
    "https://api.sume.com/v1/timeline-1.0/plan",
    data=json.dumps(body).encode(),
    headers={
        "Authorization": "Bearer " + os.environ["SUME_API_KEY"],
        "Content-Type": "application/json",
    },
)
print(urllib.request.urlopen(req).read().decode())

What the plan tells you

The plan call takes the same body as render, creates no job and needs no idempotency key. It returns segment_count, billable_minutes and filtergraph_summary, so you can confirm a 12-second silent program as three segments and one billable minute, $0.10. It is a way to catch a bad transition before you spend anything on the render.

Silence mode is handy for cut tests, since it takes no audio file; audio.mode: "silence" takes no url, parts, gain_db or source_in.

Cuts that read as fast

A hard cut is often better for pace than a fade: a fade of 0.5 seconds on a 2-second clip spends a quarter of the clip blending. Reserve fades for scene changes, use hard cuts inside a scene, and your video stays inside the chain limit without having to count.

Counting transitions in a program

Before you send a long program, count the adjacent slots that carry a transition. Only a run of consecutive fades counts toward the limit of eight, and a slot without a transition ends the run. In a 30-slot cut, a pattern of four fades and then one hard cut repeated six times never gets near the limit.

You can generate the program rather than write it by hand. Loop over your clips, give every slot a start equal to the sum of the earlier durations, and attach a transition only when the slot index is not a multiple of five. The starts must increase and video[0].start must be 0, or the render is refused with timeline_must_start_at_zero or invalid_segment_timing.

Run the plan call on the generated program. It costs nothing and its segment_count should equal your slot count, which catches an off-by-one in the loop before a render does.

Cost of the cut

Transitions do not change the price. A 180-second program is 3 billable minutes, $0.30, whether it has no transitions or twenty. The price follows the length of the audio spine, so a long fast-cut costs the same as a long slow one.

If a refusal does arrive, fix the program and submit again.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume