render_strategy_unsafe: Timeline render single with over 12 slots
render_strategy_unsafe means render.strategy was single with more than 12 video slots. Use auto or chunked, or send 12 or fewer slots. Sume Timeline docs.

render_strategy_unsafe is the refusal you get when a Sume Timeline render sets render.strategy to single and lists more than 12 video[] slots. Remove the strategy field, or set it to auto or chunked, or cut the list down to 12 slots or fewer.
The values and the code are from the Sume docs page Timeline 1.0, read 2026-09-29.
What are the three strategies?
render.strategy accepts auto, chunked and single. The default is auto, which the docs say chunks the render once it passes 12 segments. chunked asks for chunking explicitly. single asks for one pass, and that is the only value with a slot limit.
| `render.strategy` | Behavior |
|---|---|
auto (default) | Chunks past 12 segments |
chunked | Chunked render |
single | Refused above 12 slots with render_strategy_unsafe |
How do I fix it?
The simplest fix is to drop the field. With the default auto, a 30-slot timeline is accepted and the render chunks itself. If you set single on purpose, keep the slot count at 12 or below. The limit counts slots in video[], and video[] itself takes 1 to 200 of them.
# Refused: 13 slots with "single"
"render": { "strategy": "single" }
# Accepted for any slot count
"render": { "strategy": "auto" }Do other limits still apply after I switch?
Yes. The output length comes from audio.duration_seconds, which is 1 to 1800, and the other refusals on the page do not change. Transition rules stay the same: more than 8 adjacent fades fails too_many_chained_transitions, so insert a hard cut between them. Starts must increase, and video[0].start must be 0.
How many slots can one timeline have?
video[] takes 1 to 200 slots, so single is the only path that limits you to 12. A talking-head video with a dozen b-roll cutaways sits right at the line, which is where a request that passes with 12 slots starts to fail when a thirteenth is added. The response names the code, so you can branch on it in a client instead of parsing a message, and a retry with the same body and single will hit the same refusal until the slot count or the strategy changes. Since auto already switches to chunking past 12 segments, the practical rule is to set strategy only when you have a reason to, and to expect the plain default to handle longer lists.
How do I tell a soft warning from a refusal?
A refusal like this one stops the request with a stable code. Soft warnings, such as padded or looped short sources, snapped transitions or ignored still motion, are not failures: the docs say they arrive in the result's warnings[] on a job that finished. Rates and the current price of a render are on the pricing page, and the job envelope is described in Jobs and results.
Sources
Related posts
More in Media tools
- Trim a video without re-encoding: precision keyframe in the Sume API
Sume's video trim with precision keyframe stream-copies the cut, with no re-encode. It can start a GOP early, so read actual_start_seconds in the result.
- Crop a video by fractions and the out-of-bounds error
The video filter crop op takes fractions of the frame, not pixels. Rules, the 0.05 minimum, the out-of-bounds error, and a centered 9:16 crop of a 16:9 clip.
- Darken a video with an API: the dim operation and its amount
The dim op multiplies a clip's brightness by amount in (0, 1]. 0.45 darkens, 1 changes nothing, 0 and above 1 are refused. Request, limits and cost.
- seek fast or precise: which to use for video inspect stills
Video inspect's seek option: precise decodes the exact instant, fast snaps to the keyframe at or before it and skips the decode. What changes in the result.
Written by Sume