AI shop window decal preview: show vinyl lettering on your glass
See opening hours, a logo and promo vinyl on your shop window before you order: one storefront photo, a mask over the glass, and a Sume edit with quoted text.

Vinyl on glass is a text edit
A window decal is mostly words: a name, hours and a short offer. Photograph the front, mask the glass and ask for vinyl lettering with quoted text. The edit shows spacing and contrast before you pay for cutting.
mask_url on ChatGPT Image 2.5 keeps the edit on the glass. OpenAI's guide says the model can still struggle with precise text placement and clarity.
Sume Image API docs list ChatGPT Image 2.5 as openai/gpt-image-2.5 (Flare) and openai/gpt-image-2.5-sunburst. OpenAI's guide says to choose Sunburst where editing precision matters most and Flare for fast everyday generation, so these edits use Sunburst.
Quote every line and keep it short
Put each line of the decal in quotation marks and say the line order. Keep it to a name and two short lines. State the vinyl color, white or gold, and that reflections in the glass should stay.
import os
import requests
REFS = [
"https://example.com/storefront.jpg",
]
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-sunburst",
"prompt": "On the front window glass, add white vinyl lettering with "
"three lines: \"HOLLOWAY BAKERY\", \"OPEN 7 - 3\", \"FRESH BREAD "
"DAILY\". Keep reflections, door, frame and sign unchanged.",
"aspect_ratio": "auto",
"mask_url": "https://example.com/window-mask.png",
"input_references": [
{"type": "image_url", "image_url": {"url": u}} for u in REFS
],
},
timeout=60,
)
print(resp.status_code)
print(resp.json())Proofread against the order
Spelling and hours are the costly errors.
| Check | Why |
|---|---|
| Each line against the order | Model text can contain mistakes |
| Hours | Wrong hours are an expensive reprint |
| Contrast | White on dark glass, gold on light |
| Mask | alpha channel, same size and format as the photo |
Send the sign maker a vector file
The render shows spacing and tone, not cut paths. Send your sign maker the approved text as a vector file or plain text, not the raster output.
Inputs Sume checks before it spends anything
Reference and mask URLs must be public HTTPS; localhost, private-network and non-HTTPS URLs are rejected. Sume also checks every field against the model's catalog entry, so a field the model does not list returns 400 unsupported_parameter instead of being dropped without a word.
If you are unsure which fields a model accepts, GET /v1/images/models lists them, and GET /v1/images/models/{id}/endpoints returns the per-endpoint capabilities and pricing.
Timing and what a call costs
POST /v1/images on Sume waits up to 30 seconds and returns 200 with the image. If the generation is still running at that point you get 202 and a job envelope with a status URL and a result URL instead. The docs name 4K, high quality and large n as the settings most likely to degrade to 202, so branch on the status code, not on the body shape.
Billing is all-or-nothing. A completed generation is billed in full, a failed or cancelled one is not, and usage.cost in the response is the USD amount charged: the provider list price times 1.25.
Sources
Related posts
More in Use cases
- AI sneaker product photo on a colored backdrop, from one packshot
Keep the sneaker, change the set: a prompt, a preserve list and a reference photo give colored-backdrop product stills. Request, ratio and checks on Sume.
- AI sofa fabric preview: swap the upholstery using a swatch photo
Preview a new sofa fabric: the sofa photo first, a photo of the fabric swatch second, a mask on the upholstery, and one Sume edit that keeps legs and cushions.
- AI sonic logo generator: a short audio sting by prompt, then trim
Make a 2 to 4 second sonic logo with AI: write the sting into the prompt, then cut it with Timeline audio. Sume has no duration field and no fade on the cut.
- AI tabletop RPG portraits via API: keep one art style on Sume
A party of RPG portraits in one art style: make an anchor portrait, then pass its URL as an input reference per character. $0.0375 each on Flux 2 Pro.
Written by Sume