Animate a photo in a Short: why Timeline stills stay static
A still in a Timeline 1.0 slot is a static hold and its motion field is ignored. To move a photo, generate a 3-second Omni image-to-video clip and cut that in.

A photo in a Timeline 1.0 slot does not move. The docs say stills are static holds: the job accepts a motion field, ignores it, and reports motion_ignored. If you want a push-in or a subject that moves, make a short image-to-video clip with Gemini Omni Flash 1.1 first, then use the clip as a normal video slot.
Which tool does what
Timeline 1.0 is an editor, not a generator. It places, trims and joins media you already have. Moving pixels from a still is the job of POST /v1/videos.
Step 1: a 3-second clip
Send the photo as frame_images with frame_type: first_frame. Omni Flash 1.1 takes 3 to 10 seconds. Three seconds is enough for a hook shot.
{
"model": "gemini-omni-flash-1.1",
"prompt": "Slow push-in on the product, soft window light",
"duration": 3,
"resolution": "720p",
"aspect_ratio": "9:16",
"frame_images": [
{ "type": "image_url",
"image_url": { "url": "https://media.sume.com/artifacts/artf_demo/photo.png" },
"frame_type": "first_frame" }
]
}Step 2: put the clip in the timeline
Poll the job until it is done, then use the resulting URL as video[].source_url in a Timeline 1.0 body alongside your other slots and your voiceover spine.
Per-second rates are from the Sume rate card for Gemini Omni Flash 1.1.
| Resolution | Rate per second | 3 seconds |
|---|---|---|
| 360p | $0.0375 | $0.1125 |
| 720p | $0.125 | $0.375 |
| 1080p | $0.1875 | $0.5625 |
Save money
Test the prompt at 360p, since it costs less than a third of 1080p, then regenerate at the size you need. If a hold is enough, keep the still and skip the generation.
Sources
Related posts
More in Formats
- Python: turn a product CSV into Sume bulk Format queues
A short Python script splits a product manifest into batches of 100, builds one bulk body per batch with per-item spend caps, and keeps idempotency keys stable.
- Bulk queue concurrency 16 on Sume is a window, not a speed promise
Sume bulk Format runs accept concurrency 1 to 16. It limits how many children start at once and does not promise throughput. What 100 ad items really do.
- A Sume bulk queue item failed: read the child receipt first
A Sume queue item only says format_run_failed. Open the child run by run_id, compare spend to the cap, read output_error, then retry with previous_run_id.
- 100 Omni proofs, then 20 finals: two bulk queues cost $45, not $112.50
Run 100 weekly ad proofs at 360p in one Sume bulk queue, approve 20, then queue those at 1080p. Video cost: $22.50 plus $22.50 instead of $112.50.
Written by Sume