AI favicon for Google Search: square, over 48 px, stable URL
Google wants a square favicon bigger than 48 px at a URL that stays put. How to make one with the Sume image API, what it costs, and what no tool can promise.
A favicon that Google Search can show must be square (1:1), larger than 48x48 pixels is recommended, and its URL must be stable. You can make the picture with one square call to the Sume image API for between about $0.007 and $0.066, but the call cannot make Google show it; Google says favicons are not guaranteed to appear even when the guidelines are met.
What Google's page says
These are the points from Google's favicon guidelines (read 2026-10-03).
| Item | Google's guideline |
|---|---|
| Shape | Square, 1:1 aspect ratio |
| Minimum size | 8x8 pixels |
| Recommended size | Larger than 48x48 pixels |
| Formats | BMP, GIF, ICO, PNG, JPEG, PPM, TIFF |
| URL | Stable; do not change it often |
| Per site | One favicon per hostname |
| Crawling | Googlebot and Googlebot-Image must be able to fetch the file |
| Timing | Allow several days to weeks for a recrawl |
Making the picture on Sume
Every catalog row lists 1:1 in its aspect_ratio descriptor, so any model can draw a square. For a favicon the model matters less than the brief: one bold shape, two or three flat colors, no words. A favicon renders at 16 to 48 pixels in a tab or search result, and letters become noise.
If you want a transparent ground, use openai/gpt-image-2.5 with background: "transparent" and output_format: "png"; the Image API docs list background for that model only. Otherwise a cheap row such as Imagen 4 Fast or Grok Imagine at $0.025 per image is plenty for a simple mark.
| Model | Price per image | Note |
|---|---|---|
| Grok Imagine (x-ai/grok-image) | $0.025 | One image per call |
| Imagen 4 Fast (google/imagen-4-fast) | $0.025 | Text-to-image only |
| GPT Image 2.5 low | $0.0074 | Estimate; supports transparent background |
| GPT Image 2.5 medium | $0.0165 | Estimate |
| GPT Image 2.5 high | $0.0659 | Default quality |
Export steps
Generate at 1:1, then downscale with Pillow to your master sizes. Write a PNG at 192 px as the file you link, and an ICO with 16, 32 and 48 for old browsers that read /favicon.ico. The script below does both from one call.
import os, requests
from io import BytesIO
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",
"quality": "low", "background": "transparent",
"output_format": "png",
"prompt": "a bold orange fox head, flat vector icon, two colors, no text"},
timeout=90)
if r.status_code != 200:
raise SystemExit(f"{r.status_code}: poll {r.json()['data']['status_url']}")
raw = requests.get(r.json()["data"][0]["url"], timeout=60).content
img = Image.open(BytesIO(raw)).convert("RGBA")
img.resize((192, 192)).save("favicon-192.png")
img.save("favicon.ico", sizes=[(16, 16), (32, 32), (48, 48)])
Things the file cannot fix
Host the file where it will stay. Google asks for a stable URL, so do not put it behind a build hash that changes every deploy, and do not point the rel=icon link at a temporary job URL. Copy the result onto your own domain or CDN.
Also keep a human check in the loop: look at the 16 px render before you ship. Sume does not check whether your favicon is representative of your brand, and Google says it replaces inappropriate icons with a default one. Plan for a wait too: Google says a recrawl of your home page can take several days to weeks, so a changed icon will not show up the same afternoon.
Sources
Related posts
More in Developers
- AI image API timeouts in Python: httpx above 30 s, 200 or 202
Sume's image endpoint holds a request up to 30 seconds, then returns 202 with a job. A runnable httpx example with a 40 second client timeout.
- Editing an image five times with AI: keep PNG between passes
Each JPEG save adds error that stays in every later edit. A Pillow test of PNG against JPEG over five passes, and the format to request from Sume.
- AI presenter video from a script: first clip in Python on Sume
Make an AI presenter clip from a script in one Python file: submit to /v1/avatar-1.0/talking-video, poll to terminal, read the result. Costs and limits.
- AI SDK MCP tools(): explicit Zod schemas for Sume's jobs_wait
Pass explicit Zod schemas to mcpClient.tools() so your app exposes only the Sume tools it needs, with typed job ids and a bounded wait_for.
Written by Sume