Edge Add-ons screenshots: 640x480 or 1280x800, up to 6
Edge accepts up to 6 screenshots at 640 x 480 or 1280 x 800. 640 x 480 is 4:3, which Sume lists; 1280 x 800 is 16:10, so crop a 16:9 source.

Microsoft Edge Add-ons allows a maximum of 6 screenshots per language, each either 640 x 480 or 1280 x 800 pixels. Those are two different ratios: 640 x 480 is 4:3, which every Sume image model lists, and 1280 x 800 is 16:10, which only the Ideogram models list. For the second size with another model, generate 16:9 and crop 10% of the width.
Which size from which ratio
Edge's page asks for screenshots that describe the extension's functionality in detail, so the real UI belongs in the frame; an image model supplies the backdrop or a stylized frame around it.
| Edge size | Ratio | Sume source ratio | Crop needed |
|---|---|---|---|
| 640 x 480 | 4:3 (1.333) | 4:3, listed by every image model | None, resize only |
| 1280 x 800 | 16:10 (1.6) | 16:9 (1.778) | Remove 10% of the width |
Do the arithmetic on the 16:9 source
Cropping 16:9 to 16:10 means cutting width, since the target is narrower: the kept width is 1.6 / 1.778 = 90% of the original. So 10% of the width disappears, 5% from each side. The script computes the crop in code instead of by hand.
Generate a backdrop and crop
The script asks for 16:9, crops the width to 16:10, and resizes to 1280 x 800. For the 640 x 480 variant, ask for 4:3 and resize directly.
import os, io, requests
from PIL import Image
r = requests.post(
"https://api.sume.com/v1/images",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json={"model": "bytedance-seed/seedream-4.5", "aspect_ratio": "16:9", "prompt": "soft gradient desk scene with empty space in the middle, no text"},
timeout=90,
)
r.raise_for_status()
if r.status_code != 200:
raise SystemExit("202: read the finished job from /v1/jobs/{id}/result")
img = Image.open(io.BytesIO(requests.get(r.json()["data"][0]["url"], timeout=60).content))
w, h = img.size
target = 1280 / 800
if w / h > target:
nw = round(h * target)
img = img.crop(((w - nw) // 2, 0, (w - nw) // 2 + nw, h))
else:
nh = round(w / target)
img = img.crop((0, (h - nh) // 2, w, (h - nh) // 2 + nh))
img = img.convert("RGB").resize((1280, 800), Image.LANCZOS)
img.save("edge-shot-bg.png")Consistency across six frames
Six screenshots in a listing should look like a set. Generate the backdrops from one prompt template with only the focal text area changing, keep the same model, and save the prompt next to each file so a later redraw matches. The Image API does not serve seed in v1, since it returns 400 unsupported_parameter, so identical prompts will not reproduce identical images; rely on the template and a style description instead. If one frame needs a redo, regenerate only that one and check it beside the others at the 640 pixel size, because that is how the store grid will show it. Remember that each language has its own screenshot set, with a Duplicate option to copy a screenshot across languages.
What not to fake
A screenshot store image that shows features the extension does not have is a policy problem on any store, and Edge's own developer policies are linked from the page. Place a real capture over the generated backdrop and keep the UI pixels exact. The usage.cost field in each response is what Sume billed; six backdrops are six generations, or one call with n where the model's catalog entry allows it.
Treat the six-screenshot cap as a budget: the first two frames carry most of the decision, so spend your redraws there. The page does not say which frame is shown first in the listing, so check the order in Partner Center after upload.
Sources
Related posts
More in Developers
- Elixir 1.20: verify a Sume webhook with :crypto.mac
An Elixir module that checks the Sume sume-v1 header with :crypto.mac and a guard clause that refuses an empty secret. Written against Elixir 1.20.4.
- Episode idempotency keys: season, episode and version for Sume runs
Build the Sume Idempotency-Key from series, season, episode and a version you bump on purpose. What replays, what conflicts, what needs a new key.
- Extend a video Veo didn't make: which API takes an uploaded clip
Veo 3.1 extension only accepts Veo-made videos. Here is what Gemini Omni and Sume accept instead when you need to continue a clip you uploaded.
- Extend an AI clip by hand: last frame to the next clip, in Python
No extend endpoint? Pull a clip's last frame with Sume's video-frames API and feed it as the first frame of the next job. Python code under 30 lines.
Written by Sume