Amazon Sponsored Brands video: no letterboxing, lower right clear
Amazon's Sponsored Brands video spec says avoid letterboxing and keep text out of the lower right. Test both on a still pulled with Sume video frames.

Amazon's Sponsored Brands video page says to avoid letterboxing or pillarboxing, and to keep text and other important information out of the lower right corner (read 2026-10-03). Both are checks you can run on a single still. Sume's video frames returns a frame at the source size, and a few lines of Pillow find black bars at the edges and measure how busy the lower right area is. Sume does not detect text, so the corner check ends with you looking at the picture.
Here are the rules the page sets, and a script that tests the two that a still can show.
What Amazon lists
The same page sets a length of 6 to 45 seconds (20 seconds or less highly recommended), 16:9 square-pixel video only, resolutions of 1280 x 720, 1920 x 1080 or 3840 x 2160, and a maximum file size of 500 MB in .MP4 or .MOV. Codec, profile, frame rate, bit rate and audio each have their own rows (read 2026-10-03). The page lists these two warnings as a key restriction, which makes them easy to miss when you only copy the numbers.
| Rule | Amazon's wording | How to test |
|---|---|---|
| Aspect ratio | 16:9 (square pixel) only | Probe width and height |
| Letterboxing or pillarboxing | Avoid | Look for black bars in a still |
| Lower right corner | No text or other important information | Open a still and look |
| Length | 6 to 45 seconds, 20 or less recommended | Probe the duration |
Find black bars in one still
Pillarboxing happens when a vertical video is placed inside a 16:9 frame, leaving dark columns on both sides; letterboxing leaves rows above and below. Both show up in a still as edge strips with almost no brightness. Video frames returns up to 24 stills per call at at timestamps, each inside the clip.
The script pulls a frame at 3 seconds, finds the image URL in the result, and measures the mean brightness of the outer 6 percent on each side. A value near zero on both sides suggests bars. The 6 percent and the threshold of 12 are my starting guesses, so adjust them for your footage, since dark scenes can trip the test. It also saves a crop of the lower right fifth to corner.png so you can look for text.
import os, time, requests
BASE = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def run(path, body, key):
r = requests.post(BASE + path, headers={**H, "Idempotency-Key": key}, json=body)
r.raise_for_status()
job = r.json()["request_id"]
while True:
s = requests.get(f"{BASE}/v1/jobs/{job}/status", headers=H).json()["status"]
if s in ("completed", "failed", "canceled"):
break
time.sleep(3)
return s, (requests.get(f"{BASE}/v1/jobs/{job}/result", headers=H).json() if s == "completed" else None)
import io, json, re
from PIL import Image
status, res = run("/v1/video-frames", {"video_url": "https://media.sume.com/artifacts/artf_demo/sb.mp4", "at": [3]}, "sb-still-001")
m = re.search(r"https://media\.sume\.com/[^\"\s]+", json.dumps(res) if res else "")
im = Image.open(io.BytesIO(requests.get(m.group(0)).content)).convert("L")
w, h = im.size; e = int(w * 0.06)
left = sum(im.crop((0, 0, e, h)).getdata()) / (e * h)
right = sum(im.crop((w - e, 0, w, h)).getdata()) / (e * h)
print("edge brightness", round(left, 1), round(right, 1), "bars?" if max(left, right) < 12 else "ok")
im.crop((int(w * 0.8), int(h * 0.8), w, h)).save("corner.png")
Why the lower right matters
Amazon's page gives the instruction without a reason, so do not invent one. A reasonable guess is that the player or the surrounding page places controls or badges there, but the page does not say, and the only safe move is to follow it. Keep the product, the price and any legal line toward the left and centre of the frame, and use the lower right for nothing that matters.
This also changes how you think about burned-in captions. Centred captions placed in the middle band are safe, but a caption that runs to the right edge on a long line can reach the corner. Keep lines short, and check the longest line in the clip, not the first one you see.
Run the check on more than one frame
A single still can mislead. A title card may be full-frame while the rest of the clip has bars, or the opposite. Ask for several timestamps in the same call, for example one near the start, one in the middle and one near the end, and run the same test on each. The endpoint allows up to 24 stills per call, so three is cheap.
Keep the results in your campaign notes along with the date you read Amazon's page. When you hand the clip to a teammate, the notes tell them which checks were run and which still need a human look.
If the clip has bars or a busy corner
A vertical source cannot simply be stretched to 16:9. You can crop it with video filter, whose crop op takes a rectangle as fractions of the source frame (x, y, width, height), and the result is a new MP4. Cropping a vertical clip to a 16:9 band throws away most of the picture, so often the better answer is a new composition for the horizontal format.
For the corner, move the text rather than the whole frame. If you burn captions with Sume, choose a placement away from the lower right, then pull another still and check again. Sume does not know where Amazon's player draws its controls, so the spec is your guide, and Amazon's review is the last word.
Sources
Related posts
More in Use cases
- Amazon Sponsored Products vertical video: export both ratios now
Amazon says vertical 9:16 for Sponsored Products video is to be available in 2026, while 16:9 is recommended today. Export both ratios from one master.
- Amazon Sponsored Products video: product must fill 50% of frame
Amazon's Sponsored Products video guide wants the product to fill at least half the frame and no audio. How to check a clip's stills before uploading it.
- Amazon Vine requirements: image, description, under 30 reviews
Amazon Vine needs FBA, an image, a description and under 30 reviews, and works best 3 weeks before launch. Fees, plus a Sume asset plan for that window.
- Animate a locally generated image with Sume video: first frame
Made a still with a local open-weights model? Host it at a public HTTPS URL, send it as first_frame to POST /v1/videos, and poll. Plus the licence check first.
Written by Sume