Google Play app icon: 512x512 32-bit PNG with alpha, 1024 KB
Play wants a 512 x 512, 32-bit PNG with alpha, at most 1024 KB. Get a transparent square from ChatGPT Image 2.5 on Sume, then resize and check the size.
Google Play's preview-asset page lists the app icon as a 32-bit PNG with alpha, exactly 512 x 512 pixels, and at most 1024 KB. On Sume, the transparent square comes from ChatGPT Image 2.5 with background: "transparent" and output_format: "png", and the exact size is a Pillow resize afterward.
What Play specifies
The same page gives different rules for the feature graphic and screenshots: those must have no alpha. Only the icon is the alpha asset, so a flattened JPEG export is the wrong output for it.
| Asset | Format | Size | File size |
|---|---|---|---|
| App icon | 32-bit PNG (with alpha) | 512 x 512 | Up to 1024 KB |
| Feature graphic | JPEG or 24-bit PNG (no alpha) | 1024 x 500 | No limit stated |
| Screenshots | JPEG or 24-bit PNG (no alpha) | 320 to 3840 px per side | No limit stated |
The Sume side
The Image API docs say background: auto|transparent|opaque is supported by ChatGPT Image 2.5, which is openai/gpt-image-2.5. Other models reject a parameter they do not list with 400 unsupported_parameter. The docs also say that for transparent stills today you can use Image 1.0 with transparency: true, so if the request is refused on your account, that is the documented fallback. Ask for aspect_ratio: "1:1", which the GPT Image family lists.
A 200 response carries data[].url; a 202 means the 30-second block expired and the result is read from the job. The script stops on 202 rather than parsing the wrong body.
Resize to the exact size
Convert to RGBA so the alpha channel is guaranteed, resize with LANCZOS, save PNG, then compare the byte count with the 1024 KB limit. Flat artwork with a transparent surround is far below the limit; a photographic icon may not be.
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": "openai/gpt-image-2.5", "aspect_ratio": "1:1", "prompt": "bold rounded geometric app mark, flat colors, no text", "background": "transparent", "output_format": "png"},
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))
icon = img.convert("RGBA").resize((512, 512), Image.LANCZOS)
icon.save("play-icon.png", optimize=True)
size_kb = os.path.getsize("play-icon.png") / 1024
print(f"{size_kb:.0f} KB")
assert size_kb <= 1024, "over the Play icon limit"Why the byte limit rarely bites
A flat icon at 512 x 512 is usually tens of kilobytes as a PNG, so 1024 KB is a generous ceiling. It becomes relevant only when the mark has gradients, noise or a photographic texture, which also tend to look worse at launcher sizes. If the file is too large, reduce the palette with quantize before reaching for lossy options, since PNG is lossless and Play requires PNG. The page says the icon must be a 32-bit PNG with alpha, so do not quantize to a palette that drops the alpha channel without testing that the result still opens as RGBA. Keep an unresized master at the larger size the API returned; the store asks for exactly 512 x 512, but your website or app listing elsewhere may need a different size, and downscaling from a master is always cleaner than upscaling from a derived file.
Check before upload
- Open the icon on both a light and a dark surface; alpha hides nothing when the mark is the same color as the background.
- Play applies its own rounded mask for display, so keep the mark centered with margin instead of running it to the corners.
- ChatGPT Image 2.5 is billed from token estimates, and the response
usage.costis the amount charged. Sume lists failed generations as not billed. - Do not use this file for the feature graphic or screenshots; both must have no alpha. See the feature graphic post.
Sources
Related posts
More in Developers
- Google Play screenshots: 9:16 at 1080x1920, side limit 2x
Play screenshots need 320 to 3840 px and a long side at most twice the short side. Four 1080 x 1920 9:16 shots also meet the promo eligibility note on the page.
- Goose 1.52 recipe consent before extensions: a Sume MCP recipe
Goose 1.52 asks for recipe consent before session/new spawns extensions, and caps recipe size. What to put in a recipe that uses Sume's MCP server.
- got maxRetryAfter and 429: rate_limited vs queue_full on Sume
got retries 429 and honors Retry-After up to maxRetryAfter. Sume sends 429 for rate_limited and for queue_full, which need different waits. Here is the split.
- got does not retry POST by default: enable it safely with Sume
got retries GET, PUT and DELETE but not POST. To retry a Sume paid submit, add POST to retry.methods and send one Idempotency-Key reused on every attempt.
Written by Sume