Product photo to a 6-second vertical ad: a still is a static hold

A still in a Timeline video slot is held, not animated: motion is accepted but ignored with a motion_ignored warning. Default 1080x1920, $0.10 for 6 seconds.

5 min readSume
All posts

Yes, you can put a product photo into a Timeline video[] slot and get a 6-second vertical MP4 for $0.10, but the photo is a static hold. The docs say stills are static holds and that a motion field on a still is accepted but ignored, with a motion_ignored warning in the result. There is no zoom or pan. If you want movement, start from a video clip, not a still.

The default output is 1080x1920, so a 6-second program with a voiceover, a music bed or silence needs no size settings. The reserve is ceil(6 / 60) = 1 output minute.

What a still slot needs

A slot takes source_url, a Sume-hosted clip or still, a start on the spine and a duration of at least 0.2 seconds. video[0].start must be 0. A still has no frame rate, so a program made only of stills renders at 30 fps unless you set output.fps to 24, 25, 30 or 60.

The fit option decides what happens when the photo is not 9:16: cover crops to fill, contain adds bars, stretch distorts, and blur fills the edges with a blurred copy of the photo. A square product shot in a 1080x1920 frame looks best with blur or contain unless a crop loses nothing important.

Still-image behaviour in a Timeline slot (read 2026-10-07 from the Sume docs)
ItemBehaviour
Still in video[]Static hold for the slot's duration
motion field on a stillAccepted, ignored, reported as motion_ignored
Frame rateNone; 30 if all sources are stills
Minimum slot length0.2 s
Default output1080x1920 MP4
Price$0.10 per output minute, rounded up

A six-second render

The request below holds one photo for 6 seconds over a silent spine. audio.mode: "silence" declares the length without a file, and takes no url, parts, gain_db or source_in. Add a soundtrack for music; duck_db needs a real spine, so it is refused with silence.

curl -X POST https://api.sume.com/v1/timeline-1.0/render \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: still-ad-001" \
  -d '{
    "audio": { "mode": "silence", "duration_seconds": 6 },
    "video": [
      {
        "source_url": "https://media.sume.com/artifacts/artf_demo/product.jpg",
        "start": 0,
        "duration": 6,
        "fit": "blur"
      }
    ],
    "soundtrack": {
      "url": "https://media.sume.com/artifacts/artf_demo/bed.mp3",
      "fade_out_seconds": 1
    }
  }'

Two stills, one transition

For a before-and-after, use two slots: the first from 0 to 3 seconds and the second from 3 to 6 seconds with a transition of type fade and a duration of 0.5 seconds. The transition must be at most 1 second and at most half the shorter neighbour, which for two 3-second slots allows up to 1 second. The first slot cannot carry a transition.

Coverage can stop at most 0.5 seconds before the end of the spine, so make the slot durations add up to the spine length, or within that margin.

Length against the placement

Google's Shorts ads asset page lists specifications for Shorts ads; read it for the current lengths, since this post only covers how to render a still for a given length. The related post on YouTube bumper specs covers the six-second case. Whatever the target, check the delivered file's duration with video inspect before you upload.

If you do need movement from a photo, generate a short clip from it with an image-to-video model first, then put that clip in the slot. That is a separate, priced step; this post does not cover it.

Reading the result

When the job reaches result_ready, GET /v1/jobs/:id/result returns video_url, duration_seconds, segment_count, billable_minutes and warnings[]. For the program above you should see a duration of 6, one segment and one billable minute. If you did send a motion value by habit, the warning list will include motion_ignored; it is soft, so the render still succeeds and you are billed as usual.

Pull a still from the first and last second with video frames and compare them: for a static hold they should be identical, which is a quick way to confirm that nothing moved.

A batch of product photos works the same way. Ten photos at 6 seconds each is ten renders at $0.10, or $1.00 in all, and each needs its own idempotency key.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume