AI app icon via API: generate 1:1, add a transparent option, resize
App icon art from the Sume image API: 1:1 text-free art, ChatGPT Image 2.5 for a transparent background, and a Pillow loop that exports the sizes you need.
An app icon is a square image with no text, so the Sume image API handles it with aspect_ratio: "1:1", which every catalog row lists, read 2026-10-03. Generate a large square, pick one, and make every smaller size yourself in code. If you want the symbol on a transparent background, ChatGPT Image 2.5 (openai/gpt-image-2.5) is the row that lists background: "transparent", per the Image API page.
Store requirements differ by platform and change, so this post does not state any. Check the platform's current icon page and export the sizes it lists.
Pick the row
| Need | Row | Per image |
|---|---|---|
| Cheapest concept drafts | Qwen Image or Grok Imagine | $0.025 |
| Transparent background | ChatGPT Image 2.5 (background: transparent) | $0.06588 at high/1024 |
| Larger tier | Nano Banana 2 (resolution up to 4K) | $0.10 at 1K |
Generate a transparent symbol
background is only valid on ChatGPT Image 2.5; other rows return 400 for it. Ask for a simple centered symbol, flat colors and no text. A call that is still running after the 30-second wait returns 202 with a job envelope instead of 200, so check the status code before reading data; see Jobs and results.
import os
import requests
resp = requests.post(
"https://api.sume.com/v1/images",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json={
"model": "openai/gpt-image-2.5",
"prompt": "simple flat symbol of a paper airplane made of two folded triangles, centered, no text",
"aspect_ratio": "1:1",
"background": "transparent",
"output_format": "png",
},
timeout=60,
)
resp.raise_for_status()
if resp.status_code == 202:
print("still running:", resp.json()["data"]["status_url"])
else:
for image in resp.json()["data"]:
print(image["url"])Export the sizes
Resize from the largest source, never from a smaller export. LANCZOS keeps edges clean.
from PIL import Image
src = Image.open("icon.png").convert("RGBA")
for size in (1024, 512, 180, 120, 60):
src.resize((size, size), Image.LANCZOS).save(f"icon-{size}.png")Checks before you ship
- View the 60-pixel export: fine detail disappears at small sizes.
- Confirm the alpha channel if you asked for a transparent background.
- Keep the prompt and the model id with the file so you can regenerate it.
Sources
Related posts
More in Use cases
- AI architecture concept render from a sketch via API on Sume
Turn a massing sketch or photo of a model into a concept render: reference edit rows on Sume from $0.025, 16:9 framing, and why you should label it a concept.
- AI avatar mock interview: live interviewer or question clips
Tavus lists an Interviewer PAL as a live use case. Sume can render each interview question as a short avatar clip with a thinking pause. Where each one fits.
- AI avatar of a real person: release checklist before the photo
Before you turn an employee's or creator's photo into a Sume avatar, get a written release. A checklist for scope, term and revocation, matched to the API.
- AI avatar sales agent: live SDR or personalised clips?
Tavus builds live SDR avatars on a per-minute plan. Sume renders one 4-60 second avatar clip per lead from a script. How to pick, plus a Python loop.
Written by Sume