Christmas tree lot flyer art with GPT Image 2.5: quote every line
Tree lot flyer on GPT Image 2.5: custom 1536x2048 is legal, quality defaults to high, and usage.cost shows the billed price.

To make a Christmas tree lot flyer, call openai/gpt-image-2.5 with the headline and hours in quotes, a 3:4 aspect_ratio or a custom image_size such as 1536x2048, and leave quality at its default of high. Price depends on quality and size, so read usage.cost on the response, which is the billed amount at list times 1.25.
Facts here come from Sume's Image API page and the catalog source, read on 2026-10-05. A lot flyer is mostly words (the lot name, the date range, the hours), so the first job is to choose a model that is documented to take quoted text and a size that is legal for it.
Which size and quality settings are legal?
For custom pixels on ChatGPT Image 2.5 both edges must be multiples of 16, the longest edge is at most 3840, the aspect ratio is at most 3:1, and the total is between 655,360 and 8,294,400 pixels. 1536x2048 passes all four tests: 1536 and 2048 are both multiples of 16, and the area is 3,145,728 pixels.
| Setting | Value on Sume | Why it matters |
|---|---|---|
| Model id | openai/gpt-image-2.5 | Flare variant; Sunburst is a second id |
quality | auto, low, medium, high, xhigh, max; default high | Higher tiers cost more |
aspect_ratio | Includes 3:4, 4:5 and 9:16 | Portrait flyer shapes |
image_size | Custom WxH, multiples of 16 | Takes priority over aspect_ratio |
| Billed price | Read usage.cost | List x 1.25, varies by quality and size |
| Reference images | Up to 16 | For a lot logo or a map |
How do I send the flyer text?
Quote each line exactly and say how many times it appears. Do not ask the model for a phone number or address you cannot proofread; set those in your layout tool. This call asks for three quoted lines on a portrait canvas.
import os, requests
body = {
"model": "openai/gpt-image-2.5",
"prompt": "Poster for a Christmas tree lot. Title in large letters: \"PINE HILL TREE LOT\". Under it: \"Fresh trees, Nov 28 to Dec 23\". Illustrated fir trees and string lights, no other text.",
"image_size": {
"width": 1536,
"height": 2048
},
"quality": "high"
}
r = requests.post(
"https://api.sume.com/v1/images",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json=body,
timeout=60,
)
if r.status_code == 200:
out = r.json()
for img in out["data"]:
print(img["url"])
print("billed USD:", out["usage"]["cost"])
elif r.status_code == 202:
print("still running, poll:", r.json()["data"]["status_url"])
else:
print(r.status_code, r.text)What should I proof before printing?
- Read every word at full size; compare each quoted line character by character with your copy.
- Print sizes need pixels: see Sume's pixel-per-inch posts before choosing a trim size.
- If the title is wrong, regenerate with the same quoted line rather than editing it in a raster tool.
- Keep the date and hours in code or layout software for the final file so a typo costs nothing.
Sources
Related posts
More in Models
- Czech, Hungarian, Romanian, Polish TTS: what MAI lists, what Sume tags
MAI-Voice-2.1 lists cs, hu, ro and pl. Sume tags only pl. A one-cent test plan and the Romanian s-comma versus s-cedilla encoding trap that breaks reads.
- Danish, Finnish, Norwegian TTS: on MAI's list, Sume tags only Swedish
MAI-Voice-2.1 lists da-DK, fi-FI, nb-NO and sv-SE. Sume's voice library tags only sv. How to test a Nordic ad read for 1 cent and keep Bokmal text consistent.
- Dutch text to speech API for ads: MAI-Voice-2.1 nl-NL vs Sume nl
Dutch is on both lists: MAI-Voice-2.1 (nl-NL) and Sume's voice tags (nl). Test numbers, loanwords and the je/u register for 1 cent, then price a campaign.
- Filipino and Cantonese: fil and yue codes in MAI-Transcribe-2 vs Sume
MAI-Transcribe-2-Streaming lists fil and yue and treats unknown codes as unset. Sume takes a 2-16 character language_code hint; test a sample before relying.
Written by Sume