Timeline transition_not_frame_aligned: why a 0.01 s fade fails
A Timeline fade under half a frame rounds to zero frames and is refused with transition_not_frame_aligned. How many frames a fade is at 24, 25, 30 and 60 fps.

What does transition_not_frame_aligned mean?
A Timeline fade has to be a whole number of frames. Sume rounds seconds x fps to the nearest frame. If that gives less than one frame, there is nothing to round to except a hard cut, so the request is refused with transition_not_frame_aligned at the path video[i].transition.duration. Snapping a tiny fade to zero would quietly delete a transition you asked for, which the compiler's own comment names as the reason for failing instead.
Which durations fail?
The check is round(seconds x fps) below 1, so anything under half a frame fails.
| Fade seconds | 24 fps | 25 fps | 30 fps | 60 fps |
|---|---|---|---|---|
| 0.01 | 0.24 -> 0 (refused) | 0.25 -> 0 (refused) | 0.30 -> 0 (refused) | 0.60 -> 1 |
| 0.03 | 0.72 -> 1 | 0.75 -> 1 | 0.90 -> 1 | 1.80 -> 2 |
| 0.30 | 7.2 -> 7 | 7.5 -> 8 | 9.0 -> 9 | 18 -> 18 |
What if I leave output.fps out?
When output.fps is omitted, a render takes its rate from the probed sources, but checks that run before the sources are known hold at the slowest allowed rate, 24 fps. So a fade of 0.03 seconds or more passes at plan time on every allowed rate; one near 0.02 seconds is risky. Pick fades of at least 0.1 second for anything a viewer should see.
The allowed rates are 24, 25, 30 and 60. The unbilled plan call runs the same compile, so check a spec there first.
curl -X POST https://api.sume.com/v1/timeline-1.0/plan \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"audio":{"url":"https://media.sume.com/artifacts/artf_demo/voice.wav","duration_seconds":10},
"output":{"width":720,"height":1280,"fps":25},
"video":[
{"source_url":"https://media.sume.com/artifacts/artf_demo/a.mp4","start":0,"duration":5},
{"source_url":"https://media.sume.com/artifacts/artf_demo/b.mp4","start":5,"duration":5,
"transition":{"type":"fade","duration":0.01}}]}'
# 0.01 s x 25 fps = 0.25 frames -> transition_not_frame_alignedWhat is the fix?
Raise the duration to at least one frame, or remove the transition and take the hard cut. The first slot cannot carry a transition at all; see no transition on the first slot. Fades up to 1 second are allowed, and no more than half of the shorter neighbor.
Sources
Related posts
More in Media tools
- transition_snapped_to_frame: a 0.3 s fade at 25 fps is 8 frames
Timeline rounds a fade to whole frames and reports transition_snapped_to_frame as a warning, not a failure. What 0.3 s becomes at 24, 25, 30 and 60 fps.
- Why a 2-minute YouTube upload is or is not a Short in 2026
YouTube treats square or vertical uploads up to three minutes as Shorts if posted on or after October 15, 2024. What to check, and how to render one in Sume.
- YouTube Shorts series: pin one caption look for every episode
Shorts series run from 2026-09-23. Omit style and Sume picks one from the text. Pin style, font and design in one config so ten episodes look the same.
- How to assemble a long-form video with the Timeline 1.0 API
Timeline 1.0 renders one audio spine plus 1 to 200 ordered video slots into one MP4. Every URL must be Sume-hosted; the plan preflight is unbilled.
Written by Sume