Square product photos to 9:16: timeline fit cover, contain or blur

Sume Timeline 1.0 renders 1080x1920 by default. Use video[].fit cover, contain, stretch or blur to place square product photos in a vertical holiday clip.

4 min readSume
All posts

To turn square product photos into a vertical video, set fit on each video[] slot of a Sume Timeline 1.0 request: cover (the default) fills the frame and crops, contain fits the whole photo with bars, stretch distorts to fill and blur fills the bars with a blurred copy of the image. The default output is a 1080 by 1920 MP4, which is 9:16. A render is $0.10 per ceil(output minute), so a 20 second clip is $0.10.

For product photos, blur or contain usually protects the item, while cover can cut off the edges of a square pack shot.

What each fit does to a 1:1 photo

A 1080 by 1080 square placed into 1080 by 1920 has a lot of spare height. The fit setting decides what happens to it.

Fit modes on a square photo in a 9:16 frame (read 2026-10-04, from the docs)
fitEffectRisk for a product shot
cover (default)Fills the frame; crops the sidesCuts off the left and right of the product
containShows the whole image; leaves empty barsLooks plain without a background
stretchStretches to the frameDistorts the product; avoid
blurFills the bars with a blurred copyUsually the safest default

A request

Declare the spine first, then one slot per photo. With audio.mode: silence, you declare a length with no audio file. The first slot must start at 0, and slots must have increasing starts. Run the unbilled POST /v1/timeline-1.0/plan first, so any timing mistake is caught for free.

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": {"mode": "silence", "duration_seconds": 6},
    "video": [
      {"source_url": "https://media.sume.com/artifacts/a/pack1.jpg", "start": 0, "duration": 3, "fit": "blur"},
      {"source_url": "https://media.sume.com/artifacts/a/pack2.jpg", "start": 3, "duration": 3, "fit": "blur"}
    ]
  }'

Other sizes and what to check

You can set output.width and output.height to even integers from 256 to 2160, so a square 1080 by 1080 or a 1920 by 1080 landscape is possible in the same API. For a feed that needs 9:16, leave the default.

Still images are static holds. If you add a motion field to a still, the job ignores it and reports motion_ignored, a soft warning, not a failure. Read warnings[] in the result. Then look at the first and last frame with a quick frame check, because blur backgrounds can look odd with a white-background pack shot.

Two more habits help. Make every photo the same size before upload so the crop is consistent from slot to slot. And name the output by SKU and fit mode, so you can compare a blur and a contain version of the same clip side by side before you ship 100 of them.

  • Default output is 1080x1920.
  • blur protects a square pack shot.
  • Plan first; it is unbilled.

A product-photo workflow

Prepare once, render many. Export every pack shot at the same square size on a clean background, upload them with the media import call, and keep the returned hosted URLs in your sheet. Then build the slots from the sheet: one photo per slot, three seconds each, fit set to blur. A script that loops over rows will produce a timeline body for each product in a few lines.

Choose by product type. Boxed goods with straight edges survive cover well because a crop of the sides loses only margin. Round or tall items, like a candle or a bottle, are easy to clip, so use contain or blur. Never use stretch for packaging, because a bent logo is a bad look in a holiday ad and a trust problem for a shopper.

If you run a batch, make one test render per fit mode on three representative products before you commit. Each is a minute-or-less job at $0.10, so nine tests cost $0.90, and they settle the choice for the rest of the catalog with real output instead of a guess.

Related posts

More in Media tools

All Media tools posts

Written by Sume