One image set for Chrome Web Store and Edge Add-ons: sizes
Both stores list a 440 x 280 small tile and a 1400 x 560 marquee. Edge adds 640 x 480 and 1280 x 800 screenshots, so one Sume master set can serve both.

The Chrome Web Store and Microsoft Edge Add-ons agree on two promotional tile sizes: a 440 x 280 small tile and a 1400 x 560 large tile or marquee. Their logo rules differ slightly, with Edge recommending 300 x 300 and a 128 x 128 minimum. If you ship one extension to both, one master tile and one marquee from Sume cover both stores, and only the logo and screenshots need store-specific checks.
Side by side
The two pages were read on the same day. Chrome's promotional tile page marks the small tile required and the marquee optional; Edge marks both optional.
| Asset | Chrome Web Store | Edge Add-ons |
|---|---|---|
| Small promo tile | 440 x 280 | 440 x 280 |
| Large tile or marquee | 1400 x 560 | 1400 x 560, PNG |
| Logo or icon | 128 x 128 icon | 1:1, 300 x 300 recommended, 128 x 128 minimum |
| Screenshots | See the Chrome page | Up to 6, 640 x 480 or 1280 x 800 |
What this means for the generation plan
Make one 3:2 master for the small tile and one 21:9 master for the large tile, both on a model that lists those ratios, such as FLUX.2 Pro in the catalog. Crop each to the target and save. The same files then upload to both stores. For the logo, generate a 1:1 image at full resolution, save a 300 x 300 file for Edge, and make the 128 x 128 icon with padding for Chrome as described in the 128 px padding post.
One script for both tiles
This reuses the crop in one function and writes both files. Run it twice with different ratio and prompt arguments.
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": "black-forest-labs/flux.2-pro", "aspect_ratio": "21:9", "prompt": "wide scene of floating browser windows, saturated colors, 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 = 1400 / 560
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((1400, 560), Image.LANCZOS)
img.save("marquee.png")
w, h = img.size
box_w = round(h * 440 / 280)
left = (w - box_w) // 2
small = img.crop((left, 0, left + box_w, h))
small.resize((440, 280), Image.LANCZOS).save("small-tile-from-marquee.png")Order of work
Start with the images both stores share, since they cost the least rework. Generate the 21:9 master and the 3:2 master first and crop them to 1400 x 560 and 440 x 280. Then do the logo, which differs: Edge recommends 300 x 300 with a 128 x 128 minimum, and Chrome's icon is 128 x 128 with 96 pixel artwork and padding. Make the 300 pixel file first and derive the 128 pixel file from the same master. Last, take screenshots, which are real captures; Edge accepts only 640 x 480 or 1280 x 800, so export those two sizes from your capture tool. Keep one folder per store so an update to one listing does not overwrite the other, and note the date you checked each page, because both stores can change their rules.
Limits
Cropping a 1400 x 560 strip down to 440 x 280 keeps only the middle band, so a separate 3:2 generation looks better if the subject matters. The script above is a shortcut for placeholders. Each store can change its rules, so recheck both pages before a release.
If a store later changes a size, only the crop step changes; the generated masters stay valid, which is the reason to keep them at the larger size the API returned.
Sources
Related posts
More in Developers
- One request for four Sume video models: 1080p, 5 to 10 s, 16:9 or 9:16
Kling 3, Wan 3.0, H3 Max and Omni share one request shape: 1080p, 5 to 10 seconds, 16:9 or 9:16. Compute the intersection in Python and price each model.
- Agent Builder structured outputs into a capped Sume Agent Completion
OpenAI advises structured outputs between nodes. Map that JSON into a Sume Agent Completion, with the spend cap set by your code, not the model.
- OpenAI Agents SDK client_session_timeout_seconds with Sume jobs_wait
In the OpenAI Agents SDK for Python, client_session_timeout_seconds sets the MCP read timeout. Set it above Sume's 55-second jobs_wait cap, or 0 to disable it.
- OpenAI Agents SDK max_retry_attempts and Sume paid calls
The OpenAI Agents SDK can retry MCP list_tools and call_tool. A retried Sume create must repeat its idempotency_key or you pay twice; set max_spend_usd too.
Written by Sume